java骑士飞行棋小游戏

合集下载

java骑士飞行棋 小游戏

java骑士飞行棋 小游戏

突然想起自己刚学java时,老师让写一个java骑士飞行棋,那时候还不知道写,到处问人,勉强写好了,结果全是放在主函数里,今天闲来没事,花了一会,再次写了个骑士飞行棋小游戏,希望对初学者有帮助吧。

代码中,可能用到了初学者还没接触到的东西,不过都不难,注释都有写明,花点时间就能明白的。

一共三个类。

分别:Game.javaMap.javaPlayer.javapackage chou.game.flying;import java.util.Random;import java.util.Scanner;public class Game {private Scanner sc = new Scanner(System.in);private static Map map = new Map();/*** 静态块,初始化地图* 加载时就会被执行的内容* 不理解的,可以在static{}块里打印一句话,看看控制台反映*/static {map.initMap();}/*** 游戏开始*/public void GameStart() {//游戏开始界面welcome();//选择角色,生成对象数组Player [] players = getPlayer();//游戏开始循环,直到有玩家胜出,结束boolean isAnyoneWin = false;while (!isAnyoneWin) {//遍历玩家数组,让每个玩家依次进行掷点for (int i = 0; i < players.length; i++) {//对玩家的状态进行判断,是否处于暂停状态if (players[i].getStatus() == 1) {//如果玩家处于暂停状态,恢复暂停状态并跳过此回合players[i].setStatus(0);statusSay(players[i]);continue;}//判断玩家,手动掷点if (i != 0) {letPlayerRoll(players[i]);}//进行掷点int count = roll();System.out.println(players[i].getName() + " 掷出了 " + count + " 点");//记录玩家roll点前位置和roll点后位置,判断玩家位置是否到达终点players[i].setLastPosition(players[i].getPosition());players[i].setPosition(players[i].getPosition() + count);//判断是否踩中对方int secondNum = Math.abs(1 - i);if (isHit(players[i], players[secondNum])) {players[secondNum].setPosition(0);if (players[i].getLastPosition() != 0) {changMap(players[i].getLastPosition(),players[i].getLastPositionFlag());}}if (checkAnyoneWin(players[i].getPosition())) {isAnyoneWin = true;//打印游戏结束标语gameOver(players[i]);continue;}else {//判断将去位置是否有特殊效果,判断效果之后,理论上来说,应该再次进行判断是否有特殊效果//但我们这里不设这种情出现,因为再来循环的话,代码会更复杂,不利于初学者学习//在这里,我们只判断再进行一次roll点的判定String mapBuff = null;mapBuff = getMapFlag(players[i].getPosition());if (!("=".equals(mapBuff))) {players[i] = checkBuff(players[i], mapBuff);}else if ("*".equals(mapBuff)) {count = roll();players[i].setPosition(players[i].getPosition() + count);}//判断是否踩中对方secondNum = Math.abs(1 - i);if (isHit(players[i], players[secondNum])) {players[secondNum].setPosition(0);if (players[i].getLastPosition() != 0) {changMap(players[i].getLastPosition(), players[i].getLastPositionFlag());}}//记录玩家去的位置的形状,地图复原使用mapBuff = getMapFlag(players[i].getPosition());players[i].setLastPositionFlag(mapBuff);//改变地图上玩家的位置,先复原,再改变//初始位置是为0,所以要判断if (players[i].getLastPosition() != 0) {changMap(players[i].getLastPosition(),players[i].getLastPositionFlag());}//三目运算符,i == 0 是一个布尔式,? 疑问,如果是真,返回:前面的值,如果假,:后面的值mapBuff = i == 0 ? "C" : "P";changMap(players[i].getPosition(), mapBuff);}map.showMap();}}}/*** 判断是否踩中对方* @param first 前面玩家* @param second 后面玩家*/public boolean isHit(Player first,Player second) {boolean temp = false;if (first.getPosition() == second.getPosition()) {temp = true;}return temp;}/*** 玩家掷点阻塞* @param player 玩家信息*/public void letPlayerRoll(Player player) {System.out.println("请玩家 " + player.getName() + " 掷点~");sc.next();}/*** 检查玩家到达的地图位置是否有特殊效果* @param player 玩家* @param mapBuff 地图标识* @return执行过buff后的玩家对象*/public Player checkBuff(Player player,String mapBuff) { if ("-".equals(mapBuff)) {System.out.println(player.getName()+ " 进入黑洞,迷失了方向,后退6步");System.out.println(player.getName() + ":shit!");player.setPosition(player.getPosition() - 6);}else if ("+".equals(mapBuff)) {System.out.println(player.getName() + " 进入时空隧道,前进6步");System.out.println(player.getName() + ":luckily!");player.setPosition(player.getPosition() + 6);}else if ("*".equals(mapBuff)) {System.out.println(player.getName() + " 进行了空间跳跃~再来一次");System.out.println(player.getName() + ":see me fly!");player.setStatus(0);}else if ("^".equals(mapBuff)) {System.out.println(player.getName() + " 抛锚了,暂停一次");System.out.println(player.getName() + ":what is the fuck!");player.setStatus(1);}return player;}/*** 改变地图上玩家的位置* @param position 位置* @param flag 地图形状*/public void changMap(int position, String flag) {if (position < 31) {map.map[0][position - 1] = flag;}else if (position > 30 && position < 36) {map.map[position - 30][29] = flag;}else if (position > 35 && position < 66) {map.map[6][position - 35] = flag;}else if (position > 65 && position < 71) {map.map[position - 59][0] = flag;}else if (position > 70 && position < 101) {map.map[12][position - 71] = flag;}}/*** 暂停言语* @param player 被暂停的玩家*/public void statusSay(Player player) {System.out.println(player.getName() + " 暂停中...........");}/*** 获得地图指定位置的形状* @param position 位置* @return*/public String getMapFlag(int position) {String flag = "=";if (position < 31) {flag = map.map[0][position - 1];}else if (position > 30 && position < 36) {flag = map.map[position - 30][29];}else if (position > 35 && position < 66) {flag = map.map[6][65 - position];}else if (position > 65 && position < 71) {flag = map.map[position - 59][0];}else if (position > 70 && position < 101) {flag = map.map[12][position - 71];}return flag;}/*** 胜利标语* @param player 玩家*/public void gameOver(Player player) {System.out.println("whar a palyer!!");System.out.println(" 玩家 " + player.getName() + " 率先到达终点,获得了胜利");}/*** 判断是否胜利* @param position 位置* @return boolean,temp*/public boolean checkAnyoneWin(int position) {boolean temp = false;temp = position >= 100 ? true : false;return temp;}/*** 掷点* @return int,count 点数*/public int roll () {int count = 0;//产生一个6以内的随机数Random random = new Random();count = random.nextInt(6) + 1;return count;}/*** 选择角色* @return Player [],players 玩家对象数组*/public Player [] getPlayer(){boolean flag = true;//创建对象数组,长度为2,用来接收玩家对象和电脑Player [] players = new Player[2];Player player = new Player();player.setNum(1);Player computer = new Player();while (flag) {String userChoose = sc.next();//获取输入内容,判断是否 1,2,3,根据选择给玩家对象赋名if (!userChoose.matches("[1-3]")) {System.out.println("→ 选择角色失败,请重新选择");} else {switch (Integer.parseInt(userChoose)) {case 1:player.setName("YaGaMi");break;case 2:player.setName("Killer");break;case 3:player.setName("Chou");break;default:break;}System.out.println("→ 你选择了 " + player.getName() + " 作为你的游戏角色");System.out.println("→ 电脑选择了 Fujiwara no Mokou 作为游戏角色" );computer.setName("Fujiwara no Mokou");//数组第1位是玩家,第二位是电脑players[1] = player;players[0] = computer;flag = false;}}return players;}public void welcome() {System.out.println("*********************************");System.out.println("*******欢迎来到飞行棋小游戏*******");System.out.println("*********************************");System.out.println();System.out.println("游戏说明:");System.out.println("地图上随机出现 * - ^ + 四种效果");System.out.println("分别代码:再掷1次,后退6步,暂停1次,前进6步");System.out.println();System.out.println("→ 请选择你的喜欢的游戏角色编号:");System.out.println("1.YaGaMi");System.out.println("2.Killer");System.out.println("3.Chou");}public static void main(String[] args) {new Game().GameStart();}}package chou.game.flying;public class Map {public String [][] map = new String[13][30];public void initMap() {for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i == 0 || i == 6 || i == 12 || (i < 6 && j == 29) || (i > 6 && j == 0)){map[i][j] = "=";}else {map[i][j] = " ";}}}map[0][6] = "+";map[0][8] = "-";map[0][15] = "*";map[0][20] = "-";map[0][29] = "^";map[3][29] = "*";map[6][7] = "^";map[6][16] = "+";map[6][20] = "-";map[6][28] = "^";map[10][0] = "*";map[12][7] = "-";map[12][8] = "^";map[12][15] = "-";map[12][20] = "^";map[12][23] = "-";map[12][28] = "-";}public void showMap(){for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i == 6){System.out.print(map[i][29-j] + " ");}else {System.out.print(map[i][j] + " ");}}System.out.println();}}public static void main(String[] args) {}}package chou.game.flying;public class Player {private String name;//玩家状态private int status;//玩家当前位置private int position;//玩家上把位置private int lastPosition;//玩家上把位置的地图形状private String lastPositionFlag;//玩家编号private int num;public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getName() {return name;}public void setName(String name) { = name;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public int getPosition() {return position;}public void setPosition(int position) { this.position = position;}public int getLastPosition() {return lastPosition;}public void setLastPosition(int lastPosition) { stPosition = lastPosition;}public String getLastPositionFlag() {return lastPositionFlag;}public void setLastPositionFlag(String lastPositionFlag) { stPositionFlag = lastPositionFlag;}}。

骑士飞行棋2

骑士飞行棋2
printf("\n");
printf("------玩家B现在在第%d 格--------------\n" , B );
Sleep(1000);//暂停1秒
}
if (map[t] == 0)//如果是普通的道路
{
map[t] = 10;//将所在位置变为A
x = rand()%6 +1;
A = A + x ;//将x的值加到A中
t = A - 1 ; //数组的下标
printf("丁零当啷......");
printf("\n");
printf("++++++玩家A 掷出%d的点数++++++++++++++\n" , x );
case 1:printf(" ¤\n");break;
case 2:printf(" ★\n");break;
map[t] = 10;//改变地图上的输出的 字符
system ("cls");//清屏
printf("\n");printf("\n");
printf("Oh My God , 时空隧道!! 冲啊^_^\n");
printf("玩家A现在在第%d 格--------------------------\n" , A );
printf("\n");printf("\n");

北大青鸟ACCP阶段项目__骑士飞行棋_java

北大青鸟ACCP阶段项目__骑士飞行棋_java
骑士飞行棋
问题描述
开发一款Java小游戏——骑士飞行棋
游戏规则和传统的飞行棋一样,支持两人对战 采用100格小型游戏棋盘 游戏规则:对战双方轮流掷骰子控制自己的骑兵前进或后退,在 游戏棋盘上设置有关卡
普通 地雷 暂停 时空隧道 幸运轮盘(提供两种运气:交换位置和轰炸)
棋盘上的关卡只在骑兵第一次移动遇到时有效
switch(i){
case 0: //普通格
if(对方在此格){
//对方被炸回起点
}
case 1: //幸运轮盘
//选择和对方交换位置——做交换
//选择轰炸对方——对方退6步
case 2: //地雷
//退后6步
case 3: //暂停键
//设置goAndStop为off,标识下轮暂停
case 4: //时空隧道
2
设计骑士飞行棋的棋盘
使用字符显示棋盘
起 点
前进方向
问题分析-1
暂停 普通
幸运轮盘
地雷
时空隧道
终 点
3
问题分析-2
根据需求分析对象
对战地图类(Map) 功能:在控制台显示棋盘,并显示当前玩家在棋盘中所处的位置 游戏类(Game) 功能:实现游戏初始化设置、展示游戏开始界面以及角色设置、 控制游戏进度、实现游戏规则、以及游戏结束后结果评判
测试类(StartGame) 功能:启动游戏
4
难点分析-1
实时动态显示对战地图
地图信息以整型数据存储在数组中
int[ ] map = new int[100]; //对战地图
数组下标 0
99
0000102134… 4 …
普通 幸运轮盘 地雷 暂停
时空隧道

java飞行棋实现思路

java飞行棋实现思路

java飞⾏棋实现思路本⽂实例为⼤家分享了java飞⾏棋的注释版,供⼤家参考,具体内容如下可以直接⽤:import java.util.Scanner;public class Fly3 {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner(System.in);int all1 = 0;// 记录A的步数int all2 = 0;// 记录B的步数int flag1 = 1;// 对于A的暂停情况进⾏判断int flag2 = 1;// 对于B的暂停情况进⾏判断int first1 = 0;// 进⾏初始化判断int first2 = 0;System.out.print("|||||||||✈|||||||||||||||||||||||" + "\n||||✈||||||飞⾏棋Beta版||||||||||||\n"+ "|||||||||||||||||||||||||||✈|||||\n"+ "||||||||✈||||||||||||||||||||||||");// 标题显⽰System.out.println();System.out.println();System.out.println();System.out.println("\t}}}}图形展⽰{{{{");System.out.println("✈为传送门,⼀次10格" + "\n 为炸弹,⼀次退回6格" + "\n⚡为被雷劈,⼀次直接返回原点 " + "\n 为幸运轮盘,踩上去可选择相关" + "\n 为暂停,踩上后下⼀次⾏动⽆法进⾏" + "\n注:玩家与玩家的位置相同时,后⼀个玩家将会将上⼀个玩家挤退2格");System.out.println();System.out.println();String A = "玩家A";// ⽤户选择⾓⾊A = login(A);String B = "玩家B";B = login(B);if (A.equals(B)) {B = B + "2号";}maps(icon(all1, all2));for (int i = 0;; i++) {// A玩家视⾓System.out.println(A + "开始投骰⼦");int random1 = (int) (Math.random() * 6 + 1);String msg = sc.nextLine();System.out.println("少⼥祈祷中。

JAVA小游戏骑士飞行棋源码03

JAVA小游戏骑士飞行棋源码03

JA V A小游戏骑士飞行棋源码03游戏过程:package s1java.xmal1;public class Game{//声明地图Map map;//声明玩家1和玩家2int playerPos1 ;int playerPos2 ;//声明走或停标识String[] goAndStop = new String[2];//声明对战角色String[] playerName = new String[2];/*** 初始化游戏的第一局**/public void init(){//新建Map对象map = new Map();//初始化地图map.createMap();//初始化玩家1和玩家2的位置playerPos1 = 0 ;playerPos2 = 0 ;//初始化玩家1和玩家2的走停标识goAndStop[0] = "on";goAndStop[1] = "on";}/*** 设置对战角色* @param no 玩家次序1:玩家1 2:玩家2* @param role 角色代号1:戴高乐2:艾森豪威尔3:麦克阿瑟4:巴顿*/public void setRole(int no , int role){if(no == 1){switch(role){case 1://设置玩家名称为"戴高乐"playerName[no-1] = "戴高乐";break;case 2://设置玩家名称为"艾森豪威尔"playerName[no-1] = "艾森豪威尔";break;case 3://设置玩家名称为"麦克阿瑟"playerName[no-1] = "麦克阿瑟";break;case 4://设置玩家名称为"巴顿"playerName[no-1] = "巴顿";break;}}if(no == 2){switch(role){case 1://设置玩家名称为"戴高乐"playerName[no-1] = "戴高乐";break;case 2://设置玩家名称为"艾森豪威尔"playerName[no-1] = "艾森豪威尔";break;case 3://设置玩家名称为"麦克阿瑟"playerName[no-1] = "麦克阿瑟";break;case 4://设置玩家名称为"巴顿"playerName[no-1] = "巴顿";break;}}}/*** 开始游戏**/public void start(){init();}public void}。

java小项目骑士飞行棋(含视频地址)

java小项目骑士飞行棋(含视频地址)

骑士飞行棋骑士飞行棋简介:《骑士飞行棋》又名《别生气》,是一款跟传统的飞行棋一模一样的小游戏。

游戏中每家有4个棋兵,谁4个兵最先到达目的地谁就赢(每一家的目的地各不相同,用颜色区别,大本营是什么颜色目的就是什么颜色)。

当没有活动的兵时,每家可以连续扔3次,直到扔出6点释放出一个兵。

之后每轮只能扔一次,棋兵前进的格数由扔出的点数决定,扔几点就走几步。

无论是前进或者后退,当棋兵最后落脚的地方踩到对方棋兵时,就把对方棋兵轰回老家,当踩到地雷就后退6格,当踩到“¤”时,就进入幸运轮盘,里面有8种运气:前进、后退、交换位置、转移、暂停一轮、奖励一次、设置地雷、轰炸(将对方棋兵炸退6步)。

一、需求分析:1、定义一个类MAP,生成游戏中的地图,地图中包括幸运轮盘“¤”的位置,地雷位置,暂停位置,时候隧道位置。

同时构造成员方法creatMap生成对战图,设置相关的成员变量;构造成员方法getGraph返回地图当前位置的对应图片。

定义构造方法showLine1输出地图的奇数行(第1、3行),定义showLine2输出地图的偶数行(第2行);定义showRLine输出地图的右竖列;定义showLLine输出地图的左数列;最后定义showMap方法显示对战图。

2、定义游戏类Game,定义相关的成员变量,包括对战图map,对战中玩家1的当前位置playerPos1,对战中玩家2的当前位置playerPos2,走或停标识设置goAndStop,对战角色playerName。

构造成员方法init()调用生成地图方法creatMap;开始游戏方法start(),同时构造成员方法setRole设置对战角色。

构造对战玩法的方法play。

其中方法play中调用掷骰子成员方法throwShifter,并返回掷出的骰子数目;构造成员方法getCurPos计算玩家此次移动后的当前位置,返回移动后的位置,构造方法judge 显示对战结果。

飞行棋游戏编程实现

飞行棋游戏编程实现

飞行棋游戏编程实现飞行棋是一款流行的棋类游戏,它具有简单易学、互动性强的特点,受到广大玩家的喜爱。

本文将介绍飞行棋游戏的编程实现方法,帮助读者了解游戏的基本规则并学习如何通过编程来实现这一有趣的游戏。

1. 游戏规则飞行棋是由2至4名玩家参与的棋类游戏。

游戏开始时,每个玩家在起点位置拥有4架飞机。

玩家按照骰子点数决定移动的步数,然后根据相应的指示牌前进。

在游戏过程中,各种特殊指示牌和棋盘上的陷阱会给玩家带来不同的影响,例如跳跃、返回起点或者使其他玩家飞机返回起点等。

当玩家的飞机到达终点时,即可获得胜利。

2. 编程实现为了实现飞行棋游戏,我们可以使用Python编程语言。

首先,我们需要创建一个游戏界面,用于显示棋盘和游戏进程。

可以使用Pygame库来创建游戏界面,并绘制相关图形来表示飞机、指示牌和陷阱等元素。

接下来,我们需要定义游戏的基本规则和功能。

这包括:- 确定起点和终点的位置;- 创建玩家类和飞机类,并为它们添加移动、跳跃和返回起点等方法;- 创建骰子类,并为其添加投掷的方法;- 创建指示牌类和陷阱类,并为它们添加相应的功能。

在游戏进行的过程中,我们需要监听玩家的操作,并根据游戏规则进行相应的处理。

例如,当玩家选择移动时,我们需要根据骰子的点数来确定飞机的移动步数,并根据指示牌和陷阱的效果来改变飞机的位置和状态。

此外,我们还可以为游戏添加一些额外的功能,例如记录每个玩家的得分、显示当前玩家的回合、实现多人对战等。

这些功能可以通过编程来实现,并加以美化以提升游戏的用户体验。

3. 编程技巧在飞行棋游戏的编程实现过程中,我们可以使用以下技巧来提高代码的质量和可读性:- 使用面向对象编程的思想,将游戏的各个部分封装成类,以便于理解和管理;- 使用合适的命名方式来标识变量、函数和类,遵循Python的命名规范;- 添加必要的注释和文档字符串,以便于其他人理解和使用代码;- 运用适当的代码缩进和格式化方式,使代码整洁美观;- 进行代码测试和调试,确保游戏能够正常运行并处理各种异常情况。

飞行棋游戏java实现

飞行棋游戏java实现

import java.util.Scanner;public class bisai {private final static int MAX = 105; // 宏定义private static int sign=0;static boolean temp=true;public static void main(String[] args) { Scanner scanner1 = newScanner(System.in);while(true){//System.out.println("******************** *请输入选择**********************");//System.out.print("1、进入最短路径查询:");//System.out.println("2、查看规则");//System.out.println("3、退出:");//System.out.println("******************** ******************************");//输入菜单选项if(temp){System.out.println("*********************请输入选择**********************");System.out.print("1、进入最短路径查询:");System.out.println("2、查看规则");System.out.println("3、退出:");System.out.println("********************** ****************************");sign=scanner1.nextInt();}switch(sign){case 1:feng();break;case 2:shuoming();break;case 3:System.exit(-1);default:System.out.println("没有您的选择");break;}}}//主体用于相关的的数据信息private static void feng() {int[][] juli = new int[MAX][MAX]; // 跳转距离存放boolean[][] biaozhi = newboolean[MAX][MAX]; // 标志是否遍历过int[][] queue = new int[MAX* MAX][3]; // 二维数组用来存放点的坐标第三列存放距离int[][] fangxiang = new int[][] { { 0, 1 }, { 0, -1 }, { 1, 0 },{ -1, 0 } };// 碰到飞行器时的方向改变上下左右// **********初始化数组**************for (int a = 0; a < MAX; a++)// 初始化距离数组for (int b = 0; b < MAX; b++) {juli[a][b] = 0;}for (int a = 0; a < MAX; a++)// 初始化标志位数组for (int b = 0; b < MAX; b++) {biaozhi[a][b] = true;}// *******************************int head=0, tail=0; // 用于逐层遍历int x=0, y=0;////终点坐标System.out.println("请依次输入 n,m 的值(n,m)用空格隔开):");Scanner scanner = newScanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();if((n<100&&n>=3)&&(m<100&&m>=3)){boolean bool=true;while (n > 0) {int i = 0, j=0, k=0;if(bool){System.out.println("输入棋子的初始位置(横纵坐标间用空格隔开):");queue[0][0] =scanner.nextInt();///棋子位置queue[0][1] = scanner.nextInt();}System.out.println("输入终点坐标(横纵坐标间用回车隔开):");x = scanner.nextInt();///坐标输入y = scanner.nextInt();if(queue[0][0]==x&&queue[0][1]==y){System.out.println("您输入终点坐标位置有误(起点与终点不能重合)");bool=false;continue;}System.out.println("输入飞行器的个数:");k = scanner.nextInt();while (k > 0) {System.out.println("输入飞行器的坐标(横纵坐标间用回车隔开):");i = scanner.nextInt();//输入飞行器的坐标j = scanner.nextInt();///if((i==queue[0][0]&&j==queue[0][1])){System.out.println("最近输入飞行器的位置有吴!(飞行器位置不能与起点位置重合)");continue;}else if((i==x&&j==y)){System.out.println("最近输入飞行器的位置有吴!(飞行器位置不能与终点位置重合)");continue;}if((i==x&&j==y)&&(i==queue[0][0]&&j==queue [0][1])){System.out.println("最近输入飞行器的位置有吴!(飞行器位置不能与起点和终点位置重合)");continue;}System.out.println("输入飞行器的"+i+" "+j+"飞行距离k(横纵坐标间用回车隔开):");i--;//数组下标从0开始,所以先减一保持与下标的一致j--;juli[i][j] = scanner.nextInt();// 输入飞行器距离k--;//计数器}queue[0][0]--;//数组下标从0开始,所以先减一保持与下标的一致queue[0][1]--;queue[0][2] = 0;biaozhi[queue[0][0]][queue[0][1]] = false;//将棋子位置的访问标志位设置假head = 0;tail = 1;x--;//数组下标从0开始,所以先减一保持与下标的一致y--;// 核心hexing(juli, biaozhi, queue, fangxiang, head, tail, x, y, n, m); //最短路径的计算调用·if (biaozhi[x][y]) {System.out.println("impossible");}break;}}else{sign=1;temp=false;System.out.println("行和列的有效范围是大于等于3小于100!请重新输入!");}}//用于网格的广度遍历private static void hexing(int[][] juli, boolean[][] biaozhi,int[][] queue, int[][] fangxiang, int head, int tail, int x, int y,int n, int m) {int i;int j;int k;while (head < tail && biaozhi[x][y]) { for (k = 0; k < 4; k++) {i = queue[head][0] +fangxiang[k][0];j = queue[head][1] +fangxiang[k][1];while (i >= 0 && i < n && j >= 0 && j < m && juli[i][j] > 0) {i += juli[i][j] * fangxiang[k][0]; //i 出现负的越界 whyif (i < 0 || i >= n ) {// 越界处理if (i < 0)i = 0;if (i >= n)i = n - 1;break;}j += juli[i][j] * fangxiang[k][1]; //????if ( j < 0 || j >= m) {// 越界处理if (j < 0)j = 0;if (i >= m)j = m - 1;break;}}if (i >= 0 && i < n && j >= 0 && j < m)// 符合条件进入数组if (biaozhi[i][j]) {queue[tail][0] = i;queue[tail][1] = j;queue[tail][2] = queue[head][2] + 1;biaozhi[i][j] = false;if (i == x && j == y) {System.out.println("最短路径为:");temp=true;//控制菜单是否显示System.out.println(queue[tail][2]);}tail++;}}head++;}}//规则说明函数private static void shuoming(){System.out.println("这是一种只有一个棋子的游戏。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

突然想起自己刚学java时,老师让写一个java骑士飞行棋,那时候还不知道写,到处问人,勉强写好了,结果全是放在主函数里,今天闲来没事,花了一会,再次写了个骑士飞行棋小游戏,希望对初学者有帮助吧。

代码中,可能用到了初学者还没接触到的东西,不过都不难,注释都有写明,花点时间就能明白的。

一共三个类。

分别:Game.javaMap.javaPlayer.javapackage ;import ;import ;public class Game {private Scanner sc = new Scanner(System.in);private static Map map = new Map();/*** 静态块,初始化地图* 加载时就会被执行的内容* 不理解的,可以在static{}块里打印一句话,看看控制台反映*/static {map.initMap();}/*** 游戏开始*/public void GameStart() {//游戏开始界面welcome();//选择角色,生成对象数组Player [] players = getPlayer();//游戏开始循环,直到有玩家胜出,结束boolean isAnyoneWin = false;while (!isAnyoneWin) {//遍历玩家数组,让每个玩家依次进行掷点for (int i = 0; i < players.length; i++) {//对玩家的状态进行判断,是否处于暂停状态if (players[i].getStatus() == 1) {//如果玩家处于暂停状态,恢复暂停状态并跳过此回合players[i].setStatus(0);statusSay(players[i]);continue;}//判断玩家,手动掷点if (i != 0) {letPlayerRoll(players[i]);}//进行掷点int count = roll();+ " 掷出了 " + count + " 点");//记录玩家roll点前位置和roll点后位置,判断玩家位置是否到达终点players[i].setLastPosition(players[i].getPosition());players[i].setPosition(players[i].getPosition() + count);//判断是否踩中对方int secondNum = Math.abs(1 - i);if (isHit(players[i], players[secondNum])) {players[secondNum].setPosition(0);if (players[i].getLastPosition() != 0) {changMap(players[i].getLastPosition(),players[i].getLastPositionFlag());}}if (checkAnyoneWin(players[i].getPosition())) {isAnyoneWin = true;//打印游戏结束标语gameOver(players[i]);continue;}else {//判断将去位置是否有特殊效果,判断效果之后,理论上来说,应该再次进行判断是否有特殊效果//但我们这里不设这种情出现,因为再来循环的话,代码会更复杂,不利于初学者学习//在这里,我们只判断再进行一次roll点的判定String mapBuff = null;mapBuff = getMapFlag(players[i].getPosition());if (!("=".equals(mapBuff))) {players[i] = checkBuff(players[i], mapBuff);}else if ("*".equals(mapBuff)) {count = roll();players[i].setPosition(players[i].getPosition() + count);}//判断是否踩中对方secondNum = Math.abs(1 - i);if (isHit(players[i], players[secondNum])) {players[secondNum].setPosition(0);if (players[i].getLastPosition() != 0) {changMap(players[i].getLastPosition(), players[i].getLastPositionFlag());}}//记录玩家去的位置的形状,地图复原使用mapBuff = getMapFlag(players[i].getPosition());players[i].setLastPositionFlag(mapBuff);//改变地图上玩家的位置,先复原,再改变//初始位置是为0,所以要判断if (players[i].getLastPosition() != 0) {changMap(players[i].getLastPosition(),players[i].getLastPositionFlag());}//三目运算符,i == 0 是一个布尔式,? 疑问,如果是真,返回:前面的值,如果假,:后面的值mapBuff = i == 0 ? "C" : "P";changMap(players[i].getPosition(), mapBuff);}map.showMap();}}}/*** 判断是否踩中对方* @param first 前面玩家* @param second 后面玩家*/public boolean isHit(Player first,Player second) {boolean temp = false;if (first.getPosition() == second.getPosition()) {temp = true;}return temp;}/*** 玩家掷点阻塞* @param player 玩家信息*/public void letPlayerRoll(Player player) {"请玩家 " + player.getName() + " 掷点~");sc.next();}/*** 检查玩家到达的地图位置是否有特殊效果* @param player 玩家* @param mapBuff 地图标识* @return执行过buff后的玩家对象*/public Player checkBuff(Player player,String mapBuff) { if ("-".equals(mapBuff)) {" 进入黑洞,迷失了方向,后退6步");+ ":shit!");player.setPosition(player.getPosition() - 6);}else if ("+".equals(mapBuff)) {+ " 进入时空隧道,前进6步");+ ":luckily!");player.setPosition(player.getPosition() + 6);}else if ("*".equals(mapBuff)) {+ " 进行了空间跳跃~再来一次");+ ":see me fly!");player.setStatus(0);}else if ("^".equals(mapBuff)) {+ " 抛锚了,暂停一次");+ ":what is the fuck!");player.setStatus(1);}return player;}/*** 改变地图上玩家的位置* @param position 位置* @param flag 地图形状*/public void changMap(int position, String flag) { if (position < 31) {map.map[0][position - 1] = flag;}else if (position > 30 && position < 36) {map.map[position - 30][29] = flag;}else if (position > 35 && position < 66) {map.map[6][position - 35] = flag;}else if (position > 65 && position < 71) {map.map[position - 59][0] = flag;}else if (position > 70 && position < 101) {map.map[12][position - 71] = flag;}}/*** 暂停言语* @param player 被暂停的玩家*/public void statusSay(Player player) {+ " 暂停中...........");}/*** 获得地图指定位置的形状* @param position 位置* @return*/public String getMapFlag(int position) {String flag = "=";if (position < 31) {flag = map.map[0][position - 1];}else if (position > 30 && position < 36) {flag = map.map[position - 30][29];}else if (position > 35 && position < 66) {flag = map.map[6][65 - position];}else if (position > 65 && position < 71) {flag = map.map[position - 59][0];}else if (position > 70 && position < 101) {flag = map.map[12][position - 71];}return flag;}/*** 胜利标语* @param player 玩家*/public void gameOver(Player player) {"whar a palyer!!");" 玩家 " + player.getName() + " 率先到达终点,获得了胜利"); }/*** 判断是否胜利* @param position 位置* @return boolean,temp*/public boolean checkAnyoneWin(int position) {boolean temp = false;temp = position >= 100 ? true : false;return temp;}/*** 掷点* @return int,count 点数*/public int roll () {int count = 0;//产生一个6以内的随机数Random random = new Random();count = random.nextInt(6) + 1;return count;}/*** 选择角色* @return Player [],players 玩家对象数组*/public Player [] getPlayer(){boolean flag = true;//创建对象数组,长度为2,用来接收玩家对象和电脑Player [] players = new Player[2];Player player = new Player();player.setNum(1);Player computer = new Player();while (flag) {String userChoose = sc.next();//获取输入内容,判断是否 1,2,3,根据选择给玩家对象赋名if (!userChoose.matches("[1-3]")) {"→ 选择角色失败,请重新选择");} else {switch (Integer.parseInt(userChoose)) {case 1:player.setName("YaGaMi");break;case 2:player.setName("Killer");break;case 3:player.setName("Chou");break;default:break;}"→ 你选择了 " + player.getName() + " 作为你的游戏角色");"→ 电脑选择了 Fujiwara no Mokou 作为游戏角色" );computer.setName("Fujiwara no Mokou");//数组第1位是玩家,第二位是电脑players[1] = player;players[0] = computer;flag = false;}}return players;}public void welcome() {"*********************************");"*******欢迎来到飞行棋小游戏*******");"*********************************");;"游戏说明:");"地图上随机出现 * - ^ + 四种效果");"分别代码:再掷1次,后退6步,暂停1次,前进6步");;"→ 请选择你的喜欢的游戏角色编号:");"1.YaGaMi");"2.Killer");"3.Chou");}public static void main(String[] args) {new Game().GameStart();}}package ;public class Map {public String [][] map = new String[13][30];public void initMap() {for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i == 0 || i == 6 || i == 12 || (i < 6 && j == 29) || (i > 6 && j == 0)){map[i][j] = "=";}else {map[i][j] = " ";}}}map[0][6] = "+";map[0][8] = "-";map[0][15] = "*";map[0][20] = "-";map[0][29] = "^";map[3][29] = "*";map[6][7] = "^";map[6][16] = "+";map[6][20] = "-";map[6][28] = "^";map[10][0] = "*";map[12][7] = "-";map[12][8] = "^";map[12][15] = "-";map[12][20] = "^";map[12][23] = "-";map[12][28] = "-";}public void showMap(){for (int i = 0; i < map.length; i++) {for (int j = 0; j < map[i].length; j++) {if(i == 6){+ " ");}else {+ " ");}};}}public static void main(String[] args) {}}package ;public class Player {private String name;//玩家状态private int status;//玩家当前位置private int position;//玩家上把位置private int lastPosition;//玩家上把位置的地图形状private String lastPositionFlag;//玩家编号private int num;public int getNum() {return num;}public void setNum(int num) {this.num = num;}public String getName() {return name;}public void setName(String name) { = name;}public int getStatus() {return status;}public void setStatus(int status) {this.status = status;}public int getPosition() {return position;}public void setPosition(int position) {this.position = position;}public int getLastPosition() {return lastPosition;}public void setLastPosition(int lastPosition) {stPosition = lastPosition;}public String getLastPositionFlag() {return lastPositionFlag;}public void setLastPositionFlag(String lastPositionFlag) { stPositionFlag = lastPositionFlag;}}。

相关文档
最新文档