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("这是一种只有一个棋子的游戏。

java骑士飞行棋(窗口化版)

java骑士飞行棋(窗口化版)

package s1java.xmal1;import java.awt.Toolkit;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import java.awt.FlowLayout;import java.awt.Font;import java.awt.Graphics;import java.awt.Image;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class Map extends JFrame implements ActionListener {/****/private static final long serialV ersionUID = -5777519671651782702L;int[] map = new int[100]; // 对战地图int[] luckyTurn = { 6, 23, 40, 55, 69, 83 }; // 幸运轮盘int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 }; // 地雷位置int[] pause = { 9, 27, 60, 93 }; // 暂停int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 }; // 时空隧道/*** 生成地图: 关卡代号为:1:幸运轮盘2:地雷3: 暂停4:时空隧道0:普通*/int playerPos1 = 0;int playerPos2 = 0;String[] playerName = new String[2];int[][] Flag = new int[2][100];public void testMap() {// 设置标题this.setTitle("骑士飞行棋");// 设置窗体大小this.setSize(840, 500);// 取得屏幕的宽度JButton btn1 = new JButton("请掷骰子");JButton btn2 = new JButton("选择玩家");JButton btn3 = new JButton("游戏规则");final int width = Toolkit.getDefaultToolkit().getScreenSize().width;// 取得屏幕的高度final int height = Toolkit.getDefaultToolkit().getScreenSize().height;// 背景图片// 设置窗体出现位置this.setLocation((width - 800) / 2, (height - 500) / 2);setLayout(new FlowLayout());this.setResizable(false);this.add(btn1);this.add(btn2);this.add(btn3);// add(btn4);btn1.addActionListener(this);btn2.addActionListener(this);btn3.addActionListener(this);// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setV isible(true);}public void createMap() {Flag[0][0] = -1;Flag[1][0] = -1;int i = 0;for (i = 0; i < luckyTurn.length; i++) {map[luckyTurn[i]] = 1;}for (i = 0; i < landMine.length; i++) {map[landMine[i]] = 2;}for (i = 0; i < pause.length; i++) {map[pause[i]] = 3;}// 添加代码实现在对战地图上设置时空隧道for (i = 0; i < timeTunnel.length; i++) {map[timeTunnel[i]] = 4;}}public Image getGraph(int i, int index) {Image image = null;if (playerPos1 == index && playerPos2 == index) {image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\两人.jpg");} else if (playerPos1 == index && playerPos2 != index) { image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\玩家一.jpg");} else if (playerPos2 == index && playerPos1 != index) { image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\玩家二.jpg");} else {switch (i) {case 1:image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\轮盘.jpg");break;case 2:image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\炸弹.jpg");break;case 3:image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\停止.jpg");break;case 4:image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\时空隧道.jpg");break;default:image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\普通.jpg");}}// 添加代码return image;}public void paint(final Graphics g) {super.paint(g);Image image = Toolkit.getDefaultToolkit().getImage("src\\s1java\\xmal1\\image\\背景.jpg");g.drawImage(image, 0, 65, 840, 430, this);g.setFont(new Font("宋体", Font.BOLD, 20));g.drawString("骑士飞行棋", 100, 55);// g.drawString("作者:董超", 620, 55);for (int i = 0; i <= 30; i++) {Image image1 = getGraph(map[i], i);g.drawImage(image1, 20 + i * 25, 130, this);}for (int i = 65; i >= 35; i--) {Image image1 = getGraph(map[i], i);g.drawImage(image1, 770 - (i - 35) * 25, 250, this);}for (int i = 31; i <= 34; i++) {Image image1 = getGraph(map[i], i);g.drawImage(image1, 770, 130 + (i - 30) * 25, this);}// 添加代码for (int i = 66; i <= 68; i++) {Image image1 = getGraph(map[i], i);g.drawImage(image1, 20, 250 + (i - 65) * 25, this);}for (int i = 66; i <= 99; i++) {Image image1 = getGraph(map[i], i);g.drawImage(image1, 20 + (i - 69) * 25, 350, this);}}public void showMap() {createMap();testMap();repaint();}int flag = 0;int step;String[] goAndStop = new String[] { "on", "off" };public void actionPerformed(final ActionEvent e) {// TODO 自动生成方法存根if (e.getActionCommand() == "游戏规则") {final String str = "玩家轮流掷骰子,点数是几就走几步。

骑士飞行棋(C#版)

骑士飞行棋(C#版)

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 骑士飞行棋{class Program{static int[] Map = new int[100];static int[] playerPos = {0,0};static void Main(string[] args){Random r = new Random();int num = 0;string msg = "";//存储用户关卡提示语bool[] isStop = {false,false};int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };int[] pause = { 9, 27, 60, 93 };int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };ShowUI();string[] names = new string[2];Console.WriteLine("请输入玩家A的姓名!");names[0] = Console.ReadLine();while (names[0] == ""){Console.WriteLine("玩家A姓名不能为空!");names[0] = Console.ReadLine();}Console.WriteLine("请输入玩家B的姓名!");names[1] = Console.ReadLine();while (names[1] == "" || names[1] == names[0]){if (names[1] == ""){Console.WriteLine("玩家B姓名不能为空!");}else if (names[1] == names[0]){Console.WriteLine("玩家B姓名已存在!");}names[1] = Console.ReadLine();}Console.Clear();ShowUI();Console.WriteLine("对战开始......");Console.WriteLine("{0}用♂来表示", names[0]);Console.WriteLine("{0}用♀来表示", names[1]);Console.WriteLine("如位置相同,AB用<>来表示");InitialMap();//初始化地图DrawMap();//绘制地图Console.WriteLine("开始游戏......");//玩家A,B轮流掷筛子while (playerPos[0] < 99 && playerPos[1] < 99){if (isStop[0] == false){#region A先掷骰子//玩家A掷筛子Console.ForegroundColor = ConsoleColor.Blue;//设置A的姓名颜色为蓝色Console.WriteLine();Console.WriteLine("玩家{0}按任意键开始掷骰子",names[0]);Console.ReadKey(true);num = r.Next(1, 7);Console.WriteLine("玩家{0}点数大小为:{1}", names[0], num);Console.ResetColor();//颜色恢复为默认值Console.WriteLine("按任意键开始行动......");Console.ReadKey(true);playerPos[0] = playerPos[0] + num;CheckPos();if (playerPos[0] == playerPos[1])//玩家A碰到玩家B,B退回原点{playerPos[1] = 0;msg = string.Format("{0}踩到了{1},{1}退回原点", names[0], names[1], names[1]);}else//没有碰到时,判断是否有关卡{switch (Map[playerPos[0]]){case 0:msg = "";break;case 1://幸运轮盘Console.Clear();DrawMap();Console.ForegroundColor = ConsoleColor.DarkYellow;Console.WriteLine("{0}走到了幸运轮盘,请选择运气类型",names[0]);Console.WriteLine("1----交换位置2----轰炸{0}",names[1]);int input = ReadInt(1, 2);//存储用户运气选择,方法调用不能放到开始!!!if (input == 1)//与对手交换位置{int temp = playerPos[0];playerPos[0] = playerPos[1];playerPos[1] = temp;msg = string.Format("{0}选择了与{1}交换位置",names[0],names[1]);}else//轰炸对方{playerPos[1] = playerPos[1] - 6;CheckPos();msg = string.Format("{0}轰炸了{1},{1}退6格", names[0], names[1]);}break;case 2://踩到地雷playerPos[0] = playerPos[0] - 6;CheckPos();msg = string.Format("{0}踩到了地雷,退6格", names[0]);break;case 3://暂停isStop[0] = true;msg = string.Format("{0}本回合暂停!",names[0]);break;case 4://时空隧道playerPos[0] = playerPos[0] + 10;msg = string.Format("天啊!!!{0}进入了时空隧道,进10格", names[0]);break;}}Console.Clear();DrawMap();if (msg != ""){Console.WriteLine(msg);}Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine("玩家{0}掷筛子掷出了{1}", names[0], num);Console.ResetColor();Console.WriteLine("**************玩家{0}和{1}玩家的位置如下**************", names[0], names[1]);Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine("{0}的位置为:{1}", names[0], playerPos[0] + 1);Console.ResetColor();Console.ForegroundColor = ConsoleColor.Yellow;Console.WriteLine("{0}的位置为:{1}", names[1], playerPos[1] + 1);Console.ResetColor();Console.ReadKey();#endregion}else{isStop[0] = false;}if (playerPos[0] >= 99){break;}if (isStop[1] == false){#region 玩家B掷骰子Console.ForegroundColor = ConsoleColor.Yellow;Console.WriteLine();Console.WriteLine("玩家{0}按任意键开始掷骰子",names[1]);//Console.WriteLine("玩家{0}按任意键开始掷骰子", names[0]);Console.ReadKey(true);num = r.Next(1, 7);Console.WriteLine("玩家{0}点数大小为:{1}", names[1], num);Console.ResetColor();Console.WriteLine("按任意键开始行动......");Console.ReadKey(true);playerPos[1] = playerPos[1] + num;CheckPos();if (playerPos[0] == playerPos[1])//玩家B碰到玩家A,A退回原点{playerPos[0] = 0;msg = string.Format("{0}踩到了{1},{1}退回原点", names[1], names[0]);}else//没有碰到时,判断是否有关卡{switch (Map[playerPos[1]]){case 0:msg = "";break;case 1://幸运轮盘Console.Clear();DrawMap();Console.ForegroundColor = ConsoleColor.DarkYellow;Console.WriteLine("{0}走到了幸运轮盘,请选择运气类型",names[1]);Console.WriteLine("1----交换位置2----轰炸{0}",names[0]);int input = ReadInt(1, 2);//存储用户运气选择,方法调用不能放到开始!!!if (input == 1)//与对手交换位置{int temp = playerPos[1];playerPos[1] = playerPos[0];playerPos[0] = temp;msg = string.Format("{0}选择了与{1}交换位置",names[1],names[0]);}else//轰炸对方{playerPos[0] = playerPos[0] - 6;CheckPos();msg = string.Format("{0}轰炸了{1},{1}退6格", names[1], names[0]);}break;case 2://踩到地雷playerPos[1] = playerPos[1] - 6;CheckPos();msg = string.Format("{0}踩到了地雷,退6格", names[1]);break;case 3://暂停isStop[1] = true;msg = string.Format("{0}本回合暂停!",names[1]);break;case 4://时空隧道playerPos[1] = playerPos[1] + 10;msg = string.Format("天哪!!!{0}进入了时空隧道,进10格", names[0]);break;}}Console.Clear();DrawMap();if (msg != ""){Console.WriteLine(msg);}Console.ForegroundColor = ConsoleColor.Yellow;Console.WriteLine("玩家{0}掷筛子掷出了{1}", names[1], num);Console.ResetColor();Console.WriteLine("**************玩家{0}和{1}玩家的位置如下**************", names[0], names[1]);Console.ForegroundColor = ConsoleColor.Blue;Console.WriteLine("{0}的位置为:{1}", names[0], playerPos[0] + 1);Console.ResetColor();Console.ForegroundColor = ConsoleColor.Yellow;Console.WriteLine("{0}的位置为:{1}", names[1], playerPos[1] + 1);Console.ResetColor();Console.ReadKey();#endregion}else{isStop[1] = false;}}Console.Clear();ShowUI();Console.ForegroundColor = ConsoleColor.DarkMagenta;if (playerPos[0] >= 99){Console.WriteLine("恭喜{0}狗获得了胜利!!!!", names[0]);}else{Console.WriteLine("恭喜{0}狗获得了胜利!!!!", names[1]);}Console.ReadKey();}/// <summary>/// 坐标越界判断(当坐标位置发生移动时)/// </summary>static void CheckPos(){for (int i = 0; i < 2; i++){if (playerPos[i] > 99){playerPos[i] = 99;}if (playerPos[i] < 0){playerPos[i] = 0;}}}/// <summary>/// 用于绘制飞行棋的界面/// </summary>static void ShowUI(){Console.WriteLine("***************************************");Console.WriteLine("* *");Console.WriteLine("* 骑士飞行棋*");Console.WriteLine("* *");Console.WriteLine("***************************************");}/// <summary>/// 对地图进行初始化/// </summary>static void InitialMap(){int[] luckyTurn = { 6, 23, 40, 55, 69, 83 };int[] landMine = { 5, 13, 17, 33, 38, 50, 64, 80, 94 };int[] pause = { 9, 27, 60, 93 };int[] timeTunnel = { 20, 25, 45, 63, 72, 88, 90 };for (int i = 0; i < luckyTurn.Length; i++){int pos = luckyTurn[i];Map[pos] = 1;}for (int i = 0; i < landMine.Length; i++){Map[landMine[i]] = 2;}for (int i = 0; i < pause.Length; i++){Map[pause[i]] = 3;}for (int i = 0; i < timeTunnel.Length; i++){Map[timeTunnel[i]] = 4;}}/// <summary>/// 获得pos坐标绘制的图案/// </summary>/// <param name="pos">要绘制的坐标</param>/// <returns></returns>static string GetMapString(int pos){string result = "";if (playerPos[0] == pos && playerPos[1] == pos){Console.ForegroundColor = ConsoleColor.Yellow;result = "<>";}else if (playerPos[0] == pos){Console.ForegroundColor = ConsoleColor.Blue;result = "♂";}else if (playerPos[1] == pos){Console.ForegroundColor = ConsoleColor.Yellow;result = "♀";}else{switch (Map[pos]){case 0:Console.ForegroundColor = ConsoleColor.White;result = "□";break;case 1:Console.ForegroundColor = ConsoleColor.DarkYellow;result = "◎";break;case 2:Console.ForegroundColor = ConsoleColor.DarkRed;result = "●";break;case 3:Console.ForegroundColor = ConsoleColor.Gray;result = "▲";break;case 4:Console.ForegroundColor = ConsoleColor.Cyan;result = "Θ";break;}}return result;}static void DrawMap(){Console.WriteLine("图例:幸运轮盘◎地雷:●暂停:▲时空门:Θ");for (int i = 0; i < 30; i++)//绘制第一行{Console.Write(GetMapString(i));}Console.WriteLine();for (int i = 30; i < 35; i++)//绘制第一列{//绘制双空格for (int j = 0; j < 29; j++){Console.Write(" ");}Console.WriteLine(GetMapString(i));}for (int i = 64; i >34; i--){//for (int j = 0; j < 5; j++)//{// Console.WriteLine();//}Console.Write(GetMapString(i));}Console.WriteLine();for (int i = 65; i <=69; i++){Console.WriteLine(GetMapString(i));}for (int i = 70; i <=99; i++){Console.Write(GetMapString(i));}Console.WriteLine();Console.WriteLine();Console.ResetColor();}static int ReadInt(){int i = ReadInt(int.MaxValue, int.MinValue);return i;}static int ReadInt(int min,int max){while (true){try{int number = Convert.ToInt32(Console.ReadLine());if (number < min || number > max){Console.WriteLine("只能输入1--2,请重新输入!");continue;}return number;}catch{Console.WriteLine("只能输入数字,请重新输入!");}}}}}。

骑士飞行棋游戏

骑士飞行棋游戏

《骑士飞行棋游戏》
功能需求说明:
1. 该游戏是两人对战方式。

2. 游戏规则:(1)游戏规则和传统飞行棋一样,支持两人对战。

(2)采用100格小型游戏棋盘。

(3)双方轮流掷骰子,每轮只能掷一次骰子,前进的格数由扔出的点数决定,扔几点就走几步。

地图格子包含:■ 暂停(暂停一次掷骰子),¤幸运轮盘(交换位置或轰炸对方倒退6格),★地雷(后退6格),〓时空隧道(再前进6个),∷普通(走到普通格停下,如果踩到对方,对方被轰回老家)。

(4)连续第二次踩到相同关卡,第二次关卡不生效。

(注意:可以自行设计更多的游戏关卡)。

3. 游戏开始时,能够提供作战地图的选择,备选作战地图至少3个。

4. 中途结束游戏时,能够保存当前游戏的相关数据,如:当前作战地图、玩家名称、玩家在地图所在位置等。

5. 游戏开始时,能够提供两种运行方式:新的游戏和加载最近一次保存的游戏。

技术要求说明:
1.在项目中体现面向对象多态的应用。

2.I/O技术,即外部文件的读写。

游戏总体要求:
1.完成题目要求的基本业务功能。

2.游戏项目代码结构合理,冗余小、耦合度低,易于扩展更新地图。

3.代码有必要的注释信息。

4. 界面显示简洁,排列整齐,操作简便易懂。

三、评分标准
课程设计分数由三部分组成:程序功能检查占总分50%、回答教师提问占总分30%和项目心得占总分20%。

四、游戏运行效果截图。

骑士走棋盘 java,c实现

骑士走棋盘 java,c实现

騎士旅遊(Knight tour)在十八世紀初倍受數學家與拼圖迷的注意,它什麼時候被提出已不可考,騎士的走法為西洋棋的走法,騎士可以由任一個位置出發,它要如何走完[所有的位置?
騎士的走法,基本上可以使用遞迴來解決,但是純綷的遞迴在維度大時相當沒有效率,一個聰明的解法由J.C. Warnsdorff在1823年提出,簡單的說,先將最難的位置走完,接下來的路就寬廣了,騎士所要走的下一步,「為下一步再選擇時,所能走的步數最少的一步。

」,使用這個方法,在不使用遞迴的情況下,可以有較高的機率找出走法(找不到走法的機會也是有的)。

C
Java。

java飞行棋课程设计

java飞行棋课程设计

java飞行棋课程设计一、课程目标知识目标:1. 学生能理解Java编程语言的基本语法和结构,掌握面向对象编程的基本概念。

2. 学生能运用Java编程实现飞行棋游戏的核心功能,包括棋盘的初始化、玩家移动、掷骰子等。

3. 学生了解并能使用Java中的数组、循环和条件语句等编程结构来控制游戏逻辑。

技能目标:1. 学生通过编写飞行棋游戏,培养问题分析、解决方案设计和编程实现的能力。

2. 学生掌握调试程序的方法,能够独立解决编程过程中遇到的问题。

3. 学生能够运用面向对象的思想,合理划分类和对象,实现代码的模块化。

情感态度价值观目标:1. 学生培养对编程的兴趣,激发创新思维和探究精神。

2. 学生在团队合作中,学会沟通与协作,培养团队精神和责任感。

3. 学生通过编程实践,体会科技的魅力,增强自信心和成就感。

课程性质分析:本课程为信息技术学科,结合Java编程语言,以飞行棋游戏为载体,提高学生的编程能力和逻辑思维能力。

学生特点分析:学生处于初中年级,对游戏有浓厚兴趣,具备一定的计算机操作基础,但编程经验有限。

教学要求分析:课程要求教师以引导为主,注重实践操作,鼓励学生自主探究和团队合作,培养解决问题的能力。

通过本课程的学习,使学生能够将所学知识应用于实际项目中,提高综合素养。

二、教学内容1. Java基础语法:变量、数据类型、运算符、控制结构(条件语句、循环语句)。

相关教材章节:第一章至第三章。

2. 面向对象编程基础:类与对象、构造方法、封装、继承、多态。

相关教材章节:第四章至第六章。

3. 数组与字符串:数组的声明与使用、字符串的基本操作。

相关教材章节:第七章。

4. Java编程实践:设计模式、编码规范、调试技巧。

相关教材章节:第八章。

5. 飞行棋游戏设计与实现:a. 游戏规则介绍:介绍飞行棋的基本规则,分析游戏流程。

b. 游戏界面设计:绘制游戏棋盘,展示玩家棋子。

c. 游戏逻辑实现:掷骰子、移动棋子、判断胜负。

(完整word版)骑士游历java课程设计

(完整word版)骑士游历java课程设计

数据结构课程设计报告目录1 设计目的与意义 (3)2 系统描述 (3)3 运行环境 (3)4 系统的分析与设计 (3)4.1 程序结构说明 (3)4.2 AccessibleSquare算法实现 (4)4.3 画图类算法实现 (5)4.4 主调用程序的设计和开发 (7)5 系统测试 (7)5.1 游戏初始界面 (8)5.2 游戏以(1,1)为起点运行界面 (8)5.3 游戏以(6,3)为起点界面 (9)5.4 游戏以(6,3)为起点运行界面 (9)6 总结 (10)源程序 (10)1 设计目的与意义Java课程设计是计算机科学与技术专业学生必做的集中实践性环节之一,是学习完《Java程序设计》课程后进行的一次全面的综合练习。

其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。

2 系统描述骑士游历问题是一个古老而著名的问题,它最初是由大数学家Euler提出的。

问题是这样的:国际象棋中的棋子(叫作骑士)在一个空棋盘内移动,问它能否经过64格中的每一格且只经过一次?(骑士按L行移动,即在某方向前进两格接着在与原方向垂直的方向上前进一格)该课程设计要求实现骑士游历问题的求解,并能够演示起始位置在棋盘上任何位置的游历问题的实现。

程序将采用动态的图形演示,使算法的描述更形象、更生动。

本程序采用Applet来编制整个程序,这样既可以加深对算法的实现的了解,也可以进一步熟悉Java图形界面、Applet以及Java语言的命名规范。

骑士游历的课程设计是按照面向对象的思想进行开发,其中主要的类包括AccessibleSquare 类、MyPanel类和KnightsTour类。

其中AccessibleSquare 类主要是算法实现,采用启发式算法;KnightsTour类是主类,或者说是控制类,它完成对算法类和图画类的调用;MyPanel类是画图类用来实现图形化显示结果。

java小项目 类与 对象 骑士飞行棋代码

java小项目  类与 对象 骑士飞行棋代码

/**主体方法import java.util.Random;import java.util.Scanner;public class Game {public Map map;Scanner in = new Scanner(System.in);Random run = new Random();static private int[][] temp = { { 0, 0 }, { 0, 0 } };// 分别记录玩家的// 位置.........用来标记人所代替的位置// 之前的状态private String[] name = { "张飞", "关羽", "赵云", "刘备" };private static String[] palyer = new String[2];private int[] p = { 12, 12 };// 暂停标准相差数即为暂停次数private static boolean falg;// 轰炸标记public Game() {map = new Map();}/*** 选择玩家** @return*/public void choice() {System.out.println("------------------------------------------------------------------------------");System.out.println("------------------------------------------------------------------------------");System.out.println("------------------------------------------------------------------------------");System.out.println("---------------骑士飞行棋---------------------");System.out.println("------------------------------------------------------------------------------");System.out.println("------------------------------------------------------------------------------");System.out.println("------------------------------------------------------------------------------");System.out.print("分别选择角色:");for (int i = 0; i < name.length; i++)System.out.print(i + 1 + "." + name[i] + "\t");System.out.println();System.out.println("玩家一:");int n = in.nextInt();palyer[0] = name[n - 1];System.out.println("玩家二:");n = in.nextInt();palyer[1] = name[n - 1];}/*** 色子** @return*/public int stochastic() {int n = run.nextInt(6) + 1;return n;}/*** 初始作用** @param num*/public void person(int num) {// num人的编号if (p[num] < p[1 - num]) {System.out.println(palyer[num] + "暂停" + palyer[1 - num] + "继续");p[num] += 1;person(1 - num);;}// 暂停map.showMap(map.getMap());map.getMap()[temp[num][0]] = temp[num][1];// 人走只后坐标恢复原来的//System.out.println("按任意键开始");System.out.println(palyer[num] + "开走...............");//int mm = in.nextInt();int t = stochastic();System.out.println(palyer[num] + "向前迈了" + t + "个步子.......");palyGame(temp[num][0] += t, num);// 返回人得到随机数的位子return;}/**** 运行游戏** @param n* @param num*/public void palyGame(int n, int num) {// n 随机数+人的初始位置num 表示人switch (map.getMap()[n]) {case 1:System.out.println(palyer[num] + "真悲剧..........碰到了地雷了退"+ (n - 6 > 0 ?6 : n - 1) + "步");palyGame(temp[num][0] = n - (n - 6 > 0 ? 6 : n - 1), num);break;case 2:System.out.println(palyer[num] + "运气真差遇到定身符了暂停一次");p[num] -= 1;temp[num][1] = map.getMap()[n];map.getMap()[n] = 6 - num;System.out.println(palyer[num] + "走到了" + n + "步");break;case 3:System.out.println(palyer[num] + "运气真好步进入时空隧道");for (int i = n + 1; i < map.getMap().length-20; i++) {if (map.getMap()[i] == 3) {temp[num][1] = map.getMap()[i];map.getMap()[i] = 6 - num;temp[num][0] = i;System.out.println(palyer[num] + "走到了" + i + "步");break;}if (i == map.getMap().length - 1-20) {System.out.println("你的时空隧道已是最后一个");System.out.println(palyer[num] + "走到了" + n + "步");temp[num][1] = map.getMap()[n];map.getMap()[n] = 6 - num;break;}}break;case 4:System.out.println(palyer[num] + "运气真好得到幸运盘...");lucky(n, num);return;case 5:if (5 + num == 6) {System.out.println(palyer[num] + "走到了" + n + "步");break;} else {System.out.println(palyer[num] + "真悲剧..........碰到了"+ palyer[1 - num] + "了退" + (n - 6 > 0 ? 6 : n - 1)+ "步");palyGame(temp[num][0] = n - (n - 6 > 0 ? 6 : n - 1), num);}break;case 6:if (6 + num == 6) {System.out.println(palyer[num] + "走到了" + n + "步");break;} else {System.out.println(palyer[num] + "真悲剧..........碰到了"+ palyer[1 - num] + "了退" + (n - 6 > 0 ? 6 : n - 1)+ "步");palyGame(temp[num][0] = n - (n - 6 > 0 ? 6 : n - 1), num);}break;default:System.out.println(palyer[num] + "走到了" + n + "步");temp[num][1] = map.getMap()[n];map.getMap()[n] = 6 - num;break;}if (falg) {falg = false;return;}}/*** 幸运转盘** @param person*/public void lucky(int mm, int num) {System.out.println("1轰炸.\t2.交换位置");int n = in.nextInt();if (n == 1) {temp[num][1] = map.getMap()[mm];map.getMap()[mm] = 6 - num;System.out.println(palyer[num] + "走到了" + mm + "步");num = num == 1 ? 0 : 1;map.getMap()[temp[num][0]] = temp[num][1];temp[num][0] = temp[num][0]- (temp[num][0] - 6 > 0 ? 6 : temp[num][0] - 1);temp[num][1] = map.getMap()[temp[num][0]];falg = true;palyGame(temp[num][0], num);return ;} else {temp[num][1] = map.getMap()[mm];map.getMap()[mm] = 6 - num;String str;str = palyer[0];palyer[0] = palyer[1];palyer[1] = str;map.setFf(!map.getFf());System.out.println(palyer[1 - num] + "与" + palyer[num] + "互换位置");person(num);return;}}/****/public void palyShow(int num){if (p[num] < p[1 - num]) {p[num] += 1;person(1 - num);}person(num);// 暂停if (temp[num][0]>= 100) {System.out.println(palyer[num] + "赢得比赛");System.out.println("-----------------------------------------------GAMEOVER-----------------------------------------------");return;}palyShow(1-num);}}/**地图;import java.util.Arrays;import java.util.Random;public class Map {int[] map = new int[130];private boolean ff;{for (int i = 3; i < map.length; i++) {Random run = new Random();map[i] = run.nextInt(10);switch (map[i]) {case 1:map[i] = 1;break;case 3:map[i] = 2;break;case 5:map[i] =3;break;case 8:map[i] =4;break;default:map[i] = 0;}}}/*** 设置游戏数据** @param map*//** public void setMap(int map[]){ for(int i=0;i<map.length;i++) * this.map[i]=map[i]; }*//*** 得到游戏数组** @return*/public int[] getMap() {return map;// Arrays.copyOfRange(map,0,map.length);}/*** 显示游戏界面动态地图.....................** @param map*/// public void showMap(int[] map){// int start=0,end=48;// int falg1=4,falg2=2,i;// while(end<map.length){// for( i=start;i<end;i++){// if(falg1==1&&falg2==1){// for(int j=start;j<end;j++){System.out.print("--------");}// show(map[i]);// System.out.println();// }// else {show(map[i]);// if(falg1==1&&falg2==2) {System.out.println();}// }// }// if(falg1==4) System.out.println();// start=end;end+=48/falg1;// falg1=falg1==4?1:4;// if(falg1==1) falg2=falg2==2?1:2;// }// }/*** 固定地图** @param map*/public void showMap(int[] map) {int i;for (i = 0; i < 30; i++)show(map[i]);System.out.println();for (i = 30; i < 35; i++) {for (int j = 0; j < 30; j++)System.out.print("--");show(map[i]);System.out.println();}for (i = 64; i >= 35; i--)show(map[i]);for (i = 65; i < 70; i++) {show(map[i]);System.out.println();}for (i = 70; i < 100; i++)show(map[i]);System.out.println();System.out.println("----------------------------------------------------------------------------------------------------------------------");}/*** 根据输入的数字判断输出什么** @param n* @@ 两人重合时A玩家1 B玩家2 ¤幸运轮盘★地雷■ 暂停〓时空隧道∷普通格*/public void show(int n) {switch (n) {case 1:System.out.print("★");break;// 地雷case 2:System.out.print("■");break;// 暂停case 3:System.out.print("〓");break;// 时空隧道case 4:System.out.print("¤");break;// 幸运转盘case 5:if (ff)System.out.print("A");elseSystem.out.print("B");break;// 玩家1case 6:if (ff)System.out.print("B");elseSystem.out.print("A");break;// 玩家2case 7:System.out.print("0");break;// 玩家在一起default:System.out.print("::");break;// 通道}}void setFf(boolean ff) {this.ff = ff;}public boolean getFf() {// TODO Auto-generated method stubreturn ff;}}/**运行主函数public class StartGame {static Game game = new Game();public static void Main() {int num = 0;game.choice();game.palyShow(num);}public static void main(String[] s) { Main();}}。

飞行棋的代码

飞行棋的代码

飞行棋的代码#include#include#include#include#include#include "windows.h"char Player1[10]; //玩家1姓名char Player2[10]; //玩家2姓名char Name1[10]="Sun"; //可选择的玩家姓名char Name2[10]="Lun";char Name3[10]="Run";char Name4[10]="Aun";int Player1X=11; //玩家1,X的坐标int Player1Y=0; //玩家1,Y的坐标int Player2X=11; //玩家2,X的坐标int Player2Y=0; //玩家2,Y的坐标int n=0; //记录掷骰子的局数int Map[13][30]={1,1,1,5,1,1,1,3,1,1,1,1,1,5,1,1,1,1,1,1,1,4,1,1,1,1,1,1,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,2,1,1,3,1,1,1,1,1,2,1,1,1,1,3,5,1,1,1,1,1,4,1,1,1,5,1,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,4,1,1,5,1,1,1,1,4,1,1,3,1,1,1,1,1,1,4,1,1,1,3,1,1,1,1};//地图的数组//使走过的关卡变成道路void GoToXYSpace(int x, int y){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);printf("::");}//闯关完成的提示void GoToXYEnd(int x, int y,int i){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);printf("玩家%d闯关成功",i);}//抹掉幸运轮盘底部的提示void GOT oK(int x, int y){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);printf(" \n");}//地图底部的提示void GoToPrompt(int x, int y,int num1,int num2,int i ){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);fflush(stdin);printf("玩家%d掷出了%d点按回车键继续.第%d回合玩家%d掷骰子",num2,i,n,num1);}//停止关卡的提示void GoToStop(int x, int y,int num){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);fflush(stdin);printf("按回车键继续.第%d回合玩家%d此回合停止",n,num);}//玩家1的打印void GoToXYP1(int x, int y)//玩家1{COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);printf("%c%c",Player1[0],Player1[0]);}//玩家2的打印void GoToXYP2(int x, int y)//玩家2{COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorPosition(hOut, pos);printf("%c%c",Player2[0],Player2[0]);}//幸运轮盘的提示void GoToLuck(int x, int y){COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos);fflush(stdin);printf("恭喜你可以实现一个愿望,请选择:\n");printf(" 1.与对方交换位置\n");printf(" 2.轰炸对方使其退后6步\n");printf(" 请选择:");}//游戏开始的提示void GoToStart(int x, int y)//开始{COORD pos = {x,y};HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hOut, pos);fflush(stdin);printf("按回车键开始.玩家1开始掷骰子");}//产生随机数int Random(){srand(time(NULL));return (rand()%6+1);}//对玩家1的各种判断void Dice1(int i){if(Player1X==Player2X&&Player1Y==Player2Y) GoToXYP2(Player1X,Player1Y);elseGoToXYSpace(Player1X,Player1Y);//打印道路Map[Player1Y][(Player1X-11)/2]=1;if(Player1X<69&&Player1Y==0)//第一横行{Player1X+=i*2;if(Player1X>69){Player1Y+=(Player1X-69)/2;Player1X=69;}GoToXYP1(Player1X,Player1Y);}else if(Player1X==69&&Player1Y<=6)//第一竖行{Player1Y+=i;if(Player1Y>6){Player1X-=(Player1Y-6)*2;Player1Y=6;}GoToXYP1(Player1X,Player1Y);}else if(Player1X<69&&Player1Y==6)//逆行{Player1X-=i*2;if(Player1X<11){Player1Y+=(11-Player1X)/2;Player1X=11;}GoToXYP1(Player1X,Player1Y);}else if(Player1X==11&&Player1Y>=6)//第二竖行{Player1Y+=i;if(Player1Y>12){Player1X+=(Player1Y-12)*2;Player1Y=12;}GoToXYP1(Player1X,Player1Y);}else if(Player1X<=69&&Player1Y==12)//最后一行{ Player1X+=i*2;if(Player1X>69)Player1X=69;GoToXYP1(Player1X,Player1Y);}}//对玩家2的各种打印,步骤如玩家1void Dice2(int i){if(Player1X==Player2X&&Player1Y==Player2Y) GoToXYP1(Player2X,Player2Y);elseGoToXYSpace(Player2X,Player2Y);Map[Player2Y][(Player2X-11)/2]=1;if(Player2X<69&&Player2Y==0){Player2X+=i*2;if(Player2X>69){Player2Y+=(Player2X-69)/2;Player2X=69;}GoToXYP2(Player2X,Player2Y);}else if(Player2X==69&&Player2Y<=6) {Player2Y+=i;if(Player2Y>6){Player2X-=(Player2Y-6)*2;Player2Y=6;}GoToXYP2(Player2X,Player2Y);}else if(Player2X<69&&Player2Y==6)//逆行{Player2X-=i*2;if(Player2X<11){Player2Y+=(11-Player2X)/2;Player2X=11;}GoToXYP2(Player2X,Player2Y);}else if(Player2X==11&&Player2Y>=6) {Player2Y+=i;if(Player2Y>12){Player2X+=(Player2Y-12)*2;Player2Y=12;}GoToXYP2(Player2X,Player2Y);}else if(Player2X<=69&&Player2Y==12) {Player2X+=i*2;if(Player2X>69)Player2X=69;GoToXYP2(Player2X,Player2Y);}}//地图的打印void PrintMap(int Map[][30]){int i,j;for(i=0;i<13;i++)for(j=0;j<30;j++){if(j==0)printf(" ");switch(Map[i][j]){case 0: printf(" ");break;case 1: printf("::");break;case 2: printf("¤");break;case 3: printf("★");break;case 4: printf("■");break;case 5: printf("〓");break;}if(j==29)printf("\n");}}//开始界面的打印void Printstart(){printf(" |¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤|\n"); printf(" | |\n");printf(" |骑士飞行棋|\n");printf(" | |\n");printf(" |¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤|\n"); printf("\n 两人对战\n\n");printf("请选择角色:1.Sun \n"); printf(" 2.Lun \n");printf(" 3.Run \n");printf(" 4.Aun ");}//游戏说明的打印void PrintEx(){printf(" |¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤|\n");printf(" | |\n");printf(" |游戏说明|\n");printf(" | |\n");printf(" |¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤|\n");printf(" 玩家选择的角色以两个首字母为代表如Saber(SS)\n"); printf(" \n图标::代表普通道路\n");printf(" \n图标■代表暂停一回合掷骰子\n");printf(" \n图标★代表地雷踩中退后6步\n");printf(" \n图标¤代表幸运轮盘可选择与对方互换或轰炸对方\n"); printf(" \n图标〓代表时空隧道前进10步\n");printf(" \n地图共100步,谁率先到达终点则胜利\n");printf(" 按回车键开始游戏:");}//角色的选择void Select(){int i;printf("\n请玩家1选择角色:");scanf("%d",&i);if(i==1)strcpy(Player1,Name1);else if(i==2)strcpy(Player1,Name2);else if(i==3)strcpy(Player1,Name3);else if(i==4)strcpy(Player1,Name4);printf("\n请玩家2选择角色:");scanf("%d",&i);if(i==1)strcpy(Player2,Name1);else if(i==2)strcpy(Player2,Name2);else if(i==3)strcpy(Player2,Name3);else if(i==4)strcpy(Player2,Name4);}//主函数int main(){system("color a");char ch;Printstart(); //打印开始Select(); //角色system("cls"); //清屏PrintEx();ch=getch();system("cls");PrintMap(Map); //打印地图while(1){n++;//记录局数int i,j,a;if(Player1X==11&&Player1Y==0)//开始提示的条件{GoToStart(11,15);ch=getch();}if(Map[Player1Y][(Player1X-11)/2]==4)//是否暂停{Map[Player1Y][(Player1X-11)/2]=1;GoToStop(11,15,1);getchar();GoToPrompt(11,15,2,1,i);getchar();}else{i=Random();Dice1(i);if(Player1X==69&&Player1Y==12)//是否到终点{GoToXYEnd(24,20,1);getchar();return 0;}GoToPrompt(11,15,2,1,i);if(Map[Player1Y][(Player1X-11)/2]==5)//是否时空隧道{ i=10;Dice1(i);}if(Map[Player1Y][(Player1X-11)/2]==3)//炸弹{i=-6;Dice1(i);}if(Map[Player1Y][(Player1X-11)/2]==2)//幸运轮盘{GoToLuck(11,16);scanf("%d",&j);if(j==1){a=Player1X;Player1X=Player2X;Player2X=a;a=Player1Y;Player1Y=Player2Y;Player2Y=a;GoToXYP1(Player1X,Player1Y); GoToXYP2(Player2X,Player2Y);}if(j==2){i=-6;Dice2(i);}GOT oK(10,16);GOT oK(10,17);GOT oK(10,18);GOT oK(10,19);}getchar();}if(Map[Player2Y][(Player2X-11)/2]==4) {Map[Player2Y][(Player2X-11)/2]=1; GoToStop(11,15,2);getchar();GoToPrompt(11,15,1,2,i);}else{i=Random();Dice2(i);if(Player2X==69&&Player2Y==12) {GoToXYEnd(24,20,2);getchar();return 0;}GoToPrompt(11,15,1,2,i);if(Map[Player2Y][(Player2X-11)/2]==5) {i=10;Dice2(i);}if(Map[Player2Y][(Player2X-11)/2]==3) {i=-6;Dice2(i);}if(Map[Player2Y][(Player2X-11)/2]==2) {GoToLuck(11,16);scanf("%d",&j);getchar();if(j==1){a=Player1X;Player1X=Player2X;Player2X=a;a=Player1Y;Player1Y=Player2Y;Player2Y=a;GoToXYP1(Player1X,Player1Y); GoToXYP2(Player2X,Player2Y); }if(j==2){i=-6;Dice1(i);}GOT oK(10,16);GOT oK(10,17);GOT oK(10,18);GOT oK(10,19);}getchar();}}}。

骑士飞行棋Java编程演示

骑士飞行棋Java编程演示

你踩到地雷了 自己倒退 步 你踩到地雷了,自己倒退6步. 地雷



暂停设置
踩到暂停,暂停一次. 踩到暂停,暂停一次 暂停 一次
程序: 程序:
player[ currentPlayer ].setStop( true );


∷ ◎ ★ ■ 〓

∷ ◎ ★ ■ 〓

∷ ◎ ★ ■ 〓

§
转盘设置
74 … 100
明白了,开始游戏吧! 明白了,开始游戏吧!

①②
玩家进入
……
∷ ◎ ★ ■ 〓 ∷ ∷ ∷ ∷
普 转 地 暂 隧 通 盘 雷 停 道
∷ ∷ ◎ ★ ■ 〓
∷ 〓 ■ ★ ◎ ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷ ∷ ◎ ★ ■ 〓 ∷ ∷ ∷ ∷
……
∷ ∷
给你们骰子! 给你们骰子!
你们熟悉下地图! 你们熟悉下地图!
……

§
公平游戏!不准作弊! 公平游戏!不准作弊!
你们~~~ 我会根据地图设置来奖励和惩罚你们
玩家② 玩家②说, 他不懂规则, 给他看… 他不懂规则,让我示范给他看 等等… 等等 ???
也好! 也好! 开始吧! 开始吧!
①②
∷ ◎ ★ ■ 〓

∷ ◎ ★ ■ 〓

∷ ◎ ★ ■ 〓

§
先看掷骰子

玩家①示范 玩家①
掷 骰 子
public int throwShift() { int step = 0; Scanner input = new Scanner(System.in); input.next(); step = (int) (Math.random() * 6) + 1; return step; }

飞行棋小游戏

飞行棋小游戏

飞行棋小游戏飞行棋是一款非常受欢迎的小游戏,适合2到4名玩家参与。

游戏的目标是让自己的飞机先飞到终点。

游戏的设备包括一个棋盘,上面有一条环绕的航线,起点和终点分别标有“起”和“终”的标志。

此外,还有4架飞机,每个玩家控制一架,以及一副飞行棋牌。

游戏开始时,每个玩家选择一架飞机放置在起点上。

然后,轮到每个玩家轮流掷骰子,根据骰子的点数移动自己的飞机。

玩家可以选择移动任意一架飞机,也可以选择不移动。

移动飞机的规则如下:1. 每次投掷骰子,玩家可以选择移动任意一架飞机,也可以选择不移动。

2. 骰子决定了飞机可以移动的步数。

例如,如果骰子点数为4,玩家可以选择将一架飞机向前移动4步。

3. 飞机只能沿着航线移动,不能跳过其他飞机。

4. 如果玩家的飞机停在一个已经有其他玩家的飞机的位置上,那么其他玩家的飞机将被送回起点,重新开始。

5. 如果玩家的飞机停在一个有自己的其他飞机的位置上,那么这架飞机将形成一个“飞机堆”,其他玩家不能通过这个位置。

除了基本的移动规则之外,飞行棋还有一些特殊的术语和技巧:1. 起飞:玩家需要掷骰子得到6才能将飞机从起点送上天。

2. 跳跃:如果玩家掷骰子得到6,可以选择跳过其他飞机,继续向前移动。

3. 逗留:如果玩家的骰子点数使得飞机停在一个有其他玩家的飞机的位置上,可以选择停留在那里,以阻止其他玩家的飞机移动。

游戏的目标是让自己的飞机先飞到终点。

当玩家的飞机到达终点时,他们需要掷骰子得到一个合适的点数,以确保飞机准确降落在终点上。

如果掷骰子得到的点数超过终点的距离,飞机将被送回终点之前的位置。

飞行棋是一款简单而有趣的游戏,玩家可以根据自己的策略选择移动哪架飞机。

有时候,阻止其他玩家的飞机移动可能是一个好策略,但有时候也需要尽快将自己的飞机送上天。

玩家需要根据当前局势和自己的目标来做出决策,以最大化自己的胜算。

希望这个解释能够帮助你理解飞行棋的玩法和规则。

祝你玩得愉快!。

骑士飞行棋代码

骑士飞行棋代码

好几天没更新了,是因为给大家写这个小游戏去了,好久没写了,逻辑上出了问题,调试了好久终于出来了,我自己测试了下没什么大问题,不过应该还是会有BUG,希望大家下载后找到BUG了给我说下,呵呵,谢谢!代码:如下地图类Map():package com.yx.dao;/*** 地图类* @author Administrator**/public class Map {// 定义地图的大小int [] map = new int[100];int[] dilei = {5,16,56,72,80,85}; // 定义地雷的位置int[] luck = {15,50,88}; // 定义幸运大罗盘的位置int[] pulse = {9,25,35,48,65,85,92,95}; // 定义暂停的位置int[] time = {20,39,47,68,81,90}; // 定义时空隧道public int index = 0; // 定义起始位置public int playerA = 0; // 玩家A的位置public int playerB = 0; // 玩家B的位置/*** 找到定义地雷、幸运大罗盘等的位置,然后给他第一个数字来代替,为后面的判断做准备*/public void initialMap(){// 循环找出所有的地雷,并把它暂时标记为1for(int i = 0; i < 100; i++) {map[i] = 0;}for(int i =0; i < dilei.length; i++) {map[dilei[i]] = 1;}for(int i = 0; i < luck.length; i++) {map[luck[i]] = 2;}for(int i = 0; i < pulse.length; i++) {map[pulse[i]] = 3;}for(int i = 0; i < time.length; i++) {map[time[i]] = 4;}// 以下为判断玩家A或玩家B是否到达终点,是否该结束游戏if(playerA > 99) {map[playerA] = 99;}if(playerB > 99) {map[playerB] = 99;}// 以下是判断玩家A和玩家B是不是在同一个位置上if(playerA != playerB) {map[playerA] = 5;map[playerB] = 6;}else {map[playerA] = 7;}}// 指定地雷、幸运星等在地图上的团public void printMap() {switch(map[index]) {case 0:System.out.print("::");break;case 1:System.out.print("●");break;case 2:System.out.print("◑");break;case 3:System.out.print("〓");break;case 4:System.out.print("◎");break;case 5:System.out.print("A");break;case 6:System.out.print("B");break;case 7:System.out.print("♦");break;}}// 以下为地图的制作方法/*** 现实第一行横排地图*/public void showMap1() {for(index = 0; index < 30; index++) {printMap();}}/*** 现实右边一列的地图*/public void showMapRight() {for(index = 30; index < 35; index++) {System.out.println();System.out.print("\t\t\t\t\t\t ");printMap();}}/*** 显示第三行地图*/public void showMap2() {for(index = 64; index >= 35; index--) { printMap();}}/*** 显示左边列的地图*/public void showMapLeft() {for(index = 65; index < 70; index++) { System.out.println();printMap();}}/*** 最后一行的地图*/public void showMap3() {for(index = 70; index < 100; index++) { printMap();}}/*** 现实所有的地图*/public void showMap() {initialMap();showMap1();showMapRight();System.out.println();showMap2();showMapLeft();System.out.println();showMap3();System.out.println();}}游戏逻辑处理类Game():package com.yx.dao;import java.util.Scanner;/*** 游戏类* @author Administrator**/public class Game {Scanner input = new Scanner(System.in);Map map = new Map();String person1 = ""; // 玩家1名字String person2 = ""; // 玩家2名字boolean game1 = true; // 默认玩家1没有赢boolean game2 = true; // 默认为家2没有赢/*** 打印提示语句以及规定说明等*/public void init() {System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");System.out.println("////");System.out.println("////");System.out.println("// 骑士飞行棋//");System.out.println("////");System.out.println("////");System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n");System.out.println("∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽两人对站∽∽∽∽∽∽∽∽∽∽∽∽∽∽∽");System.out.println("请选择角色:1.戴高乐2.艾森豪威尔3.麦克阿瑟4.巴顿");System.out.println("请玩家1选择角色:");int Game1 = input.nextInt();System.out.println("请玩家2选择角色:");int Game2 = input.nextInt();switch (Game1) {case 1:person1 = "戴高乐";break;case 2:person1 = "艾森豪威尔";break;case 3:person1 = "麦克阿瑟";break;case 4:person1 = "巴顿";break;}switch (Game2) {case 1:person2 = "戴高乐";break;case 2:person2 = "艾森豪威尔";break;case 3:person2 = "麦克阿瑟";break;case 4:person1 = "巴顿";break;}/** 两人对战的玩法*/System.out.println("******************************************************************* *****\n");System.out.println(" Game Start \n");System.out.println("******************************************************************* *****\n");// 显示对战双方士兵的样式System.out.println("^-^" + person1 + "的士兵:A\n");System.out.println("^-^" + person2 + "的士兵:B\n");// 显示对战地图System.out.println("\n图例:" + "◐地雷※幸运转盘◑暂停〓时空隧道∷普通\n");map.showMap();do {if (game1) {System.out.println( person1 + "扔筛子产生一个随机数开始:");input.next();int number = (int) (Math.random() * 6 + 1);map.playerA += number;checkGameA();if (map.playerA >= 99) {map.showMap();System.out.println("\n"+person1 + "获得胜利!");judge();break;}} else {game1 = true;// 玩家可以重新移动}if (game2) {System.out.println(person2+ "扔筛子产生一个随机数开始:");input.next();int number = (int) (Math.random() * 6 + 1);map.playerB += number;checkGameB();System.out.println();if (map.playerB >= 99) {map.showMap();System.out.println("\n"+person2 + "获得胜利!");judge();break;}} else {game2 = true;// 玩家可以重新移动}map.showMap();} while (true);}public void checkGameA() {for (int i = 0; i < map.dilei.length; i++) {if (map.playerA == map.dilei[i]) {System.out.println("哎,真衰,踩到地雷了!");int number = (int) (Math.random() * 6 + 1);// 减去的是一个随机数map.playerA -= number;return;}}for (int i = 0; i < map.luck.length; i++) {if (map.playerA == map.luck[i]) {System.out.println("嘿嘿,遇上幸转盘了,我真幸运!");System.out.println("1.交换位置2.轰炸");System.out.println("您选择的是:");int num = input.nextInt();switch (num) {case 1:int temp = map.playerB;map.playerB = map.playerA;map.playerA = temp;break;case 2:map.playerA -= 10;break;}return;}}for (int i = 0; i < map.pulse.length; i++) {if (map.playerA == map.pulse[i]) {System.out.println("唉,得休息一会了!");game1 = false;return;}}for (int i = 0; i < map.time.length; i++) {if (map.playerA == map.time[i]) {System.out.println("哈哈,时空隧道!");map.playerA += 10;return;}}}public void checkGameB() {for (int i = 0; i < map.dilei.length; i++) {if (map.playerB == map.dilei[i]) {System.out.println("哎,真衰,踩到地雷了!");int number = (int) (Math.random() * 6 + 1);map.playerB -= number;// 减去一个随机数return;}}for (int i = 0; i < map.luck.length; i++) {if (map.playerB == map.luck[i]) {System.out.println("嘿嘿,遇上幸转盘了,我真幸运!");System.out.println("1.交换位置2.轰炸");System.out.println("您选择的是:");int num = input.nextInt();switch (num) {case 1:int temp = map.playerB;map.playerB = map.playerA;map.playerA = temp;break;case 2:map.playerA -= 10;break;}return;}}for (int i = 0; i < map.pulse.length; i++) {if (map.playerB == map.pulse[i]) {System.out.println("唉,得休息一会了!");game2 = false;return;}}for (int i = 0; i < map.time.length; i++) {if (map.playerB == map.time[i]) {System.out.println("哈哈,时空隧道!");map.playerA += 10;return;}}}public void judge() {System.out.println("******************************************************************* *****\n");System.out.println(" Game Over \n");System.out.println("******************************************************************* *****\n");}}测试类,游戏入口类Star():package com.yx.test;import com.yx.dao.Game;//import com.yx.dao.Map;public class test {/*** @param args*/public static void main(String[] args) {Game game = new Game();game.init();}}我这是分了两个包建立的,希望大家建立的时候注意下,或者可以直接加QQ,你可以直接下载到项目然后导入就可以了,这样就不存在其它问题了,呵呵。

基于Java的飞行棋的设计与实现

基于Java的飞行棋的设计与实现

基于Java的飞行棋的设计与实现作者:郑艳来源:《电子技术与软件工程》2017年第18期摘要随着科技的不断发展,越来越多的人们将玩游戏作为主要的休闲方式。

飞行棋作为一款经典的小游戏,一直都很受大家的喜欢。

该文章用JAVA来编写一个简单的飞行棋游戏。

【关键词】飞行棋 JAVA 界面设计游戏地图随着科技的不断发展,人们越来越喜欢电脑游戏或者手机游戏。

作为经典游戏之一的飞行棋一直深受人们的喜欢。

相传飞行棋是中国人的发明的,是中国玩具公司生产的,据说是为了纪念二战时飞虎队的卓越功勋,是pachisi游戏的变种。

飞行棋棋盘上这种转圈式的路程设计来自于空战中的“拉弗伯雷圆圈”。

参加编队的飞机不但保持在一个水平面上飞行,而且可绕圆圈盘旋爬高。

这样就可以利用防御队形进行盘旋以取得高度优势,伺机进行攻击。

飞行棋游戏开发是为了方便玩家在电脑上和其他玩家联网下棋,这样更加方便快捷。

让更多的人参与进来。

1飞行棋规则棋盘上有红黄蓝绿四个颜色,表示可以有四个人进行游戏。

每个玩家有4架飞机,哪个玩家的4架飞机全部飞进目的地,谁就臝得了这场游戏。

在游戏地图上一共有四个状态:1、正常状态;2、碰见地雷,后退6格;3、暂停,原地停止一回合;4、营运轮盘,有6种幸运设置:前进、后退、交换位置、转移、暂停一次、奖励一次、设置地雷、轰炸(将对方飞机炸退6格)。

4个玩家按照事先约定好的顺序扔骰子,刚开始时,玩家可以连扔三次骰子,只有扔到6点,才能启动一架飞机。

之后玩家按顺序扔骰子,扔到几点就顺时针走几步。

在游戏过程中,只要飞机的最后落脚点落在了其他玩家的飞机上,就可以把该玩家的飞机请回停机场。

在游戏进行过程中,扔得骰子点数为6的玩家可以继续扔骰子,直至骰子点数不是6或者游戏结束。

飞行棋在地图上行走时,如果落在了是和自己颜色相同的格子里,可以跳到前一个和自己颜色相同的格子里。

在游戏过程中会出现“迭子”现象,所谓“迭子”现象就是一方玩家的两架及以上的飞机飞在了同一个格内,这时几架飞机会重叠式的落在一起。

  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;}}。

相关文档
最新文档