博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
骑士飞行棋
阅读量:7287 次
发布时间:2019-06-30

本文共 14175 字,大约阅读时间需要 47 分钟。

一个棋牌类小游戏

先写一个地图类:

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();             //开始游戏    }}

 

转载于:https://www.cnblogs.com/tangzhengyue/archive/2012/07/28/2612664.html

你可能感兴趣的文章
MySQL Explain
查看>>
Java NIO
查看>>
1、图片水印 之 一
查看>>
分布式锁
查看>>
使用proxychains-ng代理转发终端命令
查看>>
mysql初始化错误
查看>>
shell中的函数,shell中的数组,告警系统需求分析
查看>>
df命令 、du命令 、磁盘分区
查看>>
Java并发编程:CountDownLatch、CyclicBarrier和 Semaphore
查看>>
使用JDK自带的jmap和jhat监控处于运行状态的Java进程
查看>>
App怎么免费接入聚合支付SDK?
查看>>
什么是TensorFlow?
查看>>
Web3与智能合约交互实战(附代码)
查看>>
选择日期:年月日时分秒 插件
查看>>
从零到有的突破:BCH爱好者聚集地BCH.Club公测上线
查看>>
自建容器映像登录也行?Quay整合多种进阶功能
查看>>
如何快速打造一款高清又极速的短视频APP?
查看>>
总结sqlserver2012删除语法:delete数据表中的某一项内容
查看>>
网站建设就要像2018世界杯的俄罗斯队大杀四方[图]
查看>>
118.kubectl命令用法
查看>>