文中案例为各位介绍了Java完成方块追逐赛小游戏的实际编码,供各位参照,主要内容如下所示
在一个用户界面上结构2个坐落于同一起跑线方块,起跑点坐落于页面靠左部位, 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;
}
}
}
}
以上便是这篇文章的所有内容,期待对我们的了解有一定的协助,也期待大伙儿多多的适用。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。