Java实现龟兔赛跑

使用继承Thread的方式来实现龟兔赛跑游戏

我们首先来看一下需求:

 开始编写代码:

首先我们创建一个动物抽象类Animal ,在Animal中定义一个runing的抽象方法

 注意:这里面有一个回调方法,定义它的目的就是当任意一方跑完200m后,调用回调方法,表示比赛结束,另一方停止跑步

 

接下来我们创建Rabbit类,继承一下Animal,调用里面的跑步方法

package com.ywt.mybatisplus.game;

/**
 * @author pc
 */
public class Rabbit extends Animal {
    @Override
    public void runing() {
        //兔子的速度
        int speed = 5;

        //总里程减去兔子每秒速度
        length -= speed;

        System.out.println("兔子跑了" + speed + "米,距离终点还有:" + length + "米");

        //如果兔子跑完
        if (length <= 0) {
            //总里程清空
            length = 0;
            System.out.println("兔子胜利!");
            if (calltoback != null) {
                //调用回调方法,结束比赛
                calltoback.win();
            }
        }
        //兔子没跑完
        try {
            //兔子每跑20米,休息1s
            if ((200 - length) % 20 == 0) {
                sleep(1000);
            }else {
                sleep(100);
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

 然后创建一个乌龟的类Turtle

然后我们创建比赛结束类 Stop,需要实现Animal中我们定义的接口,然后谁跑完,谁调用win方法,(这里为了方便使用了stop()方法,建议在项目中不要使用stop)

 

stop()方法:该方法是直接中断进程,就好比直接拔掉电脑电源。

推荐使用:interrupt()

 

 

 

 然后我们创建MainClass类来开始比赛。

回调方法: 例如乌龟胜利,乌龟调用的win()方法,将乌龟的比赛结果赋值给兔子,兔子就停止跑步了

 运行,查看结果:

可以看到,兔子还剩25米没有跑完,但是乌龟结束比赛了,兔子也就停止跑步了 

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java程序,通过绘制图形实现龟兔赛跑动画: ```java import java.awt.Color; import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class TurtleRabbitRace extends JPanel implements Runnable { private int xPosTurtle = 10; private int xPosRabbit = 10; private int yPos = 50; private int delay = 100; public TurtleRabbitRace() { JFrame frame = new JFrame("Turtle Rabbit Race"); frame.add(this); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(600, 200); frame.setVisible(true); } public void paintComponent(Graphics g) { super.paintComponent(g); g.setColor(Color.GREEN); g.fillRect(0, 0, 600, 200); g.setColor(Color.BLACK); g.drawString("START", 5, 30); g.drawString("FINISH", 570, 30); g.setColor(Color.RED); g.fillRect(xPosTurtle, yPos, 20, 20); g.setColor(Color.BLUE); g.fillRect(xPosRabbit, yPos + 30, 20, 20); } public void run() { while (xPosTurtle < 570 && xPosRabbit < 570) { xPosTurtle += (int)(Math.random() * 5); xPosRabbit += (int)(Math.random() * 10); repaint(); try { Thread.sleep(delay); } catch (InterruptedException e) { e.printStackTrace(); } } if (xPosTurtle >= 570 && xPosRabbit >= 570) { System.out.println("It's a tie!"); } else if (xPosTurtle >= 570) { System.out.println("Turtle wins!"); } else { System.out.println("Rabbit wins!"); } } public static void main(String[] args) { TurtleRabbitRace race = new TurtleRabbitRace(); Thread thread = new Thread(race); thread.start(); } } ``` 程序中使用了Java Swing的图形控件,创建了一个窗口并在其中绘制了龟和兔子的图形。通过启动一个线程,在每个时间间隔内更新龟和兔子的位置并重绘图形,直到有一个到达终点。最后输出比赛结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值