转载

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

}

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

时间:2020-07-20

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

使用vue编写一个点击数字计时小游戏

使用vue编写一个点击数字计时小游戏,列入你在文本框中输入3,点击开始会生成一个3行3列的表格,表格数据为1-9随机排列,这时候从1开始点击,按顺序点到9,当按正确顺序点击完毕,会提示所用的时间,如果顺序没有按对,会提示游戏结束. 1.首先下载vue源码,下载地址http://cn.vuejs.org 2.jquery是在面向dom操作,而vue是面向数据操作的,所以使用vue最好不要去操作dom,尽量发挥出vue的独到之处,(如果使用过angularjs可能更容易理解) 3.建立一个普通的ht

C语言实现最简单的剪刀石头布小游戏示例

本文实例讲述了C语言实现最简单的剪刀石头布小游戏.分享给大家供大家参考,具体如下: #include<stdio.h> #include<stdlib.h> #include<time.h> /*************/ * 剪刀 石头 布 * * 最简单小游戏 * /*************/ int main(void){ char gesture[3][10] = {"scissor","stone","clo

js消除图片小游戏代码

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

js消除图片小游戏,效果如下所示: 做了一个简易的消除图片的小游戏,没有连线的规则. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta

js编写当天简单日历效果【实现代码】

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

之前一直很想用javascript写一个日历,但是因为完全没有好的思路, 所以迟迟没有尝试.最近在网上刚好看到用javascript编写的简单日历的例子,代码量虽然不大, 但是我觉得很好地阐述了js日历的实现原理.自己也尝试着做了一下,收获蛮大,掌握了基本的实现原理后,再想增加更多的功能,完全就可以自由发挥了,先在这里分享一下吧,有兴趣的可以试试! 一.表格行数问题 既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列.要解

Java基于Swing实现的打猎射击游戏代码

本文实例讲述了Java基于Swing实现的打猎射击游戏代码.分享给大家供大家参考. 具体实现代码如下: 复制代码 代码如下: package Game; import java.awt.Graphics; import java.awt.Image; import javax.swing.JPanel; public class BackgroundPanel extends JPanel {         private static final long serialVersionUID

Java实现简单井字棋小游戏代码实例

Java第一次实验,老师让做一个井字棋,电脑随机下棋. 然后就想能不能聪明一点,可以判断出走哪一步棋:然后只能做到不会输,还是不够聪明,只能呆板地堵住用户,smartRobot的第三个判断逻辑找不到最佳位置,赢得概率比较小:而且我没事干时,想玩玩这个小游戏找找成就感,但每次都会赢了机器人,所以删删改改了四五次,最后才成. 可以选择谁先开始,但startGame里的代码更加冗余了.看着就很乱,但没想到好的办法. smartRobot里的代码全部重写了,比原来更聪明一点了:下在四个角的位置时,能优先

js实现简单掷骰子小游戏

本文实例为大家分享了js掷骰子小游戏的具体代码,供大家参考,具体内容如下 实现方法: 方法一:通过background-position.background-image.backg-repeat三个属性以及jquery animate()方法改变背景骰子图来实现图片切换. PS:调整background-position比较麻烦,由于背景是一张包含各个点数以及旋转时骰子的整图 方法二:设置定时调整css样式background-image. PS:实现简单,但是视觉效果不佳 <!DOCTYPE

js方块躲避游戏代码

鼠标拖动红色方块,就可以开始,不要让蓝色方块碰到你控制的红色方块 www.jb51.net我们 Escapa!红方块躲避游戏 isNS4 = (document.layers) ? true : false; isIE4 = (document.all && !document.getElementById) ? true : false; isIE5 = (document.all && document.getElementById) ? true : false; i

Python实现打砖块小游戏代码实例

这次用Python实现的是一个接球打砖块的小游戏,需要导入pygame模块,有以下两条经验总结: 1.多父类的继承2.碰撞检测的数学模型 知识点稍后再说,我们先看看游戏的效果和实现: 一.游戏效果 二.游戏代码 #导入模块 import pygame from pygame.locals import * import sys,random,time,math class GameWindow(object): '''创建游戏窗口类''' def __init__(self,*args,**kw

原文  https://www.zhangshengrong.com/p/3mNmd8O0aj/
正文到此结束
Loading...