本文实例为大家分享了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编写图形化的界面,还是有些青涩..以后继续努力!!具体代码如下: //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编写一个点击数字计时小游戏,列入你在文本框中输入3,点击开始会生成一个3行3列的表格,表格数据为1-9随机排列,这时候从1开始点击,按顺序点到9,当按正确顺序点击完毕,会提示所用的时间,如果顺序没有按对,会提示游戏结束. 1.首先下载vue源码,下载地址http://cn.vuejs.org 2.jquery是在面向dom操作,而vue是面向数据操作的,所以使用vue最好不要去操作dom,尽量发挥出vue的独到之处,(如果使用过angularjs可能更容易理解) 3.建立一个普通的ht
本文实例讲述了C语言实现最简单的剪刀石头布小游戏.分享给大家供大家参考,具体如下: #include<stdio.h> #include<stdlib.h> #include<time.h> /*************/ * 剪刀 石头 布 * * 最简单小游戏 * /*************/ int main(void){ char gesture[3][10] = {"scissor","stone","clo
js消除图片小游戏,效果如下所示: 做了一个简易的消除图片的小游戏,没有连线的规则. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta
之前一直很想用javascript写一个日历,但是因为完全没有好的思路, 所以迟迟没有尝试.最近在网上刚好看到用javascript编写的简单日历的例子,代码量虽然不大, 但是我觉得很好地阐述了js日历的实现原理.自己也尝试着做了一下,收获蛮大,掌握了基本的实现原理后,再想增加更多的功能,完全就可以自由发挥了,先在这里分享一下吧,有兴趣的可以试试! 一.表格行数问题 既然要显示日期表格的话,首先得知道这个表格有多少行多少列,列数是已经确定的,从星期天(日历上第1列是星期天)到星期六一共7列.要解
本文实例讲述了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第一次实验,老师让做一个井字棋,电脑随机下棋. 然后就想能不能聪明一点,可以判断出走哪一步棋:然后只能做到不会输,还是不够聪明,只能呆板地堵住用户,smartRobot的第三个判断逻辑找不到最佳位置,赢得概率比较小:而且我没事干时,想玩玩这个小游戏找找成就感,但每次都会赢了机器人,所以删删改改了四五次,最后才成. 可以选择谁先开始,但startGame里的代码更加冗余了.看着就很乱,但没想到好的办法. smartRobot里的代码全部重写了,比原来更聪明一点了:下在四个角的位置时,能优先
本文实例为大家分享了js掷骰子小游戏的具体代码,供大家参考,具体内容如下 实现方法: 方法一:通过background-position.background-image.backg-repeat三个属性以及jquery animate()方法改变背景骰子图来实现图片切换. PS:调整background-position比较麻烦,由于背景是一张包含各个点数以及旋转时骰子的整图 方法二:设置定时调整css样式background-image. PS:实现简单,但是视觉效果不佳 <!DOCTYPE
鼠标拖动红色方块,就可以开始,不要让蓝色方块碰到你控制的红色方块 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实现的是一个接球打砖块的小游戏,需要导入pygame模块,有以下两条经验总结: 1.多父类的继承2.碰撞检测的数学模型 知识点稍后再说,我们先看看游戏的效果和实现: 一.游戏效果 二.游戏代码 #导入模块 import pygame from pygame.locals import * import sys,random,time,math class GameWindow(object): '''创建游戏窗口类''' def __init__(self,*args,**kw