文档库 最新最全的文档下载
当前位置:文档库 › 骑士飞行棋完美版

骑士飞行棋完美版

地图类:

public 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 }; // 时空隧道

/**
* 生成地图,关卡代号为:
*
* 0:普通 1:幸运轮盘 2:地雷 3: 暂停 4:时空隧道
*/
public void createMap() {
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;
}

}

/**
* 显示地图关卡对应的图形
*
* @param i
* 地图当前位置的关卡代号
* @param index
* 当前地图位置编号
* @param playerPos1
* 玩家1的当前位置
* @param playerPos2
* 玩家2的当前位置
* @return 地图当前位置的对应图片
*/
public String getGraph(int i, int index, int playerPos1, int playerPos2) {
String graph = "";

// 添加代码
if (playerPos1 == index && playerPos2 == index) {
graph = "@@";
} else if (playerPos1 == index) {
graph = "A";
} else if (playerPos2 == index) {
graph = "B";
} else {
switch (i) {
case 1:
graph = "¤";
break;
case 2:
graph = "★";
break;
case 3:
graph = "■";
break;
case 4:
graph = "〓";
break;
default:
graph = "∷";
}
}

return graph;
}

/**
* 输出地图的奇数行(第1、3行)
*
* @param start
* 输出的起始点在地图上的位置
* @param end
* 输出的结束点在地图上的位置
* @param playerPos1
* 玩家1的当前位置
* @param playerPos2
* 玩家2的当前位置
*/
public void showLine1(int start, int end, int playerPos1, int playerPos2) {
// 添加代码
for (int i = start; i <= end; i++) {
System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
}
}

/**
* 输出地图的偶数行(第2行)
*
* @param start
* 输出的起始点在地图上的位置
* @param end
* 输出的结束点在地图上的位置
* @param playerPos1
* 玩家1的当前位置
* @param playerPos2
* 玩家2的当前位置
*/
public void showLine2(int start, int end, int playerPos1, int playerPos2) {
for (int i = end; i >= start; i--) {
System.out.print(getGraph(map

[i], i, playerPos1, playerPos2));
}
}

/**
* 输出地图的右竖列
*
* @param start
* 输出的起始点在地图上的位置
* @param end
* 输出的结束点在地图上的位置
* @param playerPos1
* 玩家1的当前位置
* @param playerPos2
* 玩家2的当前位置
*/
public void showRLine(int start, int end, int playerPos1, int playerPos2) {
for (int i = start; i <= end; i++) {
for (int j = 28; j > 0; j--) { // 输出28个空格
System.out.print(" ");
}
System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
System.out.println();
}
}

/**
* 输出地图的左竖列
*
* @param start
* 输出的起始点在地图上的位置
* @param end
* 输出的结束点在地图上的位置
* @param playerPos1
* 玩家1的当前位置
* @param playerPos2
* 玩家2的当前位置
*/
public void showLLine(int start, int end, int playerPos1, int playerPos2) {
// 添加代码
for (int i = start; i <= end; i++) {
System.out.print(getGraph(map[i], i, playerPos1, playerPos2));
System.out.println();
}
}

/**
* 显示对战地图
*
* @param playerPos1
* 玩家1的当前位置
* @param playerPos2
* 玩家2的当前位置
*/
public void showMap(int playerPos1, int playerPos2) {
createMap();

// 显示地图第一行
showLine1(0, 30, playerPos1, playerPos2);
// 换行
System.out.println();

// 显示地图右竖列
showRLine(31, 34, playerPos1, playerPos2);

// 显示地图第二行
showLine2(35, 65, playerPos1, playerPos2);
// 换行
System.out.println();

// 显示地图左竖列
showLLine(66, 68, playerPos1, playerPos2);

// 显示地图第3行
showLine1(69, 99, playerPos1, playerPos2);
}
}



游戏类:


import java.util.*;

public class Game {
// 声明地图
Map map;

// 声明对战中玩家1的当前位置
int playerPos1;

// 声明对战中玩家2的当前位置
int playerPos2;

// 声明走或停标识设置
String[] goAndStop = new String[2];

// 声明对战角色
String[] playerName = new String[2];

/**
* 初始化游戏的一局
*/
public void init() {
// 创建Map对象
map = new Map();
// 生成地图
map.createMap();
// 设置玩家1起始位置
playerPos1 = 0;
// 设置玩家2起始位置
playerPos2 = 0;
// 记录玩家1下一次走或停
goAndStop[0] = "on";
// 设置玩家2下一次走或停
goAndStop[1] = "on";
}

/**
* 开始游戏
*/
public void start() {
// 调用初始化方法
init();

// 显示游戏界面
System.out.println("##################################################################################\n\n");
System.out.println("\t\t\t\t骑 士 飞 行 棋\n\n");
System.out.println("

##################################################################################\n\n\n");
System.out.println("-------------------------------两人对战--------------------------------\n");
// 角色设置
System.out.println("请选择角色:1.徐德强 2.艾森豪威尔 3.麦克阿瑟 4.巴顿");
Scanner input = new Scanner(System.in);
System.out.print("请选择角色1:");
setRole(1, input.nextInt());
System.out.print("请选择角色2:");
setRole(2, input.nextInt());
// 开始游戏
play();

}

/**
* 设置对战角色
*
* @param no
* 玩家次序 1:玩家1 2:玩家2
* @param 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:
System.out.println("没有你需要的角色!");
break;
}
}

/**
* 两人对战玩法
*/
public void play() {
System.out.println("\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");
System.out.println();
// 显示对战地图
System.out.println("\n图例: " + "■ 暂停 ¤ 幸运轮盘 ★ 地雷 〓 时空隧道 ∷ 普通\n");

map.showMap(playerPos1, playerPos2);
System.out.println("\n");
int step; // 存储骰子数目
while (playerPos1 < 99 && playerPos2 < 99) { // 有任何一方走到终点,跳出循环

// 轮流掷骰子
if (goAndStop[0].equals("on")) {
// 玩家1掷骰子
System.out.print(playerName[0]);
step = throwShifter(1); // 掷骰子
System.out.println("\n-----------------"); // 显示结果信息
System.out.println("骰子数: " + step);
playerPos1 = getCurPos(1, playerPos1, step); // 计算这一次移动后的当前位置
System.out.println(playerName[0]+"当前位置: " + playerPos1);
System.out.println(playerName[1]+"当前位置:" + playerPos2);
System.out.println("-----------------\n");
map.showMap(playerPos1, playerPos2); // 显示当前地图
if (playerPos1 == 99) { // 如果走到终点
break; // 退出
}
} else {
System.out.println("\n" + playerName[0] + "停掷一次!\n"); // 显示此次暂停信息
goAndStop[0] = "on"; // 设置下次可掷状态
}

System.out.println("\n");

if (goAndStop[1].equals("on")) {
// 玩家2掷骰子
System.out.print(playerName[1]);

step = throwShifter(2); // 掷骰子
System.out.println("\n-----------------"); // 显示结果信息
System.out.println("骰子数: " + step);
playerPos2 = getCurPos(2, playerPos2, step); // 计算这一次移动后的当前位置
System.out.println(playerName[0]+"当前位置: " + playerPos1);
System.out.println(playerName[1]+"当前位置:" + playerPos2);
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");
}

// 游戏结束
System.out.println("\n");
System.out.print("****************************************************\n");
System.out.print(" Game Over \n");
System.out.print("****************************************************\n\n");
judge();
}

/**
* 掷骰子
*
* @param no
* 玩家次序
* @return step 掷出的骰子数目
*/
public int throwShifter(int no) {
// 定义变量存储骰子数目
int step = 0;

// 提示玩家启动掷骰子

Scanner input = new Scanner(System.in);
System.out.println("按任意字母掷骰子:");
input.next();
// 模拟掷骰子:产生一个1~6的数字作为玩家掷的骰子数目
step = (int) (Math.random() * 6 + 1);
return step;
}

/**
* 计算玩家此次移动后的当前位置
*
* @param no
* 玩家次序
* @param position
* 移动前位置
* @param 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) {
// 添加代码实现交换:position与playerPos2数值互换
temp = position;
position=playerPos2;
playerPos2 = temp;
} else if (no == 2) {
// 添加代码实现交换:position与playPos1数值互换
temp = position;
position=playerPos1;
playerPos1 = temp;
}
break;
case 2: // 轰炸
if (no == 1) { // no为1
// 添加代码实现:计算玩家2当前位置
if(playerPos2 < 6){
playerPos2 = 0;
}else {
// 添加代码实现:计算玩家2当前位置
playerPos2 = playerPos2 - 6;
}
}
if (no == 2) { // no为2
// 添加代码实现: 计算玩家1当前位置
if(playerPos1 < 6){
playerPos1 = 0;
}else {
// 添加代码实现:计算玩家1当前位置
playerPos1 = playerPos1 - 6;
}
}
break;
}
break;
case 2: // 踩到地雷
// 添加代码实现:踩到地雷退6步
if (no == 1 && playerPos2 < 6) {
playerPos1 = position = 0;
if (playerPos1 > 6) {
playerPos1 = position = position - 6;
}
System.out.println(playerName[0] + "~:-( " + "踩到地雷,气死了...");
} else if (no == 2 && playerPos2 < 6) {
playerPos2 = position = 0;
if (playerPos2 > 6) {
playerPos2 = position = position - 6;
}
System.out.println(playerName[1] + "~:-( " + "踩到地雷,气死了...");
}
break;
case 3: // 下一次暂停一次
// 添加代码实现:设置下次暂停掷骰子
if (no == 1) {
goAndStop[0] = "off";
System.out.println(playerName[0] + "~~>_<~~ 要停战一局了。");
} else if (no == 2) {
goAndStop[1] = "off";
System.out.println(playerName[1] + "~~>_<~~ 要停战一局了。");
}
break;
case 4: // 时空隧道
// 添加代码实现:进入时空隧道,加走10步
position = position + 10;
if (no == 1) {
System.out.println(playerName[0] + "|-P " + "进入时空隧道, 真爽!");
} else if (no == 2) {
System.out.println(playerName[1] + "|-P " + "进入时空隧道, 真爽!");
}
break;
}

// 返回此次掷骰子后玩家的位置坐标
if (position < 0) {
return 0;
} else if (position > 99) {
return 99;
} else {
return position;
}
}

/**
* 显示对战结果
*/
public void judge() {
// 添加代码
if (playerPos1 > playerPos2) {
System.out.println(playerName[0]+"获胜!");
} else {
System.out.println(playerName[1]+"获胜!");
}

}
}


测试类:


public class Test {
public static void main(String[] args) {

Game game = new Game();
game.start();

}

}

相关文档