Java多线程实现方块赛跑小游戏

 更新时间:2020年07月20日 17:21:52   作者:ZKeeer  
这篇文章主要为大家详细介绍了Java多线程实现方块赛跑小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java实现方块赛跑小游戏的具体代码,供大家参考,具体内容如下

在一个图形界面上构造两个位于同一起跑线方块,起跑线位于界面靠左位置, A 方块先开始运动,向右移动 50 像素后停止,B 方块开始运动,向右移动 100 像素后停 止,A 方块继续向右运动 100 像素后停止,B 方块开始运动,如此循环接替执行,直至 某一个方块到达终点,界面显示该方块胜利信息。 

1)  自定义一个threadA,ThreadB, ThreadFrame类(均继承自Thread)。

2)  定义全局变量,方块的位置,总长度,冠军,睡眠时间等,布尔值方块等待变量、游戏继续变量、绘图变量

3)  ThreadA(ThreadB):等待waitA(waitB)变量释放,即:等待另一个方块更新完位置;然后随机产生要移动的长度,检查运动后位置与总长度的关系,以此判断游戏是否结束。更新位置信息,更改绘图变量,通知绘图线程重绘。自锁本身,释放另一个方块线程。

4)  ThreadFrame:创建类对象,重写run函数,等待绘图变量的命令。接到绘图命令,重绘,判断游戏释放结束,重置绘图命令。

5)  构造函数,paint函数绘制,并进行游戏是否结束的判断,若结束,则打印冠军是谁,退出

6)  主函数,定义threadA,ThreadB, ThreadFrame类的对象,运行。用jion函数等待子线程的结束。

import java.awt.*;
import javax.swing.*;
 
public class four3 extends JFrame {
 // 全局变量
 static int positionA = 50, positionB = 50, distanceAll = 1600;
 static int RecWidth = 50, RecHeight = 50;
 static char winner;
 static long sleeptime = 300;
 static boolean waitA = true, waitB = true, gaming = true, unrepaint = true;
 
 //构造函数
 public four3() {
 setTitle("多线程:方块赛跑");
 setBackground(Color.WHITE);
 setSize(1600, 500);
 setLocation(0, 200);
 setResizable(false);
 setVisible(true);
 setDefaultCloseOperation(EXIT_ON_CLOSE);
 }
 
 //绘图函数
 public void paint(Graphics g) {
 // TODO Auto-generated method stub
 g.clearRect(0, 0, 1600, 900);
 g.setColor(Color.RED);
 g.fillRect(positionA - 50, 100, RecWidth, RecHeight);
 g.setColor(Color.BLUE);
 g.fillRect(positionB - 50, 300, RecWidth, RecHeight);
 
 if (!gaming) {
 g.setFont(new Font("宋体", ALLBITS, 50));
 if (winner == 'A') {
 g.setColor(Color.RED);
 g.drawString(new String("Winner Is The Red One!"), 550, 250);
 } else if (winner == 'B') {
 g.setColor(Color.BLUE);
 g.drawString(new String("Winner Is The Blue One!"), 550, 250);
 }
 }
 }
 
 public static void main(String[] args) {
 waitA = false;
 waitB = true;
 unrepaint = false;
 
 threadframe tf = new threadframe();
 threadA tA = new threadA();
 threadB tB = new threadB();
 
 tf.start();
 tA.start();
 tB.start();
 
 try {
 tf.join();
 tA.join();
 tB.join();
 } catch (Exception e) {
 // TODO: handle exception
 }
 return;
 }
 
 
 //红色方块线程
 public static class threadA extends Thread {
 
 public void run() {
 while (gaming) {
 
 while (waitA) {
  if (!gaming)return;
  System.out.print("");
 }
 
 try {
  sleep(sleeptime);
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 int distance = (int) (Math.random() * 100000) % 100;
 positionA += distance;
 if (positionA >= distanceAll) {
  positionA = distanceAll;
  unrepaint = false;
  gaming = false;
  winner = 'A';
 }
 unrepaint = false;
 waitA = true;
 waitB = false;
 }
 }
 }
 
 //蓝色方块线程
 public static class threadB extends Thread {
 
 public void run() {
 while (gaming) {
 
 while (waitB) {
  if (!gaming)return;
  System.out.print("");
 }
 
 try {
  sleep(sleeptime);
 } catch (InterruptedException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 int distance = (int) (Math.random() * 100000) % 100;
 positionB += distance;
 
 if (positionB >= distanceAll) {
  positionB = distanceAll;
  unrepaint = false;
  gaming = false;
  winner = 'B';
 }
 unrepaint = false;
 waitB = true;
 waitA = false;
 }
 }
 }
 
 //框架刷新线程
 public static class threadframe extends Thread {
 four3 jiemian = new four3();
 
 public void run() {
 while (gaming) {
 while (unrepaint) {
  if (!gaming)return;
  System.out.print("");
 }
 jiemian.repaint();
 unrepaint = true;
 }
 }
 }
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

相关文章

  • java实现excel导出合并单元格的步骤详解

    java实现excel导出合并单元格的步骤详解

    这篇文章主要介绍了java实现excel导出合并单元格,通过使用Apache POI库,我们可以方便地创建Excel文件、填充数据、合并单元格和导出Excel文件,需要的朋友可以参考下
    2023-04-04
  • Spring中@RequestParam、@RequestBody和@PathVariable的用法详解

    Spring中@RequestParam、@RequestBody和@PathVariable的用法详解

    这篇文章主要介绍了Spring中@RequestParam、@RequestBody和@PathVariable的用法详解,后端使用集合来接受参数,灵活性较好,如果url中没有对参数赋key值,后端在接收时,会根据参数值的类型附,赋一个初始key,需要的朋友可以参考下
    2024-01-01
  • java-RGB调色面板的实现(事件监听器之匿名内部类)

    java-RGB调色面板的实现(事件监听器之匿名内部类)

    这篇文章主要介绍了java-RGB调色面板的实现(事件监听器之匿名内部类),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详细解读Java编程中面向字符的输入流

    详细解读Java编程中面向字符的输入流

    这篇文章主要介绍了Java中面向字符的输入和输出流,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 浅谈Java中Spring Boot的优势

    浅谈Java中Spring Boot的优势

    在本篇文章中小编给大家分析了Java中Spring Boot的优势以及相关知识点内容,兴趣的朋友们可以学习参考下。
    2018-09-09
  • Java中集合和数组的排序方式小结

    Java中集合和数组的排序方式小结

    这篇文章主要介绍了Java中集合和数组的排序方式小结,本文讲解了对数字数组、字符数组排序以及集合序列的排序,需要的朋友可以参考下
    2015-01-01
  • Java调用打印机的2种方式举例(无驱/有驱)

    Java调用打印机的2种方式举例(无驱/有驱)

    我们平时使用某些软件或者在超市购物的时候都会发现可以使用打印机进行打印,这篇文章主要给大家介绍了关于Java调用打印机的2种方式,分别是无驱/有驱的相关资料,需要的朋友可以参考下
    2023-11-11
  • SpringBoot项目中分页插件PageHelper无效的问题及解决方法

    SpringBoot项目中分页插件PageHelper无效的问题及解决方法

    这篇文章主要介绍了解决SpringBoot项目中分页插件PageHelper无效的问题,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JVM垃圾回收算法的概念与分析

    JVM垃圾回收算法的概念与分析

    这篇文章主要给大家介绍了关于JVM垃圾回收算法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用JVM具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • java之多线程抢火车票的实现示例

    java之多线程抢火车票的实现示例

    生活中有很多多线程的案例,购票就是一个很常见的问题,本文主要介绍了java之多线程抢火车票的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论