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;
  }
 }
 }

}

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

(0)

相关推荐

  • java编写的简单移动方块小游戏代码

    本文实例讲述了java编写的简单移动方块小游戏代码.分享给大家供大家参考,具体如下: 运行效果截图如下: 第一次用java编写图形化的界面,还是有些青涩..以后继续努力!!具体代码如下: //Little Box Game by AlexYui //Game.java By 1093710210@ HIT import javax.swing.*; import java.awt.event.*; import java.awt.geom.*; import java.awt.*; import

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

    本文实例为大家分享了Java实现方块赛跑小游戏的具体代码,供大家参考,具体内容如下 在一个图形界面上构造两个位于同一起跑线方块,起跑线位于界面靠左位置, A 方块先开始运动,向右移动 50 像素后停止,B 方块开始运动,向右移动 100 像素后停 止,A 方块继续向右运动 100 像素后停止,B 方块开始运动,如此循环接替执行,直至 某一个方块到达终点,界面显示该方块胜利信息. 1)  自定义一个threadA,ThreadB, ThreadFrame类(均继承自Thread). 2)  定义全

  • 利用kotlin实现一个打方块的小游戏实例教程

    前言 今天来做个打方块的小游戏,继续熟悉kotlin的语法,更多关于kotlin的语法大家可以参考这篇文章://www.jb51.net/article/114069.htm 看下要实现的效果图: 看着效果图好像挺难的样子,但理清思绪后,你会发现特别的简单,还是那句话,学习方法最重要 思路 1.构造界面 : 这个部分比较简单,根据控件的比例来画小球.挡板和击打的方块,所有击打的方块存储在一个集合里面,方块里面存储的信息有left.top.right.bottom位置信息和是否被击打过了的标志 2

  • java学习之猜数字小游戏

    今天主要学习了一些初级的设计,完成了这个猜数字的小游戏,其是也算不上是什么游戏,因为我答案都给出来了.当然也是想对代码更加熟练的操作,让自己能够得心应手. 这个小程序中让我花了点时间的主要是那个如何去重的问题,当时也是思考良久,后来才考虑到使用死循环让随机数产生直到不重复为止,其他感觉也还好. import java.util.Scanner; public class GuessingGames { public static void main(String[] args) { Scanne

  • java实战之飞机大战小游戏(源码加注释)

    一.工程文件 二.Main.java 主函数,实现类 package ui; //主函数实现 public class Main { public static void main(String[] args) { //创建窗体 GameFrame frame = new GameFrame(); //创建面板 GamePanel panel = new GamePanel(frame); //调用开始游戏的方法启动游戏 panel.action(); //将面板加入到窗体中 frame.add

  • Java实战之贪吃蛇小游戏(源码+注释)

    一.工程文件 二.Main.java package com.company; import javax.swing.*; public class Main { public static void main(String[] args) { //创建窗体对象 JFrame frame = new JFrame(); //创建窗体参数() frame.setBounds(10,10,900,720); //设置不允许更改大小 //frame.setResizable(false); //设置关

  • java实战之猜字小游戏

    一.题目描述 二.思路 语法基础:StringBuilder 类似列表,可以更改元素. package Practice; public class tt { public static void main(String[] args) { String str = "banana"; System.out.println(str.indexOf('z')); // -1 System.out.println(str.indexOf('a', 2)); // 3 StringBuild

  • 用python实现海龟赛跑小游戏

    目录 代码说明 输出图像 总结 废话不多说,直接开始拉~~~ 我们总共有 6 只海龟,颜色不同,它们以随机长度移动.首先,我们应该通过输入乌龟的颜色来押注乌龟.第一个越线的乌龟被宣布为获胜者.整个代码是通过导入海龟和随机库在 Python 中完成的. 代码说明 导入包 from turtle import Turtle, Screen import random random 函数用于生成距离(随机),由海龟移动.最好给出屏幕尺寸,因为我们很容易找到坐标并进行相应的更改. screen = Sc

  • Java实现可视化走迷宫小游戏的示例代码

    目录 效果图 数据层 视图层 控制层 效果图 数据层 本实例需要从 .txt 文件中读取迷宫并绘制,所以先来实现文件读取IO类 MazeData.java,该程序在构造函数运行时将外部文件读入,并完成迷宫各种参数的初始化,注意规定了外部 .txt 文件的第一行两个数字分别代表迷宫的行数和列数.此外还提供了各类接口来读取或操作私有数据. import java.io.BufferedInputStream; import java.io.File; import java.io.FileInput

  • Java Socket实现猜数字小游戏

    本文实例为大家分享了Java Socket实现猜数字游戏的具体代码,供大家参考,具体内容如下 运行截图 Server Client 完整代码 Server import java.io.IOException; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; import java.util.Scanner; public clas

  • Java实现简单的五子棋小游戏

    五子棋游戏(Java),供大家参考,具体内容如下 思路: 1.首先创建一个棋盘,建立一个二维数组,此文中为一个15*15的二维数组, 2.初始化棋盘,给棋盘上个点赋初始值为"+": 3.打印棋盘: 4.开始游戏 创建一个下棋的函数(playChess),黑方棋子为"●",白方棋子为"○",用奇偶数分别代表黑方和白方:判断输赢,有5个连续一样的棋子即为赢,游戏结束 五个棋子连续条件 本来需要判断8个方向的棋子,但由于棋子没有方向,头尾可调换,所以只

随机推荐