java骑士飞行棋
- 格式:doc
- 大小:130.00 KB
- 文档页数:14
基于JAVA的五子棋游戏系统设计与实现五子棋是一种双人对弈的棋类游戏,也是一种非常经典的游戏类型。
设计一个基于JAVA的五子棋游戏系统,需要考虑到以下几个方面:游戏规则、游戏界面和游戏功能的实现。
一、游戏规则的设计:五子棋的规则非常简单,双方轮流下棋,先连成五子的一方为胜。
游戏区域是一个15x15的棋盘,棋盘上有黑白两种棋子。
玩家可以通过点击棋盘的不同位置来下棋。
二、游戏界面的设计与实现:1. 创建一个游戏主界面,并在界面上绘制棋盘。
可以使用JAVA Swing来创建界面,并使用Graphics类来实现绘制棋盘的功能。
2.在棋盘上绘制出15x15的格子,并设置鼠标点击事件,以便玩家可以通过点击棋盘的不同位置来下棋。
3. 在玩家下棋后,使用Graphics类来在棋盘上绘制出对应的棋子。
可以使用不同的颜色来区分黑白两种棋子。
三、游戏功能的实现:1.实现轮流下棋的功能。
通过一个变量来记录当前轮到哪个玩家下棋,玩家可以通过鼠标点击事件来确定落子的位置。
2.实现判断胜负的功能。
在每次下棋后,判断是否已经有五子连线的情况出现。
可以使用一个二维数组来保存棋盘上每个位置的棋子情况,并根据棋子位置来判断是否满足胜利条件。
3.实现悔棋功能。
当玩家点击悔棋按钮时,可以将最后一步下的棋子清除,并将轮到下棋的玩家切换至上一步下棋的玩家。
4.实现重新开始的功能。
当游戏结束后,可以通过点击重新开始按钮来重新开始游戏。
以上是一个基于JAVA的五子棋游戏系统的设计与实现的简要思路。
在实际的开发过程中,还需要考虑到异常处理、界面美化、多人对战等更多的细节。
希望以上内容能够帮助您完成五子棋游戏系统的设计与实现。
飞行棋小游戏飞行棋是一款经典的棋盘游戏,旨在让玩家在棋盘上的飞机上飞行并尽快到达终点。
下面我将详细介绍飞行棋的玩法和规则。
目标:飞行棋的目标是尽快将自己的飞机移动到终点,完成比赛并获得胜利。
规则:1. 飞行棋棋盘上有一条环绕的飞行路径,路径上有一些特殊的格子,如起飞点、停机坪、加油站、跳跃点等。
2. 每个玩家在游戏开始时选择一架飞机,起飞点有四个不同颜色的区域,每个区域对应一种颜色的飞机。
3. 游戏开始后,玩家按照骰子的点数掷骰子并将飞机移动相应的步数。
如果玩家掷到6,可以再掷一次。
4. 玩家可以选择移动任意一架自己的飞机,也可以选择不移动。
5. 如果玩家的飞机移动到其他玩家的飞机所在的格子上,其他玩家的飞机会返回起飞点重新开始。
6. 如果玩家的飞机移动到特殊格子上,会触发相应的事件,如加油、跳跃、停机等。
7. 当玩家的飞机经过终点时,必须以恰好的步数停在终点上才算完成比赛,否则需要继续前进直到满足条件。
8. 第一个将所有飞机移动到终点的玩家获得胜利。
术语和技巧:1. 跳跃点:移动到跳跃点的飞机可以直接跳到另一个跳跃点上,节省时间。
2. 加油站:移动到加油站的飞机可以恢复燃料,避免在飞行过程中因燃料不足而被迫返回起飞点。
3. 停机坪:移动到停机坪的飞机可以暂停一回合,不受其他玩家的干扰。
4. 飞机堵塞:可以选择堵塞其他玩家的飞机,使其无法前进,增加自己的胜算。
创造性和想象力:1. 玩家可以尝试不同的策略,如选择不同的飞机、优先移动哪一架飞机等,以增加胜算。
2. 可以设定自己的规则,如允许玩家在特殊格子上触发额外的事件,或者添加更多特殊格子等,增加游戏的变化和挑战性。
3. 可以与朋友一起玩飞行棋,组队竞赛,增加合作和竞争的乐趣。
总结:飞行棋是一款简单而有趣的棋盘游戏,玩家需要根据骰子的点数移动自己的飞机,利用特殊格子的效果和策略,尽快到达终点。
通过创造性和想象力,玩家可以尝试不同的策略和方法,使游戏更具挑战性和乐趣。
突然想起自己刚学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-4个人一起玩,玩家需要控制自己的飞机前进并击败其他玩家。
飞行棋具有简单易懂的规则和刺激的游戏过程,深受大众喜爱。
飞行棋的游戏板由一个长方形棋盘组成,被划分为数十个小格子。
玩家起点位置分别位于棋盘四个角,每个玩家有四架飞机。
游戏目标是通过掷骰子并按照点数前进,最先将自己的四架飞机带回终点的玩家获胜。
飞行棋的规则相当简单。
每个玩家轮流掷骰子,并按照骰子上的点数选择移动一架飞机。
飞机只能在棋盘上的小格子中移动,不能倒退。
如果玩家掷出的点数是6,那么他就可以再走一次;如果他连续三次掷出的点数都是6,那他就必须将一架飞机从起点重新开始。
游戏中存在着一些特殊的格子,它们会给玩家带来不同的效果。
例如,“跳桥”格子会使得玩家飞机直接绕过一段路程,而“拐弯”格子会使得玩家飞机改变方向。
这些特殊格子的设计为游戏增加了一些策略性,玩家需要根据具体情况决定如何移动飞机。
飞行棋游戏中最有趣的部分是玩家之间的对战。
当两架飞机在同一个格子上时,后来的飞机会将前面的飞机送回起点,玩家需要重新走过一段路程。
这使得玩家之间形成了一种角力的竞争,大家都想尽快将自己的飞机安全带回终点。
飞行棋游戏适合各个年龄段的人群,无论是孩子还是成年人都可以享受其中的乐趣。
它不仅能增强玩家的集中力和判断力,还能培养玩家们的团队合作精神和竞争意识。
总的来说,飞行棋是一款经典而又受欢迎的棋类游戏,它的规则简单易懂,而游戏过程又紧张刺激。
无论是家庭团聚时还是朋友间的小型聚会,飞行棋都能给大家带来欢乐和友谊的体验。
让我们拿起骰子,控制飞机,在飞行棋的棋盘上留下美好的回忆吧!。
飞行棋是一种家庭娱乐棋类游戏,通过掷骰子和移动棋子来竞争。
下面是飞行棋的玩法及其策略:玩法:1. 棋盘:飞行棋使用一个带有飞机飞行路径的特殊棋盘。
2. 棋子:每个玩家有4架飞机棋子,根据颜色区分。
3. 控制棋子:每个玩家轮流掷骰子,并选择要移动的飞机。
每个飞机从起飞点开始,按照掷骰子的点数移动,可以沿途碰到对方的飞机或特殊位置(如冰桥、大风等)。
4. 完成一圈:每个飞机必须在掷骰子的点数允许的情况下,绕一圈并最终回到同一起点的安全坐标上。
5. 遇到对方飞机:如果一个飞机落在对方飞机所在的位置上,对方的飞机被送回起飞点重新开始。
6. 完成任务:通过掷骰子点数和幸运指示卡的结合,满足任务要求的玩家可以最终赢得游戏。
策略:1. 多个飞机同时移动:在游戏中,每个玩家有4架飞机可以移动。
在选择移动哪架飞机时,要综合考虑飞机的位置、可能的对手攻击和任务要求等因素,灵活选择移动策略。
2. 充分利用幸运指示卡:幸运指示卡是游戏中的特殊道具,可以为玩家提供不同的优势,例如让飞机跳跃或保护不被攻击。
要明智地使用幸运指示卡,根据实际情况选择最合适的时机使用。
3. 防守和进攻兼顾:在游戏中,要考虑如何同时进行防守和进攻。
要注意保护自己的飞机免受对方的攻击,同时也要找机会攻击对方的飞机,尽量将对手的飞机送回起飞点。
4. 完成任务优先:游戏目标是满足任务要求,要优先考虑如何通过移动最快地完成任务。
有时候牺牲一些行动能力可以提前满足任务要求,争取胜利。
5. 观察对手:观察对手的动作和策略,了解他们的目标和意图。
根据对手的行动,可以调整自己的策略,尽量避免被对手攻击或诱骗。
6. 风险评估:在游戏中,有时候可能需要冒一定的风险。
在做出决策之前,要权衡利弊,评估风险和回报,选择最优的移动策略。
以上是飞行棋的基本玩法及一些策略。
但由于游戏中有一定的随机性,策略的成功还是要依靠部分运气和实时的决策。
希望这些策略对你有所帮助!。
《骑士飞行棋游戏》
功能需求说明:
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%。
四、游戏运行效果截图。
飞行棋的详细规则
小伙伴们,今天我来给大家讲讲飞行棋的规则,可好玩啦。
飞行棋是四个人一起玩的游戏呢。
我们先得把棋盘铺开,棋盘上有好多小格子,还有起飞的地方、飞行的路线,还有终点。
每个小伙伴选一种颜色的棋子,有红的、黄的、蓝的、绿的,就像我们在彩虹里挑颜色一样。
每个人有四个棋子,把自己的棋子都放在起飞的地方准备好。
然后呢,我们要开始掷骰子啦。
骰子是个小方块,上面有一到六个点。
要是掷到六点,就可以把一个棋子从起飞的地方放到起飞的路线上,这就像打开了一扇通往冒险的门。
我记得有一次我玩的时候,一直都掷不到六点,心里可着急了,就盼着那个六点快快出现。
结果旁边的小伙伴都开始走棋子了,我还在等。
我掷到了六点,可高兴了,赶紧把我的小红棋子送上了路。
棋子在路上走的时候,是按照骰子掷出的点数走相应的格子数。
比如说,掷出了三点,就往前走三格。
棋盘上有些格子是特别的。
有那种加速的格子,要是走到这个格子,就可以再掷一次骰子,然后按照点数继续往前走。
这就像得到了一个小惊喜,能让你的棋子跑得更快。
我有一回走到这个格子,又掷了个四点,我的棋子一下子就跑得老远了。
要是你的棋子走到和别人棋子在同一个格子的时候,别人的棋子就得回到起飞的地方重新开始。
就像在赛跑的时候,你把别人挤回了起点。
我和小伙伴玩的时候,我就把他的蓝棋子挤回了起点,他还假装生气地说我太“坏”了呢。
谁的四个棋子最先都到达终点,谁就赢啦。
这时候,赢的人就像个小英雄一样,可威风了。
小伙伴们,飞行棋是不是很有趣呀,大家快来一起玩吧。
飞行棋的设计与实现摘要:飞行棋是典型的战旗类游戏(slg),其开发主要包括游戏界面的设计、游戏规则的设计;经过分析,笔者使用 sun 公司的java 语言,利用java 语言提供的各种面向对象的开发工具,在短时间内建立游戏原型,然后,对初始原型进行需求迭代,不断修正和改进,直到形成用户满意的可行系统。
关键词:飞行棋;java;游戏地图;游戏the design and implementation of flight chessxie yunyan(harbin normal university,institute of computer science and information engineering, harbin150025,china) abstract: the flight chess is a battle flag games (slg), includes the development of the game interface design, the design of the rules of the game; after analysis, the author uses sun java language provided by the java language object-oriented development tools, in a short time to establish a prototype of the game, then demand iteration of the initial prototype, constantly revised and improved, until the formation of a viable system of customer satisfaction. keywords: flight chess; java; game map; game一、飞行棋历史起源关于飞行棋发明的年代和发明人,在网络上似乎还没有相关的线索。
骑士飞行棋骑士飞行棋简介:《骑士飞行棋》又名《别生气》,是一款跟传统的飞行棋一模一样的小游戏。
游戏中每家有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 显示对战结果。
3、定义类StartGame启动游戏。
4、本程序是两人对战玩法。
5、程序执行的命令:1)启动游戏 2)创建游戏类Game 3)开始游戏 4)定义测试类。
二、概要设计:1、定义启动游戏类StartGame://启动游戏class StartGame {public static void main(String[] args) {Game game = new Game(); //创建游戏类game.start(); //开始游戏}}2、创建游戏类Game:public class Game {Map map; //地图int playerPos1; //对战中玩家1的当前位置int playerPos2; //对战中玩家2的当前位置String[] goAndStop = new String[2]; //走或停标识设置String[] playerName = new String[2]; //对战角色public void init(){//调用createMap()生成地图}public void start(){//两人对战开始游戏}public void setRole(int no, int role){//设置对战角色}public void play(){//两人对战玩法}public int throwShifter(int no){//掷骰子并返回掷出的骰子数目}public int getCurPos(int no, int position, int step){//计算玩家此次移动后的当前位置并返回移动后的位置}public void judge(){//显示对战结果}}3、定义Map类:class Map {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}; //时空隧道public void createMap(){//生成地图}public String getGraph(int i, int index, int playerPos1, int playerPos2){ //显示地图关卡对应的图形并返回地图当前位置的对应图片}public void showLine1(int start, int end, int playerPos1, int playerPos2){ //输出地图的奇数行(第1、3行)}public void showLine2(int start, int end, int playerPos1, int playerPos2){ //输出地图的偶数行(第2行)}public void showRLine(int start, int end, int playerPos1, int playerPos2){ /输出地图的右竖列}public void showLLine(int start, int end, int playerPos1, int playerPos2) {//输出地图的左竖列}public void showMap(int playerPos1, int playerPos2){//显示对战地图}}4、定义测试类Test:class Test {public static void main(String[] args) {Map map = new Map();map.createMap();map.showMap(0, 0);}}三、程序代码:import java.util.*;//Map类public class Game {Map map; //地图int playerPos1; //对战中玩家1的当前位置int playerPos2; //对战中玩家2的当前位置String[] goAndStop = new String[2]; //走或停标识设置String[] playerName = new String[2]; //对战角色// 初始化游戏的一局public void init() {map = new Map();map.createMap(); //生成地图playerPos1 = 0; //设置玩家1起始位置playerPos2 = 0; //设置玩家2起始位置goAndStop[0] = "on"; //记录玩家1下一次走或停goAndStop[1] = "on"; //设置玩家2下一次走或停}//开始游戏public void start() {//初始化init();System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");System.out.println("////");System.out.println("////");System.out.println("// 骑士飞行棋//");System.out.println("////");System.out.println("////");System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n\n\n");System.out.println("\n~~~~~~~~~~~~~~~~~~~两人对战~~~~~~~~~~~~~~~~~~~");System.out.println("\n请选择角色: 1. 戴高乐 2. 艾森豪威尔 3. 麦克阿瑟 4. 巴顿");Scanner input = new Scanner(System.in);System.out.print("请玩家1选择角色: ");int role1 = input.nextInt();int role2;do {System.out.print("请玩家2选择角色: ");role2 = input.nextInt(); //双方选择角色代号} while (role2 == role1); //不允许角色重复setRole(1, role1); //设置玩家1代表的角色setRole(2, role2); //设置玩家2代表的角色play(); //开始两人对战}/*设置对战角色*no 玩家次序 1:玩家1 2:玩家2*role 角色代号*/public void setRole(int no, int role) {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;default:break;}}// 两人对战玩法public void play() {System.out.println("\n\n\n\n");System.out.print("\n\n****************************************************\n"); System.out.print(" Game Start \n");System.out.print("****************************************************\n\n");//显示对战双方士兵样式System.out.println("^_^" + playerName[0] + "的士兵:A");System.out.println("^_^" + playerName[1] + "的士兵:B\n");//显示对战地图System.out.println("\n图例: " + "■暂停¤幸运轮盘★地雷〓时空隧道∷普通\n");map.showMap(playerPos1, playerPos2);//游戏开始int step; //存储骰子数目while (playerPos1 < 99 && playerPos2 < 99) { //有任何一方走到终点,跳出循环//轮流掷骰子if (goAndStop[0].equals("on")) {//玩家1掷骰子step = throwShifter(1); //掷骰子System.out.println("\n-----------------"); //显示结果信息System.out.println("骰子数: " + step);playerPos1 = getCurPos(1, playerPos1, step); //计算这一次移动后的当前位置System.out.println("\n您当前位置: " + playerPos1);System.out.println("对方当前位置:" + playerPos2);System.out.println("-----------------\n");map.showMap(playerPos1, playerPos2); //显示当前地图if (playerPos1 == 99) { //如果走到终点break; //退出}System.out.println("\n" + playerName[0] + "停掷一次!\n"); //显示此次暂停信息goAndStop[0] = "on"; //设置下次可掷状态}System.out.println("\n\n\n\n");if (goAndStop[1].equals("on")) {//玩家2掷骰子step = throwShifter(2); //掷骰子System.out.println("\n-----------------"); //显示结果信息System.out.println("骰子数: " + step);playerPos2 = getCurPos(2, playerPos2, step); //计算这一次移动后的当前位置System.out.println("\n您当前位置: " + playerPos2);System.out.println("对方当前位置:" + playerPos1);System.out.println("-----------------\n");map.showMap(playerPos1, playerPos2);if (playerPos2 == 99) { //如果走到终点break; //退出}} else {System.out.println("\n" + playerName[1] + "停掷一次!\n"); //显示此次暂停信息goAndStop[1] = "on"; //设置下次可掷状态}System.out.println("\n\n\n\n");}//游戏结束System.out.println("\n\n\n\n");System.out.print("****************************************************\n");System.out.print(" Game Over \n");System.out.print("****************************************************\n\n"); judge();}/*掷骰子* no 玩家次序* return step 掷出的骰子数目*/public int throwShifter(int no) {System.out.print("\n\n" + playerName[no - 1] + ", 请您按任意字母键后回车启动掷骰子: ");Scanner input = new Scanner(System.in);String answer = input.next();step = (int) (Math.random() * 10) % 6 + 1; //产生一个1~6的数字,即掷的骰子数目return step;}/*计算玩家此次移动后的当前位置* no 玩家次序* position 移动前位置* step 掷的骰子数目* return position 移动后的位置*/public int getCurPos(int no, int position, int step) {position = position + step; //第一次移动后的位置if (position >= 99) {return 99;}Scanner input = new Scanner(System.in);switch (map.map[position]) { //根据地图中的关卡代号进行判断case 0: //走到普通格if (no == 1 && playerPos2 == position) { //玩家1与对方骑兵相遇playerPos2 = 0; //踩到对方,对方回到起点System.out.println(":-D 哈哈哈哈...踩到了!");}if (no == 2 && playerPos1 == position) { //玩家2与对方骑兵相遇 playerPos1 = 0; //踩到对方,对方回到起点System.out.println(":-D 哈哈哈哈...踩到了!");}break;case 1: //幸运轮盘System.out.println("\n◆◇◆◇◆欢迎进入幸运轮盘◆◇◆◇◆"); System.out.println(" 请选择一种运气:");System.out.println(" 1. 交换位置 2. 轰炸");System.out.println("=============================\n");int choice = input.nextInt();int temp;switch (choice) {case 1:if (no == 1) {temp = position;position = playerPos2;playerPos2 = temp;} else if (no == 2) {temp = position;position = playerPos1;playerPos1 = temp;}break;case 2:if (no == 1 && playerPos2 < 6) {playerPos2 = 0;} else {playerPos2 = playerPos2 - 6;}if (no == 2 && playerPos2 < 6) {playerPos1 = 0;} else {playerPos1 = playerPos1 - 6;}break;}//System.out.println(":~) " + "幸福的我都要哭了..."); break;case 2: //踩到地雷position = position - 6; //踩到地雷退6步System.out.println("~:-( " + "踩到地雷,气死了..."); break;case 3: //下一次暂停一次goAndStop[no - 1] = "off"; //设置下次暂停掷骰子System.out.println("~~>_<~~ 要停战一局了。