JavaSE骑士飞行棋

地图类:

package flight;

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(index==playerPos1&&index==playerPos2){//显示两人重合时图形
         graph="@@";
        }else if(index==playerPos1){//显示玩家1
         graph="A";
        }else if(index==playerPos2){//显示玩家2
         graph="B";
        }else{
         switch(i){
         case 1:
          graph="¤";
          break;
         case 2:
          graph="★";
          break;
         case 3:
          graph="■";
          break;
         case 4:
          graph="〓";
          break;
         case 0:
          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; 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 = 36; j > 0; j--){
         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.println(getGraph(map[i], i,playerPos1, playerPos2)); 
     }
    }

    /**
     * 显示对战地图
     * @param playerPos1 玩家1的当前位置
     * @param playerPos2 玩家2的当前位置
     */
    public void showMap(int playerPos1, int playerPos2){
     /**/
     //显示地图第一行
     showLine1(0,31,playerPos1,playerPos2);     
     //换行
     System.out.println();
     //显示地图右竖行
     showRLine(32,36,playerPos1,playerPos2);
     //显示地图第二行
     showLine2(36,66,playerPos1,playerPos2);
     //换行
     System.out.println();
     //显示地图左竖行
     showLLine(67,70,playerPos1,playerPos2);
        //显示地图第3行
     showLine1(70,100,playerPos1,playerPos2);
    } 
}

 游戏类:

package flight;
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("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
       System.out.println("//                                                          //");
       System.out.println("//                                                          //");
       System.out.println("//               骑               士            飞                行             棋                                //");
       System.out.println("//                                                          //");
       System.out.println("//                                                          //");
       System.out.println("※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※");
       System.out.println("\n\n");
       System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~两    人    对    战~~~~~~~~~~~~~~~~~~~~~~~~~");
       System.out.println("请选择角色:1.戴高乐 2.艾森豪威尔 3.麦克阿瑟 4.巴顿");
       Scanner input = new Scanner(System.in); 
       String role1; 
       do { 
           System.out.print("请玩家1选择角色:  "); 
           role1 = input.next();  //玩家1选择角色代号  
           } while (!role1.equals("1") && !role1.equals("2") && !role1.equals("3") && !role1.equals("4")); 
           String role2; 
           do{ 
           System.out.print("请玩家2选择角色: "); 
           role2 = input.next();  //玩家2选择角色代号  
           } while (role2.equals(role1) || !role2.equals("1") && !role2.equals("2") && !role2.equals("3") && !role2.equals("4"));        
       //角色设置
           setRole(1, Integer.parseInt(role1));
           setRole(2, Integer.parseInt(role2));   
       //开始游戏
          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");
         
       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";   //设置下次可掷状态
        }

       
              System.out.println("\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();
      }
     
     
      /**
       * 掷骰子
       * @param no 玩家次序
       * @return step 掷出的骰子数目
       */
      public int throwShifter(int no){
       //定义变量存储骰子数目
       int step = 0;           
       //提示玩家启动掷骰子
       System.out.print(playerName[no-1]+",请您输入任意字符并按回车键扔骰子:"); 
       Scanner scan = new Scanner(System.in);
       scan.next();
          //模拟掷骰子:产生一个1~6的数字作为玩家掷的骰子数目
       step = (int)(Math.random()*6+1);
       System.out.print(step);
       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 && playerPos2 < 6){ //no为1并且玩家2位置小于6
                 //添加代码实现:计算玩家2当前位置
                 playerPos2 = 0;
                }else{
                 //添加代码实现:计算玩家2当前位置
                 playerPos2 = playerPos2 - 6;
                }
                if(no == 2 && playerPos1 < 6){   //no为2并且玩家1位置小于6
                 //添加代码实现: 计算玩家1当前位置
                 playerPos1 = 0;
                }else{
                 //添加代码实现:计算玩家1当前位置
                 playerPos1 = playerPos1 - 6;
                }
                break;
           }
           break;
         case 2:   //踩到地雷
          //添加代码实现:踩到地雷退6步
          position = position - 6;
          System.out.println("~:-(  " + "踩到地雷,气死了...");
          break;
         case 3:  //下一次暂停一次
          //添加代码实现:设置下次暂停掷骰子
          goAndStop[no-1] = "off";
          System.out.println("~~>_<~~  要停战一局了。");
          break;
         case 4:   //时空隧道
             //添加代码实现:进入时空隧道,加走10步
          position = position + 10;
             System.out.println("|-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]+"您获胜了");
       }
      }   
}

测试类:

package flight;

public class flightTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  
  Game game = new Game();
  game.start();  

 }

}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值