龟兔赛跑##

龟兔赛跑:

--普通格,共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
测试结果

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值