java飞行棋

33 篇文章 1 订阅
import java.util.Scanner;





//游戏类

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("请选择角色:1.A 2.B ");
           Scanner input = new Scanner(System.in);
           String role1;
           do {
               System.out.print("请玩家1选择角色:  ");
               role1 = input.next();  //玩家1选择角色代号  
               } while (!role1.equals("1") && !role1.equals("2") );
               String role2;
               do{
               System.out.print("请玩家2选择角色: ");
               role2 = input.next();  //玩家2选择角色代号  
               } while ( !role2.equals("1") && !role2.equals("2") );        
           //角色设置
               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] = "A";
             break;
            case 2:
             //设置玩家名称为"艾森豪威尔"
             playerName[no-1] = "B";
             break;
            default:
             break;
           }
          }
         
         
          /**
           * 两人对战玩法
           */
          public void play(){  
              System.out.println("\n");
             
           System.out.print("\n\n****************************************************\n");
           System.out.print("                开始游戏                  \n");
           System.out.print("****************************************************\n\n");
             
           //显示对战地图
           System.out.println("\n4种类型的陷阱: " + "$ 暂停  & 幸运轮盘   @ 地雷   # 时空隧道   * 普通\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与对方骑兵相遇
               //添加代码实现:踩到对方,对方回到step步
                playerPos2 -=4;
                System.out.println("碰撞了");
               }
               if (no == 2 && playerPos1 == position){ //添加条件:玩家2与对方骑兵相遇
                //添加代码实现:踩到对方,对方回到step步
                playerPos1 -= 4;
                System.out.println("碰撞了");
               }
               break;
              case 1:   //幸运轮盘
               System.out.println("\n进入幸运轮盘");
              
               //1.对方后退四步  2.自己前进4步
                 if(no==1)
                 {
                     playerPos1+=4;
                 }
                 if(no==2)
                 {
                     playerPos2+=4;
                 }
                  
               break;
             case 2:   //踩到地雷
              //添加代码实现:踩到地雷退4步
              position = position - 4;
              System.out.println("踩到地雷");
              break;
             case 3:  //下一次暂停一次
              //添加代码实现:设置下次暂停掷骰子
              goAndStop[no-1] = "off";
              System.out.println("要停战一局了。");
              break;
             case 4:   //时空隧道
                 //添加代码实现:进入时空隧道,加走4步
              position = position + 4;
                 System.out.println("进入时空隧道");
                 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]+"您获胜了");
           }
          }    


}






//地图类

import java.util.ArrayList;
import java.util.Random;

public class Map {
     int[] map = new int[100];   //对战地图
     int[] luckyTurn = {6, 55, 69, 83}; //幸运轮盘
     int[] landMine = {5, 13, 64, 80, 94};   //地雷位置
     int[] pause = {9, 27, 60, 93};         //暂停
     int[] timeTunnel = {20, 25, 72, 88};   //时空隧道

     /**
        * 生成地图:
        * 关卡代号为: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="X";
            }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 = 31; 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);
        }  
}

//测试类

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

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hexu_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值