java骑士飞行棋

合集下载

基于JAVA的五子棋游戏系统设计与实现

基于JAVA的五子棋游戏系统设计与实现

基于JAVA的五子棋游戏系统设计与实现五子棋是一种双人对弈的棋类游戏,也是一种非常经典的游戏类型。

设计一个基于JAVA的五子棋游戏系统,需要考虑到以下几个方面:游戏规则、游戏界面和游戏功能的实现。

一、游戏规则的设计:五子棋的规则非常简单,双方轮流下棋,先连成五子的一方为胜。

游戏区域是一个15x15的棋盘,棋盘上有黑白两种棋子。

玩家可以通过点击棋盘的不同位置来下棋。

二、游戏界面的设计与实现:1. 创建一个游戏主界面,并在界面上绘制棋盘。

可以使用JAVA Swing来创建界面,并使用Graphics类来实现绘制棋盘的功能。

2.在棋盘上绘制出15x15的格子,并设置鼠标点击事件,以便玩家可以通过点击棋盘的不同位置来下棋。

3. 在玩家下棋后,使用Graphics类来在棋盘上绘制出对应的棋子。

可以使用不同的颜色来区分黑白两种棋子。

三、游戏功能的实现:1.实现轮流下棋的功能。

通过一个变量来记录当前轮到哪个玩家下棋,玩家可以通过鼠标点击事件来确定落子的位置。

2.实现判断胜负的功能。

在每次下棋后,判断是否已经有五子连线的情况出现。

可以使用一个二维数组来保存棋盘上每个位置的棋子情况,并根据棋子位置来判断是否满足胜利条件。

3.实现悔棋功能。

当玩家点击悔棋按钮时,可以将最后一步下的棋子清除,并将轮到下棋的玩家切换至上一步下棋的玩家。

4.实现重新开始的功能。

当游戏结束后,可以通过点击重新开始按钮来重新开始游戏。

以上是一个基于JAVA的五子棋游戏系统的设计与实现的简要思路。

在实际的开发过程中,还需要考虑到异常处理、界面美化、多人对战等更多的细节。

希望以上内容能够帮助您完成五子棋游戏系统的设计与实现。

飞行棋游戏规则

飞行棋游戏规则
• 通过角色扮演和故事情节,可以使飞行棋游戏更加有趣,增加玩家的代入感
飞行棋的变体游戏通常在棋盘、棋子、规则等方面进行变化
• 例如,棋盘的大小、格子的数量、棋子的种类等都可以进行调整
• 通过变化,可以使飞行棋游戏更加丰富多样,满足不同玩家的需求
飞行棋在电子游戏中的应用
飞行棋游戏在电子游戏中得到了广泛的应用与发展
比赛的基本规则与流程
比赛的流程通常包括报名、分组、比赛、颁奖等环节
• 报名环节:参赛者需要按照比赛规则报名,提交相关信息
• 分组环节:组织者根据参赛者的实力进行分组,确保比赛的公平性
• 比赛环节:参赛者按照分组进行比赛,按照比赛规则进行棋子的移动和捕获
• 颁奖环节:比赛结束后,组织者根据比赛结果进行颁奖,表彰优胜者
• 棋盘上的格子有时还会标注不同的地形,如河流、山脉等,影响棋子的移动方式
飞行棋棋子代表不同的交通工具,如飞机、火车、汽车等
• 棋子的颜色通常与交通工具的类型相对应,便于玩家识别
• 棋子的初始位置通常在棋盘的起点
掷骰子与移动棋子
棋子移动时,需要遵循棋盘上的地形规则
• 例如,飞机可以在空中飞行,不受地形的限制;火车需要沿着铁路线移动;汽车则需要沿着道
捕获对方棋子
• 例如,飞机可以在任意格子里移动;
• 被捕获的棋子将从棋盘上移除,归捕
火车只能沿着铁路线移动;汽车只能沿
获者所有
着道路移动
• 通过捕获对方棋子,玩家可以减少对
• 通过发挥棋子的特殊能力,玩家可以
手的实力,提高自己的获胜几率
在游戏中取得优势
03
飞行棋的战术与策略
基本战术与策略
飞行棋游戏中,玩家需要采取合理的战术与策略才

飞行棋小游戏

飞行棋小游戏

飞行棋小游戏飞行棋是一款经典的棋盘游戏,旨在让玩家在棋盘上的飞机上飞行并尽快到达终点。

下面我将详细介绍飞行棋的玩法和规则。

目标:飞行棋的目标是尽快将自己的飞机移动到终点,完成比赛并获得胜利。

规则:1. 飞行棋棋盘上有一条环绕的飞行路径,路径上有一些特殊的格子,如起飞点、停机坪、加油站、跳跃点等。

2. 每个玩家在游戏开始时选择一架飞机,起飞点有四个不同颜色的区域,每个区域对应一种颜色的飞机。

3. 游戏开始后,玩家按照骰子的点数掷骰子并将飞机移动相应的步数。

如果玩家掷到6,可以再掷一次。

4. 玩家可以选择移动任意一架自己的飞机,也可以选择不移动。

5. 如果玩家的飞机移动到其他玩家的飞机所在的格子上,其他玩家的飞机会返回起飞点重新开始。

6. 如果玩家的飞机移动到特殊格子上,会触发相应的事件,如加油、跳跃、停机等。

7. 当玩家的飞机经过终点时,必须以恰好的步数停在终点上才算完成比赛,否则需要继续前进直到满足条件。

8. 第一个将所有飞机移动到终点的玩家获得胜利。

术语和技巧:1. 跳跃点:移动到跳跃点的飞机可以直接跳到另一个跳跃点上,节省时间。

2. 加油站:移动到加油站的飞机可以恢复燃料,避免在飞行过程中因燃料不足而被迫返回起飞点。

3. 停机坪:移动到停机坪的飞机可以暂停一回合,不受其他玩家的干扰。

4. 飞机堵塞:可以选择堵塞其他玩家的飞机,使其无法前进,增加自己的胜算。

创造性和想象力:1. 玩家可以尝试不同的策略,如选择不同的飞机、优先移动哪一架飞机等,以增加胜算。

2. 可以设定自己的规则,如允许玩家在特殊格子上触发额外的事件,或者添加更多特殊格子等,增加游戏的变化和挑战性。

3. 可以与朋友一起玩飞行棋,组队竞赛,增加合作和竞争的乐趣。

总结:飞行棋是一款简单而有趣的棋盘游戏,玩家需要根据骰子的点数移动自己的飞机,利用特殊格子的效果和策略,尽快到达终点。

通过创造性和想象力,玩家可以尝试不同的策略和方法,使游戏更具挑战性和乐趣。

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

飞行棋游戏规则

飞行棋游戏规则

投掷骰子时,玩家需确保骰子 不被其他玩家或外界因素干扰, 以确保结果的公正性。
投掷出的点数必须为正整数, 若出现非整数结果,需重新投 掷。
棋子移动
01
玩家根据投掷出的点数移动相应数量的棋子。
02
若棋子移动至已有其他棋子的位置,需按照规则等待或绕过,
不可再行移动。
棋子在到达终点时,需按照规则进行标记或执行特定动作。
03
特殊事件
01
02
03
在游戏过程中,可能会 触发一些特殊事件,例 如“停留”、“停留并
抽取卡片”等。
特殊事件需按照游戏规 则进行相应处理,玩家 需遵守规则,不得擅自
更改或跳过。
特殊事件可能会影响游 戏进程和结果,玩家需
谨慎对待。
游戏结束条件
01
游戏结束的条件包括所有玩家均到达终点、出现特 殊事件导致游戏结束等。
棋子设置
每个玩家拥有相同数量的棋子, 通常为4枚。
棋子颜色应与玩家颜色相匹 配。
棋子应放置在游戏板的起点处。
骰子设置
游戏需要一个骰子,用于决定玩家移动的步数。 骰子通常是六面体,每个面有1-6的数字。 玩家通过投掷骰子来决定移动的步数。
03
游戏规则
投掷骰子
玩家轮流投掷骰子,根据投掷 出的点数确定移动的步数。
飞行棋游戏规则
目录
• 简介 • 游戏设置 • 游戏规则 • 游戏策略 • 游戏变体 • 游戏扩展
01
简介
游戏类型
策略类游戏
飞行棋是一款策略类游戏,玩家需要 通过掷骰子来决定移动步数,并通过 合理规划路线和策略来争夺胜利。
适合多人游戏
飞行棋是一款适合多人参与的游戏, 通常由4名玩家共同进行,玩家之间 需要进行合作与竞争。

飞行棋游戏

飞行棋游戏

飞行棋游戏飞行棋是一款非常受欢迎的棋类游戏,它又被称为飞机棋。

这款游戏适合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%。

四、游戏运行效果截图。

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

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

游戏中每家有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("~~>_<~~ 要停战一局了。

相关文档
最新文档