龟兔赛跑:
--普通格,共100格 _ _
龟:每次随机移动1至3格
兔子:每次随机移动1至6格
每20格会随机出现以下功能格各一次(不会在同一格内出现两种或两种以上功能)
功能格:(**和^^可以连续执行,@@和==不能连续执行)
**幸运星格:选手可再行动一次
@@地雷格:兔子回到上数两个地雷格,龟回到上一地雷格(若后方无地雷格则回到起点)
==传送格:兔子到达下一传送格,龟到达下数两个传送格(若前方无传送格则到达终点)
||树格:兔子停止三次行动
^^下坡格:龟前进10格
Animal(动物类)
package com.haina365.RTGame; public abstract class Animal { //当前位置 int position = 0; //每次跑的步数 public abstract int run(); //功能格的验证 public abstract void function(String[] map,Tortoise T); //地图上的移动 public void move(String[] map,Tortoise T){ //位置的累加计算 position = position + run(); //判断走完之后的位置是不是功能格,如果是则执行功能格代码 function(map,T); } //幸运星 public void star(String[] map,Tortoise T){ System.out.println("再跑一次"); move(map,T); } //地雷 public void mine(String[] map){ position--; while (true){ if (position<=0){ position = 0; break; }else if(map[position].equals("@@ ")){ break; }else{ position--; } } } //门 public void door(String[] map){ position++; while (true){ if (position>=99){ position = 99; break; }else if(map[position].equals("== ")){ break; }else{ position++; } } } }
Tortoise(乌龟类)
package com.haina365.RTGame; public class Tortoise extends Animal { @Override public int run() { int pace = (int) (Math.random() * 3) + 1; System.out.println("乌龟走了" + pace + "步"); return pace; } @Override public void function(String[] map, Tortoise T) { if (position <= 99) { if (map[position].equals("** ")) { System.out.println("乌龟遇到幸运星"); star(map, T); } else if (map[position].equals("== ")) { System.out.println("乌龟遇到传送门"); door(map); door(map); } else if (map[position].equals("@@ ")) { System.out.println("乌龟遇到地雷"); mine(map); } else if (map[position].equals("^^ ")) { System.out.println("乌龟遇到下坡,前进十格"); position = position + 10; function(map, T); } } else { position = 99; } } }
Rabbit (兔子类)
package com.haina365.RTGame; public class Rabbit extends Animal { @Override public int run() { int pace = (int) (Math.random() * 6) + 1; System.out.println("兔子走了" + pace + "步"); return pace; } @Override public void function(String[] map, Tortoise T) { if (position <= 99) { if (map[position].equals("** ")) { System.out.println("兔子遇到幸运星"); star(map, T); } else if (map[position].equals("== ")) { System.out.println("兔子遇到传送门"); door(map); } else if (map[position].equals("@@ ")) { System.out.println("兔子遇到地雷"); mine(map); mine(map); } else if (map[position].equals("|| ")) { System.out.println("兔子遇到树格,停三次"); T.move(map, T); T.move(map, T); T.move(map, T); } }else { position = 99; } } }
Map(地图类)
package com.haina365.RTGame; import java.util.Arrays; public class Map { public String[] getMap(){ //100个普通格子 String[]map = new String[100]; //保存25个功能格 // 保存方式为二维数组的每一个一维数组保存一种功能格 int[][] gongneng = new int[5][5]; //用于获取25个功能格的辅助数组 int[] index = new int[100]; //普通格子数组的初始化 Arrays.fill(map,"__ "); //获取功能格,将100个格子分成5份 for (int i = 0;i<5;i++){ //辅助数组初始化,让索引跟数组中的值一致 for (int j = 0+20*i;j<20+20*i;j++){ index[j] = j; } //取随机数 for (int k = 0;k<5;k++){ int a = (int)(Math.random()*(20 - k))+20*i; int temp = index[a]; index[a] = index[19-k+20*i]; index[19-k+20*i] = temp; gongneng[k][i] = temp; } } //给地图设置功能格 for (int i = 0;i<5;i++){ map[gongneng[0][i]] = "** "; map[gongneng[1][i]] = "@@ "; map[gongneng[2][i]] = "== "; map[gongneng[3][i]] = "|| "; map[gongneng[4][i]] = "^^ "; } return map; } public void showMap(String[] map,Rabbit R,Tortoise T){ //先复制一个新的地图,用于输出使用 String[] m = Arrays.copyOf(map,100); if (R.position==T.position){ m[R.position] = "遇"; }else{ m[R.position] = "兔"; m[R.position] = "龟"; } for (int i = 0;i<m.length;i++){ if (i%20==0){ System.out.println(); } System.out.print(m[i]); } System.out.println(); } }
GameMain(游戏测试类)
package com.haina365.RTGame; public class GameMain { public static void main(String[] args) { //获取生成的游戏地图 // String[] map = new Map().getMap(); Map m = new Map(); String[] map = m.getMap(); //创建乌龟和兔子的对象 Rabbit R = new Rabbit(); Tortoise T = new Tortoise(); m.showMap(map,R,T); while (R.position<99&&T.position<99){ R.move(map,T); T.move(map,T); //龟兔移动后可能出现越界问题,所以需要判断一下,如果越界了让其等于99赢了 //就行 if (R.position > 99){ R.position = 99; }if(T.position > 99){ T.position = 99; } m.showMap(map,R,T); } if (R.position>=99&&T.position>=99){ System.out.println("平局"); }else if (R.position>=99){ System.out.println("兔子赢了"); }else if (T.position>=99){ System.out.println("乌龟赢了"); } } }c 测试结果