采用 100 格小型游戏棋盘


游戏规则:对战双方轮流掷骰子控制自己的骑兵前进或后退,在游戏棋盘上设置有关卡


普通


地雷


暂停


时空隧道


幸运轮盘(提供两种运气:交换位置和轰炸)


     棋盘上的关卡只在骑兵第一次移动遇到时有效


根据需求分析对象


对战地图类( Map )


    功能:在控制台显示棋盘,并显示当前玩家在棋盘中所处的位置

 


游戏类( Game )


   功能:实现游戏初始化设置、展示游戏开始界面以及角色设置、控制游戏进度、实现游戏规则、以及游戏结束后结果评判


测试类( StartGame )


     功能:启动游戏


java 骑士 java骑士类型的游戏_java 骑士


构造地图类

package come.igeek;


public class Map {
 int[] map = new int[100];
 public void init(){
 
 int[] luckyTurn = {6, 23, 40, 55, 69, 83}; //幸运轮盘          1
 int[] landMine = {5, 13, 17, 33, 38, 50, 64, 80, 94};   //地雷位置  2  
 int[] pause = {9, 27, 60, 93};         //暂停                          3
 int[] timeTunnel = {20, 25, 45, 63, 72, 88, 90};   //时空隧道      4
 
 for(int i=0;i<luckyTurn.length;i++){
 int index =luckyTurn[i];
 map[index]=1;
 }
 for(int i=0;i<landMine.length;i++){
 int index =landMine[i];
 map[index]=2;
 }
 for(int i=0;i<pause.length;i++){
 int index=pause[i];
 map[index]=3;
 }
 for(int i=0;i<timeTunnel.length;i++){
 int index=timeTunnel[i];
 map[index]=4;
 }
 showMap(0,0);
 }
 public void drawLine(int begin,int end){//上下
 for( int i=begin;i<=end;i++){
 System.out.print(getGraphics(map[i]));
 }
 System.out.println();
 }
 public void drawLine(int begin,int end,int aPos,int bPos){//上下重载
 for( int i=begin;i<=end;i++){
 System.out.print(getGraphics(map[i],i,aPos,bPos));
 }
 System.out.println();
 }
 public void drawRight(int begin,int end){//右边
 for(int i=begin;i<=end;i++){
 for(int j=1;j<=109;j++){System.out.print(" ");}//打空格
 System.out.println(getGraphics(map[i]));
 }
 
 }
 public void drawRight(int begin,int end,int aPos,int bPos){//右边重载
 for(int i=begin;i<=end;i++){
 for(int j=1;j<=109;j++){System.out.print(" ");}
 System.out.println(getGraphics(map[i],i,aPos,bPos));
 }
 
 }
 public void drawMiddleLine(int begin,int end){//中间
 for(int i=end;i>=begin;i--){
 System.out.print(getGraphics(map[i]));
 }
 System.out.println();
 }
 public void drawMiddleLine(int begin,int end,int aPos,int bPos){//中间重载
 for(int i=end;i>=begin;i--){
 System.out.print(getGraphics(map[i],i,aPos,bPos));
 }
 System.out.println();
 }
 public void drawLeft(int begin,int end){//左边
 for(int i=begin;i<=end;i++){
 System.out.println(getGraphics(map[i]));
 }
 }
 public void drawLeft(int begin,int end,int aPos,int bPos){//左边重载
 for(int i=begin;i<=end;i++){
 System.out.println(getGraphics(map[i],i,aPos,bPos));
 }
 }
 public void showMap(int aPos,int bPos){//地图显示
 
 drawLine(0, 30,aPos,bPos);
 drawRight(31, 34,aPos,bPos);
 drawMiddleLine(35, 65,aPos,bPos);
 drawLeft(66, 69,aPos,bPos);
 drawLine(70, 99,aPos,bPos);
 }
 public String  getGraphics(int flag){//数字换成图像
 String icon=null;
 if(flag==0){icon="∷";}
 else if(flag==1){icon="¤";}
 else if(flag==2){icon="★";}
 else if(flag==3){icon="■";}
 else{ return icon="〓";}
 return icon;
 }
 /**
  * 
  * @param flag   当前格子表示
  * @param index当前格子下标
  * @param aPos A的位置
  * @param bPos B的位置
  * @return
  */
 public String getGraphics(int flag,int index,int aPos,int bPos){//数字换图像重写
 String icon=null;
 if(index==aPos&&index==bPos){
 icon="@@";
 }else if(index==aPos){
 icon="A";
 }else if(index== bPos){
 icon="B";
 }else{
 icon=getGraphics(flag);
 }
 return icon;
 }
 
}

构造玩家类

package come.igeek;


import java.util.Random;


public class Player {
 private String name;
 private int point;//位置
 private boolean isPause=false;//是否暂停,默认不暂停
 
 public Player(){
 
 }
 public Player(String name, int point, boolean isPause) {
 super();
 this.name = name;
 this.point = point;
 this.isPause = isPause;
 }


 public String getName() {
 return name;
 }


 public void setName(String name) {
 this.name = name;
 }


 public int getPoint() {
 return point;
 }


 public void setPoint(int point) {
 this.point = point;
 }


 public boolean isPause() {
 return isPause;
 }


 public void setPause(boolean isPause) {
 this.isPause = isPause;
 }


 //掷色子
 public int play(){
 Random m=new Random();
 int num=m.nextInt(6)+1;
 return num;
 }
 

}

构造游戏类

package come.igeek;


import java.util.Scanner;


public class Game {
 //两个玩家
 Player[] player =new Player[2];
 //一张地图
 Map map;
 
 //游戏初始化
 public void init(){
 //选角色
 Scanner in = new Scanner(System.in);
 for(int i=0;i<player.length;i++){
 System.out.println("请玩家1选择角色:1.孙悟空;  2.猪八戒; 3.白龙马:");
 int choose=in.nextInt();
 
 player[i]=new Player();
 player[i].setName(getName(choose));
 }
 
 //显示地图
 map=new Map();
 map.init();
 //开始游戏
 start();
 }
 //根据用户选择得到对应的角色名称
 public String getName(int choose){
 String name=null;
 switch(choose){
 case 1:
 name="孙悟空";
 break;
 case 2:
 name="猪八戒";
 break;
 case 3:
 name="白龙马";
 break;
 }
 return name;
 }
 
 //游戏开始
 public void start(){
 Scanner in = new Scanner(System.in);
 //玩家循环掷筛子
 while(player[0].getPoint()<99&&player[1].getPoint()<99){
 //A和B轮流掷
 for(int i=0;i<player.length;i++){
 //player[i]是玩家A或者B
 if(player[i].isPause()){
 System.out.println(player[i].getName()+"暂停一轮");
 player[i].setPause(false);
 continue;
 }
 System.out.print("请玩家"+player[i].getName()+"掷骰子:");
 in.nextLine();
 int n=player[i].play();
 System.out.println("点数为:"+n);
 if(player[i].getPoint()+n>=99){
 System.out.println(player[i].getName()+"获胜");
 return;
 }
 //改变位置
 player[i].setPoint(player[i].getPoint()+n);
 
 //判断当前是否踩到关卡
 int pos=player[i].getPoint();
 int flag=map.map[pos];
 switch(flag){
 case 0:
 common(i);
 break;
 case 1:
 luckyTurn(i);
 break;
 case 2:
 landMine(i);
 break;
 case 3:
 pause(i);
 break;
 case 4:
 timeTunnel(i);
 }
 
 //重绘地图
 map.showMap(player[0].getPoint(),player[1].getPoint());
 }
 }
 }
 
 public void common(int i){//前进到普通格处理,i为当前玩家
 if(player[0].getPoint()==player[1].getPoint()){
 if(i==0){System.out.println(player[1].getName()+"被踢回原点");player[1].setPoint(0);}
 else{System.out.println(player[0].getName()+"被踢回原点");player[0].setPoint(0);}
 }
 }
 public void luckyTurn(int i){//幸运轮盘,交换或轰炸(退六)
 Scanner in = new Scanner(System.in);
 System.out.println("恭喜遇到幸运轮盘,选择功能 1-与对方交换位置 2-轰炸对方");
 int choose=in.nextInt();
 switch(choose){
 case 1:
 if(i==1){
 int change=player[1].getPoint();
 player[1].setPoint(player[0].getPoint());
 player[0].setPoint(change);
 }else{
 int change=player[0].getPoint();
 player[0].setPoint(player[1].getPoint());
 player[1].setPoint(change);
 }
 break;
 case 2:
 if(i==0){
 if(player[1].getPoint()<6)player[1].setPoint(0);else player[1].setPoint(player[1].getPoint()-6);
 }
 else {
 if(player[0].getPoint()<6)player[0].setPoint(0);else player[0].setPoint(player[0].getPoint()-6);
 }
 break;
 default:
 System.out.println("默认选择轰炸");
 if(i==0){
 if(player[1].getPoint()<6)player[1].setPoint(0);else player[1].setPoint(player[1].getPoint()-6);
 }
 else {
 if(player[0].getPoint()<6)player[0].setPoint(0);else player[0].setPoint(player[0].getPoint()-6);
 }
 }
 }
 public void landMine(int i){//踩地雷(退六)
 System.out.println(player[i].getName()+"踩到地雷,后退六步");
 if(player[i].getPoint()<6)
 {player[i].setPoint(0);}
 else
 {player[i].setPoint(player[i].getPoint()-6);}
 }
 public void pause(int i){//暂停一圈
 player[i].setPause(true);
 }
 public void timeTunnel(int i){//时空隧道(进十)
 System.out.println(player[i].getName()+"进入时空隧道,前进十步");
 player[i].setPoint(player[i].getPoint()+10);
 }

}

主函数测试类


package come.igeek;


public class test {


 public static void main(String[] args) {
 Game game=new Game();
 game.init();
 }
 
}