龟兔赛跑(用java中数组的知识来实现)

1.规则


龟兔赛跑:

--普通格,共100格

龟:每次随机移动1至3格
兔子:每次随机移动1至6格

每20格会随机出现以下功能格各一次(不会在同一格内出现两种或两种以上功能)

功能格:(**和^^可以连续执行,@@和==不能连续执行)
**幸运星格:选手可再行动一次
@@地雷格:兔子回到上数两个地雷格,龟回到上一地雷格(若后方无地雷格则回到起点)
==传送格:兔子到达下一传送格,龟到达下数两个传送格(若前方无传送格则到达终点)
||树格:兔子停止三次行动
^^下坡格:龟前进10格

2.应用技术

Java中实现龟兔赛跑的技术大多是集合与接口,对于并不熟悉这部分知识的朋友们,我们今天将采用数组的知识来实现这个小游戏

3.首先我们要先定义一个Map类

我们将在这个类里完成地图的搭建

public class Map {

    public static String map[] = new String[100];
    //判断数字再数组中是否存在 存在返回true 不存在返回false
    public static boolean check(int[] arr, int rand) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == rand) {
                return true;
            }
        }
        return false;
    }

    //使用静态块再程序加载时就初始化地图数据
    static  {
        Arrays.fill(map, "--");
        String function[] = {"**", "@@", "==", "||", "^^"};
        int a;
        //把地图分成五组
        for (int i = 0; i < 5; i++) {
            int [] arr = new int[5];
            //为每组生成五个功能格
            for (int j = 0; j <5; j++) {
                int rand = (int) (Math.random() * 20 +20*i);
                while (check(arr,rand)){
                    rand = (int) (Math.random() * 20 +20*i);
                }
                arr[j] = rand;
                map[rand] = function[j];
            }
        }
        System.out.println("地图初始化完成");
    }
}
4.接下来定义一个Animal类

在这个类里编写乌龟和兔子共同的属性与规则,这里我们要把它设置成抽象类,里面的方法要在乌龟类和兔子类中完善出来

public abstract class Animal {
    protected String name;
    protected int  position;
    protected int maxStep;

    public void play(){
        printMap();
        run();
        check();
        lucky();
        check();
        boom();
        down();
        check();
        tree();
        tp();
        check();

    }
    public void  check(){
        if(position>=99){
            System.out.println("游戏结束,"+name+"赢了");
            //主动退出程序
            System.exit(0);
        }
    }
    public void run(){
        int rand = (int) (Math.random() * maxStep) + 1;
        position = position+rand;
        System.out.println(name+"本次走了"+rand+"步,当前位置在"+position);
    }
    public void lucky(){
        if (Map.map[position].equals("**")){
            System.out.println(name+"遇到了幸运格 再走一次");
            run();
        }
    }
    public abstract void boom();
    public abstract void tp();
    public void tree(){
        if (Map.map[position].equals("||")){

        }
    }
    public void down(){
        if (Map.map[position].equals("^^")){

        }
    }
    public void printMap(){
        for (int i =0;i
5.再定义一个Rabbit类

先继承Animal类,然后编写兔子特有的属性与方法

public class Rabbit extends Animal{
    //兔子遇到树停止的次数
    private int stopCount;
    private boolean sleep=false;

    public Rabbit(){
        name = "兔子";
        maxStep = 6;
    }

    @Override
    public void boom() {
        if (Map.map[position].equals("@@")) {
            if (position < 40){
                position = 0;
                System.out.println(name +"遇到了地雷 被炸回原点");
                return;
            }
            int count = 0;
            for (int i = position-1;i>0;i--){
                if (Map.map[i].equals("@@")){
                    count++;
                }
                if (count ==2){
                    position = i;
                    break;
                }
            }
            System.out.println(name+"遇到了地雷 被炸到了"+position+"位置");
        }
    }


    @Override
    public void tp() {
        if (Map.map[position].equals("==")){
            if (position>=80){
                position = 99;
                System.out.println(name+"遇到了传送格 直接传送到了终点");
                return;
            }
            for (int i = position+1;i<100;i++){
                if (Map.map[i].equals("==")){
                    position = i;
                    break;
                }
            } System.out.println(name+"遇到了传送格 传送到了"+position+"位置");
        }
    }
    public void tree(){
        if(Map.map[position].equals("||")){
            if(!sleep){
                stopCount=3;
                System.out.println("兔子遇到了树,停止三次移动");
                sleep=true;
            }

        }
    }
    public void run(){
        if(stopCount>0){
            stopCount--;
            System.out.println(name+"正在睡觉,这是第"+(3-stopCount)+"轮");
        }else{
            sleep=false;
            super.run();
        }
    }
}
6.再定义一个Turtle类

这是编写乌龟的一个类

public class Turtle extends Animal {
    public Turtle() {
        name = "乌龟";
        maxStep = 3;
    }

    @Override
    public void boom() {
        if (Map.map[position].equals("@@")) {
            if (position < 20) {
                position = 0;
                System.out.println(name + "遇到了地雷 被炸回原点");
                return;
            }

            for (int i = position - 1; i > 0; i--) {
                if (Map.map[i].equals("@@")) {
                    position = i;
                    break;
                }
            }
            System.out.println(name + "遇到了地雷 被炸到了" + position + "位置");
        }
    }

    @Override
    public void tp() {
        if (Map.map[position].equals("==")) {
            if (position >= 60) {
                position = 99;
                System.out.println(name + "遇到了传送格 直接传送到了终点");
                return;
            }
            int co = 0;
            for (int i = position + 1; i < 100; i++) {
                if (Map.map[i].equals("==")) {
                    co++;
                }
                if (co == 2) {
                    position = i;
                    break;

                }
            }
            System.out.println(name + "遇到了传送格 传送到了" + position + "位置");
        }
    }

    @Override
    public void down() {
        if (Map.map[position].equals("^^")) {
            position = position + 10;
            System.out.println(name + "遇到了下坡路,前进十格");

        }
    }
}
7.最后定义一个Game类

这里就是我们最后进行龟兔赛跑游戏的一个运行与测试的类

public class Game {
    public static void main(String[] args) {
        Animal r=new Rabbit();
        Animal t=new Turtle();
        Scanner sc=new Scanner(System.in);
        while(true){
            r.play();
            t.play();
            sc.nextLine();
        }


    }


    }
8.运行结果

一直按回车直到游戏结束

龟兔赛跑(用java中数组的知识来实现)_第1张图片

你可能感兴趣的:(java,算法,数据结构)