300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 北大青鸟Accp5.0 S1 Java项目——骑士飞行棋

北大青鸟Accp5.0 S1 Java项目——骑士飞行棋

时间:2023-08-07 06:40:20

相关推荐

北大青鸟Accp5.0 S1 Java项目——骑士飞行棋

经过一个多月的学习终于学完了使用Java语言理解程序逻辑课程,花了一周的时间写完了项目案例——骑士飞行棋。为了方便大家的交流学习,先将代码上传,欢迎大家批评指正。注:我把Game类的play方法中‘开始游戏’部分重新写成了一个方法。

Map类:

package sljava.xmal1;public class Map {int[] map=new int[100];//对战地图int[] luckyTurn=new int[]{6, 23, 40, 55, 69, 83}; //幸运轮盘int[] landmine=new int[]{5, 13, 17, 33, 38, 50, 64, 80, 94}; //地雷int[] pause=new int[]{9, 27, 60, 93}; //暂停int[] timeTunnel=new int[]{20, 25, 45, 63, 72, 88, 90}; //时空隧道/*** 生成地图关卡*关卡代号为:0.普通 1.地雷 2.幸运轮盘 3.暂停 4.时空隧道 */public int[] createMap(){//在对战地图上设置地雷格for(int i=0;i<landmine.length;i++){map[landmine[i]]=1;}//在对战地图上设置幸运轮盘格for(int i=0;i<luckyTurn.length;i++){map[luckyTurn[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;}return map;}/*** 显示地图关卡对应的图形* @param i 地图当前位置的关卡代号* @param index 当前地图位置编号* @param playerPos1 玩家1的当前位置* @param playerPos2 玩家2的当前位置* @return 地图当前位置对应的图形*/public String getGraph(int i,int index,int playerPos1,int playerPos2){String graph;createMap();if(playerPos1==index&&playerPos2==index){graph="@@";//玩家1位于地图当前位置}else if(index==playerPos1){graph="A";//玩家2位于当前位置}else if(index==playerPos2){graph="B";}else{switch(i){case 1: graph="★"; //关卡1,显示地雷break;case 2: graph="¤"; //关卡2,显示幸运轮盘break;case 3: graph="■"; //关卡3,显示暂停break;case 4: graph="〓"; //关卡4,显示时空隧道break;default: graph="::"; //关卡0,显示普通格break;}}return graph;}/*** 输出地图的奇数行* @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));}}/*** 输出地图的偶数行* @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 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 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=0;j<30;j++){System.out.print("");}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,30,playerPos1,playerPos2);//显示第一行System.out.println();showRLine(31,34,playerPos1,playerPos2); //显示右竖列showLine2(35,65,playerPos1,playerPos2); //显示第二行System.out.println();showLLine(66,68,playerPos1,playerPos2); //显示左竖列showLine1(69,99,playerPos1,playerPos2); //显示第三行}}

TestMap类:

package sljava.xmal1;public class TestMap {public static void main(String[] args){Map player=new Map();player.showMap(4,56);for(int i=0;i<100;i++){System.out.print(player.map[i]);}}}

Game类:

package sljava.xmal1;import java.util.*;//调用java.util包/*** 游戏类* @author tw* 实现游戏的运行*/public class Game {Scanner input=new Scanner(System.in);Map map=new Map();int playerPos1;//玩家1的当前位置int playerPos2;//玩家2的当前位置String[] goAndStop=new String[2];//记录玩家下一次走或是停String[] playerName=new String[2];//记录玩家选择的角色名称int[] playerPos={playerPos1,playerPos2};//玩家位置数组boolean[] bool = new boolean[100];//存储遇见关卡状态/** * 游戏初始化*/public void init(){playerPos1=0;playerPos2=0;//初始化两个玩家的位置为0//初始化两个玩家的goAndStop值为"on",即下一次允许掷骰子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){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 showXing(){for(int i=0;i<45;i++){System.out.print("*");}}public void showXing65(){for(int i=0;i<65;i++){System.out.print("*");}}/*** 显示两行"// //"*/public void showBlank(){for(int i=0;i<2;i++){System.out.print("//");for(int j=0;j<41;j++){System.out.print(" ");}System.out.print("//");System.out.println();}}/*** 开始游戏*/public void start(){int role1,role2;//两个玩家的角色init();//游戏初始化showXing();//显示"*"System.out.println();//换行showBlank();//显示两行"// //"//显示"// 骑士飞行棋 //"System.out.print("//");for(int i=0;i<11;i++){System.out.print(" ");}System.out.print("骑 士 飞 行 棋");for(int i=0;i<12;i++){System.out.print(" ");}System.out.print("//");System.out.println();//换行showBlank();//显示两行"// //"showXing();//显示"*"//换2行for(int i=0;i<2;i++){System.out.println();}//显示"~~~~~两人对战~~~~~"for(int i=0;i<9;i++){System.out.print("~");}System.out.print("两 人 对 战");for(int i=0;i<10;i++){System.out.print("~");}//角色选择System.out.println("/n");System.out.println("请选择角色:1.戴高乐 2.艾森豪威尔 3.麦克阿瑟 4.巴顿");//玩家选择角色System.out.print("请玩家1选择角色:");role1=input.nextInt();System.out.print("请玩家2选择角色:");role2=input.nextInt();//玩家1选择错误,重新选择while(role1<1||role1>4){System.out.println("玩家1角色选择错误,请重新选择!");System.out.print("请玩家1选择角色:");role1=input.nextInt();}//玩家2选择错误,重新选择while(role2<1||role2>4){System.out.println("玩家2角色选择错误,请重新选择!");System.out.print("请玩家2选择角色:");role2=input.nextInt();}//判断玩家2选择的角色是否与玩家1重复while(role1==role2){System.out.println("角色重复,请重新选择!");System.out.print("请玩家2选择角色:");role2=input.nextInt();}//调用setRole()方法存储角色信息setRole(1, role1);setRole(2,role2);play();//调用对战玩法}/*** 两人对战玩法*/public void play(){System.out.println();showXing();//显示一行"*"System.out.println("/n");for(int j=0;j<17;j++){System.out.print(" ");}System.out.print("Game Start");System.out.println("/n");showXing();//显示一行"*"System.out.println("/n");//显示对战双方士兵样式System.out.println("^_^"+playerName[0]+"的士兵:A");System.out.println("^_^"+playerName[1]+"的士兵:B");System.out.println("^_^两玩家相遇:@@/n");/** 显示对战地图*///显示图例showXing65();System.out.println("/n/n图例:★ 暂停 ◇ 幸运轮盘 ■ 暂停 〓 时空隧道 ::普通/n");map.showMap(playerPos1, playerPos2);//生成对战地图System.out.println("/n");showXing65();System.out.println();/** 游戏开始*///有任何一方走到终点,则循环结束while(playerPos[0]<99&&playerPos[1]<99){gameStart(1);if(playerPos[0]== 99){break;}gameStart(2);if(playerPos[1]== 99){break;}}System.out.println("/n/n/n");System.out.println();showXing();//显示一行"*"System.out.println("/n");for(int j=0;j<17;j++){System.out.print(" ");}System.out.print("Game Over");System.out.println("/n");showXing();//显示一行"*"System.out.println("/n");judge();//显示对战结果}/*** 开始游戏*/public void gameStart(int no){int step=0;//存储骰子数目/*** 玩家轮流掷骰子*/if(goAndStop[no-1].equals("on")){step=throwShifter(no);//获取骰子数目for(int i=0;i<65;i++){System.out.print("-");}System.out.println();System.out.println("骰子数:"+step);//计算这一次移动后的当前位置playerPos[no-1] =getCurPos(no,playerPos[no-1],step);//显示自己和对方的当前位置System.out.println("您当前的位置:"+playerPos[no-1]);switch(no){case 1:System.out.println("对方当前位置:"+playerPos[1]);break;case 2:System.out.println("对方当前位置:"+playerPos[0]);break;}for(int i=0;i<65;i++){System.out.print("-");}System.out.println("/n");showXing65();System.out.println("/n");//显示当前地图map.showMap(playerPos[0], playerPos[1]);}else{System.out.println("/n/n"+playerName[no-1]+"停掷骰子一次!");goAndStop[no-1]="on";//设置下次可掷状态showXing65();System.out.println();}}/*** 掷骰子* @param no 玩家次序* @return 掷出的骰子数目*/public int throwShifter(int no){//使用从控制台接收输入的方式启动骰子System.out.println("/n玩家"+playerName[no-1]+": 请输入任意字符回车后掷骰子!");String answer=input.next();int num=0;//模拟掷骰子:产生一个随机数(1~6)作为次玩家掷的骰子数目num=((int)(Math.random()*10))%6+1;return num;//返回掷的骰子数目}/*** 计算玩家此次移动后的当前位置* @param no 玩家次序* @param position 移动前位置* @param step 掷的骰子数目* @return 移动后的位置*/public int getCurPos(int no,int position,int step){position=position+step;//第一次移动后的位置if(position>=99){return 99;}/*如果关卡一次都没有遇上,则进行关卡判断*/if(bool[position] != true&&map.map[position]!=0){/** 根据地图的关卡代号进行判断*/switch(map.map[position]){case 1://踩到地雷bool[position] = true;//踩到地雷后退6步System.out.print("/n您当前位置为:"+position);if(position<=6){position=0;}else{position=position-6;}System.out.println("/n~:-( 晕,运气差劲,一不小心就挂了,二十年后又是一条好汉!!");break;case 2://幸运轮盘bool[position] = true;System.out.println("/n您当前位置为:"+position);if(no == 1){System.out.println("对方当前位置为:"+playerPos[1]);}if(no == 2){System.out.println("对方当前位置为:"+playerPos[0]);}System.out.println("○●◎▲※ 欢迎进入幸运轮盘 ※▲◎●○");System.out.println("请选择一种运气:1.交换位置 2.轰炸机");for(int i=0;i<45;i++){System.out.print("=");}System.out.println();int choice=input.nextInt();int temp;//交换时的临时变量switch(choice){case 1://交换位置if(no==1){//position与playerPos2位置互换temp=position;position=playerPos[1];playerPos[1]=temp;}else if(no==2){//position与playerPos1位置互换temp=position;position=playerPos[0];playerPos[0]=temp;}break;case 2://轰炸if(no==1){if(playerPos[1]<=6){playerPos[1]=0;}else{playerPos[1]=playerPos[1]-6;}}if(no==2){if(playerPos[0]<=6){playerPos[0]=0;}else{playerPos[0]=playerPos[0]-6;}}break;}break;case 3://暂停System.out.println("/n您当前位置为:"+position);bool[position] = true;goAndStop[no-1]="stop";//设置下次暂停掷骰子System.out.println(" ~~>_<~~哥哥我累了,先休息休息!!");break;case 4://时空隧道System.out.println("/n您当前位置为:"+position);bool[position] = true;position+=10;//进入时空隧道,向前进10步System.out.println("|-P 哈哈,俺穿越到未来了!!!");break;}}else//普通{//玩家1与对方相遇,对方回到起点if(no==1&&position==playerPos[1]){System.out.println("/n您当前位置为:"+position);System.out.println("对方当前位置为:"+playerPos[1]);playerPos[1]=0;System.out.println(":-D 哈哈哈哈...."+playerName[1]+"你回家休息休息吧!!");}//玩家2与对方相遇,对方回到起点if(no==2&&position==playerPos[0]){System.out.println("/n您当前位置为:"+position);System.out.println("对方当前位置为:"+playerPos[0]);playerPos[0]=0;System.out.println(":-D 哈哈哈哈...."+playerName[0]+"你回家休息休息吧!!");}}//返回此次掷骰子后玩家的位置if(position>=99){return 99;}else{return position;}}/*** 显示对战结果*/public void judge(){if(playerPos[0]>=99&&playerPos[1]<99){//玩家1获胜System.out.println("玩家"+playerName[0]+"获胜!");}else if(playerPos[1]>=99&&playerPos[0]<99){//玩家2获胜System.out.println("玩家"+playerName[1]+"获胜!");}else if(playerPos[0]==99&&playerPos[1]==99){//获得平局System.out.println("哈哈,咱们打成平手,下次再战!!");}}}

TestGame类:

package sljava.xmal1;public class TestGame {/*** @param args*/public static void main(String[] args) {Game game=new Game();game.start();}}

以上是飞行棋项目的完整代码,包括关卡只在第一次有效。大家如果有什么意见和不明白的地方可以留言。谢谢支持!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。