当前位置:   article > 正文

龟兔赛跑(基于GUI与多线程实现)_java龟兔赛跑多线程图形界面

java龟兔赛跑多线程图形界面

直击龟兔赛跑现场

下面这张图是我们设计龟兔赛跑界面的初始效果与基本组成结构:

接下来是我仅代表我个人提出的一些疑问与解答:

1、俩动物以图片的形式显示?

其实在这里两个动物类就像标签一样

标签组件是什么?用于短文本字符串或图片显示固定提示信息。

下面给出这个初始界面的代码与效果图:

  1. class Race extends JFrame{
  2. JPanel p;
  3. private JButton b=new JButton("开始");//开始按钮
  4. private JLabel stateOfRabbit=new JLabel("乌龟和兔子的比赛现场");//显示比赛/兔子状态
  5. private JLabel rabbit =new JLabel(new ImageIcon("images/rabbit.jpg"));//兔子
  6. private JLabel tortoise =new JLabel(new ImageIcon("images/tortoise.jpg"));//乌龟
  7. public Race(){
  8. super("龟兔赛跑");//标题
  9. p=new JPanel(null);
  10. b.setBounds(20, 10, 70, 30);
  11. rabbit.setBounds(20, 100, 150, 166);
  12. tortoise.setBounds(20, 390, 150, 136);
  13. stateOfRabbit.setBounds(300, 20, 260, 50);
  14. stateOfRabbit.setFont(new Font("", Font.BOLD, 22));
  15. p.add(b);
  16. p.add(stateOfRabbit);
  17. p.add(rabbit);
  18. p.add(tortoise);
  19. this.add(p);
  20. this.setBounds(200,150,1000,650);
  21. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22. this.setVisible(true);
  23. }
  24. }

2、多线程实现俩小动物比赛

在上面的代码中,我们把兔子乌龟都定为标签类,但是俩东西参加比赛,是要同时参与比赛过程的,这里要利用多线程实现,也就是兔子、乌龟这俩标签要在比赛过程中(进程)移动,他俩的行为都属于这个进程(比赛)中的俩线程。

我们知道线程的创建方式有很多种:

  • 继承Thread,重写run()(创建单独的类/匿名内部类)
  • 实现Runnable,重写run()(创建单独的类/匿名内部类)
  • 实现Callable,重写call()(创建单独的类/匿名内部类)
  • 使用lambda表达式
  • 线程工厂 ThreadFactory
  • 线程池 ThreadPoolEcecutor

在GUI的学习中我们知道可以把Rabblt定位一个类,继承JFrame类再改写可以实现我们想要的窗口效果。同样标签类也是这样,可以把Rabbit类继承Jlabel类实现想要的兔子标签。

一个类可以实现多个接口,但只能继承一个父类。这里很明显要么实现Runnable,要么实现Callable接口,那就拿实现Runnable来举例

  1. class Race extends JFrame{
  2. ......
  3. private Rabbit rabbit =new Rabbit(new ImageIcon("images/rabbit.jpg"));//兔子
  4. private Tortoise tortoise =new Tortoise(new ImageIcon("images/tortoise.jpg"));//乌龟
  5. .......
  6. class Rabbit extends JLabel implements Runnable{
  7. public Rabbit(Icon image) {
  8. super(image);
  9. }
  10. @Override
  11. public void run() {}
  12. }
  13. class Tortoise extends JLabel implements Runnable{
  14. public Tortoise(Icon image) {
  15. super(image);
  16. }
  17. @Override
  18. public void run() {}
  19. }
  20. }

 

3、兔子和乌龟跑起来?

这里就表示一下俩东西的x方向的位移就行了,窗口里的效果相当于是50米跑一样的。

俩东西一起出发,兔子领先过不了一会就闭了(不动-位移不变),乌龟此时依旧锲而不舍!˃̣̣̥᷄⌓˂̣̣̥᷅  但是很可惜!兔子居然就睡了4000ms就醒了!难道兔子是外星兔嘛!不过好在我龟也不是太慢!老天不负有心龟,

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/854144
推荐阅读
相关标签