zoukankan      html  css  js  c++  java
  • 骑士飞行棋

    一个棋牌类小游戏

    先写一个地图类:

    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 == index && playerPos2 == index)
                graph = "@@";
            else if(playerPos1 == index)
                graph = "A";
            else if(playerPos2 == index)
                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 = 29; 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);
        }  
    }

    接下来是游戏类:

    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.print("※※※※※※※※※※※※※※※※※※※※※※※※※\n");
              System.out.println("//                                             //");
              System.out.println("//                                             //");
              System.out.println("//         骑      士      飞       行       棋                                             //");
              System.out.println("//                                             //");
              System.out.println("//                                             //");
              System.out.print("※※※※※※※※※※※※※※※※※※※※※※※※※\n");
              System.out.println();
              System.out.println();
              System.out.println();
              System.out.println("~~~~~~~~~~~~~~~~~~两    人    对    战~~~~~~~~~~~~~~~~~~~");
              System.out.println();
              System.out.println("请选择角色: 1. 戴高乐    2. 艾森豪威尔    3. 麦克阿瑟    4. 巴顿");
              
    
              //角色设置
              System.out.print("请玩家1选择角色:");
              Scanner input = new Scanner(System.in);
              int role1 = input.nextInt();
              int role2;
              do{
                  System.out.print("请玩家2选择角色:");
                  role2 = input.nextInt();
              }while(role1 == role2);
              setRole(1, role1);
              setRole(2, 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] = "艾森豪威尔";
                      
                  case 3:
                      //设置玩家名称为"麦克阿瑟"
                      playerName[no-1] = "麦克阿瑟";
                      
                  case 4: 
                      //设置玩家名称为"巴顿"
                      playerName[no-1] = "巴顿";
    
                  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";   //设置下次可掷状态 
                  }
    
                  
                  System.out.println("\n\n\n\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("请输入任意key并回车开始掷骰子:");
              Scanner input = new Scanner(System.in);
              input.next();
    
              //模拟掷骰子:产生一个1~6的数字作为玩家掷的骰子数目
              step = (int)(Math.random()*10) % 6 + 1;
              
              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 && position == playerPos2){   //添加条件:玩家1与对方骑兵相遇
                        //添加代码实现:踩到对方,对方回到起点
                             playerPos2 = 0;
                         System.out.println(":-D  哈哈哈哈...踩到了!");
                     } 
                     if (no == 2 && position == playerPos1){ //添加条件:玩家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 = playerPos2;
                                 playerPos2 = position;
                                 position = temp;
                             }else if(no == 2){
                                 //添加代码实现交换:position与playPos1数值互换
                                 temp = playerPos1;
                                 playerPos1 = position;
                                 position = temp;
                             }
                             break;
                         case 2:   //轰炸
                             if(no==1 && playerPos2<6){ //no为1并且玩家2位置小于6
                                 //添加代码实现:计算玩家2当前位置
                                 playerPos2 = 0;
                             }else{
                                 //添加代码实现:计算玩家2当前位置
                                 playerPos2 -= 6;
                             }
                             if(no==1 && playerPos1<6){   //no为2并且玩家1位置小于6
                                 //添加代码实现: 计算玩家1当前位置
                                 playerPos1 = 0;
                             }else{
                                 //添加代码实现:计算玩家1当前位置
                                 playerPos1 -= 6;
                             }
                             break;
                     }
                     break;
                case 2:   //踩到地雷
                    //添加代码实现:踩到地雷退6步
                    position -= 6;
                    System.out.println("~:-(  " + "踩到地雷,气死了...");
                    break;
                case 3:  //下一次暂停一次
                    //添加代码实现:设置下次暂停掷骰子
                    goAndStop[no-1] = "off";
                    System.out.println("~~>_<~~  要停战一局了。");
                    break;
                case 4:   //时空隧道
                    //添加代码实现:进入时空隧道,加走10步
                    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[0] + "胜利!");
          }
    }

    然后写一个启动游戏的类:

    public class StartGame {
    
        /**
         * 启动游戏
         * @param args
         */
        public static void main(String[] args) {
            Game game = new Game();   //创建游戏类
              game.start();             //开始游戏
        }
    }
  • 相关阅读:
    Yaffs文件系统简介
    网新恒天2013年校园招聘笔试
    【Android】项目中每个文件夹的作用
    唐-诗:《春江花月夜》
    汉语-词语:诗词歌赋
    汉语-词语:四季
    图书-心理学:《思考致富》
    影视-电影:《释迦摩尼佛传》
    软件开发-开发模式:极限编程
    【计算机视觉】SIFT中LoG和DoG比較
  • 原文地址:https://www.cnblogs.com/tangzhengyue/p/2612664.html
Copyright © 2011-2022 走看看