java示例之--骑士飞行棋实例
今天终于完成了“骑士飞行棋”的程序,虽然大部分的程序已经给出,并且高试也是在原程序的基础上改正的,不过收获还是挺多的。下面的完整的代码!
(1)地图类 Map.java

 Code
Codepackage s1java.xmal1;
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}; //时空隧道
/**
* 生成地图:
* 关卡代号为:1:幸运轮盘 2:地雷 3: 暂停 4:时空隧道 0:普通
*/
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 == playerPos2){
graph = "@@";
}else if(index == playerPos1){
graph = "A";
}else if(index == playerPos2){
graph = "B";
}else{
switch (i){
case 1: graph="¤";break;
case 2: graph="★";break;
case 3: graph="■";break;
case 4: graph="〓";break;
default: graph="∷";break;
}
}
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-1; 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--){ //输出29个空格
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){
//显示地图第一行
showLine1(0,31,playerPos1,playerPos2);
//换行
System.out.println();
//显示地图右竖行
showRLine(31,35,playerPos1,playerPos2);
//显示地图第二行
showLine2(35,66,playerPos1,playerPos2);
//换行
System.out.println();
//显示地图左竖行
showLLine(66,69,playerPos1,playerPos2);
//显示地图第3行
showLine1(69,100,playerPos1,playerPos2);
}
(2)游戏类 Game.java

 Code
Codepackage s1java.xmal1;
import java.util.*;
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("******************************");
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("---------------两 人 对 战---------------");
System.out.println("请选择角色: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(); //开始两人对战
}
// System.out.print("请玩家1选择角色:");
// BufferedReader reader1 = new BufferedReader(new InputStreamReader(System.in));
// int role1 = Integer.parseInt(reader1.readLine());
// System.out.print("请玩家2选择角色:");
// BufferedReader reader2 = new BufferedReader(new InputStreamReader(System.in));
// int role2 = Integer.parseInt(reader2.readLine());
//
// //角色设置
// setRole(1,role1);//设置玩家1的角色
// setRole(2,role2);//设置玩家2的角色
//
// //开始游戏
// 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:
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; //退出
}
}else{
System.out.println("\n" + playerName[0] +"停掷一次!\n"); //显示此次暂停信息
goAndStop[0] = "on"; //设置下次可掷状态
& ...
 
                    
                     
                    
                 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号