如果要在 Java 的线程小球碰撞游戏中制作结束画面,需要实现以下步骤:
创新互联建站是一家专业提供南县企业网站建设,专注与成都网站设计、网站制作、html5、小程序制作等业务。10年已为南县众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
在程序中创建一个画布,用于绘制结束画面。
在游戏结束时,使用画布的 drawString 方法在画布上绘制文字,表示游戏结束。
使用画布的 repaint 方法刷新画布,让结束画面显示在屏幕上。
例如,可以这样实现结束画面:
// 创建画布
Canvas canvas = new Canvas();
// 绘制文字
canvas.drawString("Game Over", 100, 100);
// 刷新画布
canvas.repaint();
在这里,我们创建了一个画布,并在画布上绘制了文字,表示游戏结束。最后,我们使用了 repaint 方法,让结束画面显示在屏幕上。
此外,如果需要在结束画面上显示更多的信息,比如游戏得分、玩家名字等,也可以使用类似的方法来实现。例如,可以这样显示游戏得分:
// 绘制文字
canvas.drawString("Game Over", 100, 100);
canvas.drawString("Score: " + score, 100, 120);
// 刷新画布
canvas.repaint();
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class RunningBallDemo extends JFrame {
public static void main(String args[]) {
new RunningBallDemo();
}
public RunningBallDemo() {
Ball ballPanel = new Ball(5, 5);
getContentPane().add(ballPanel);
setBackground(Color.BLACK);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setSize(350, 350);
setVisible(true);
Thread thread1 = new Thread(ballPanel);
thread1.start();
}
}
class Ball extends JPanel implements Runnable {
int rgb = 0;
Color color;
int x, y;
int dx = 5, dy = 5;
Ball(int x, int y) {
this.x = x;
this.y = y;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
setBackground(Color.BLACK);
g.setColor(color);
g.fillOval(x, y, 50, 50);
}
public void run() {
while (true) {
if (x = 0) {
dx = 5;
updateBallColor();
} else if ((x + 50) = getWidth()) {
dx = -5;
updateBallColor();
}
if (y = 0) {
dy = 5;
updateBallColor();
} else if ((y + 50) = getHeight()) {
dy = -5;
updateBallColor();
}
x = x + dx;
y = y + dy;
repaint();
try {
Thread.sleep(25);
} catch (InterruptedException e) {
;
}
}
}
public void updateBallColor() {
rgb = new Random().nextInt();
color = new Color(rgb);
}
}
import java.awt.*;
import java.applet.*;
public class test extends Applet implements Runnable {
private static final long serialVersionUID = 1L;
int X, Y, moveX, moveY, width, height;
Thread newThread;
Image OffScreen;
Graphics drawOffscreen;
public void init() {
X = 0;
Y = 0;
moveX = 10; //水平移动的速度
moveY = 15; //垂直移动速度
width = getSize().width ; //窗口的宽度
System.out.println("width = " + width);
height = getSize().height ;
System.out.println("height = " + height);
OffScreen = createImage(width, height); //创建背景
drawOffscreen = OffScreen.getGraphics();
}
public void start()
{
newThread = new Thread(this);
newThread.start();
}
public void stop()
{
newThread = null;
}
public void paint(Graphics g)
{
drawOffscreen.setColor(Color.black); // 设置背景色
drawOffscreen.fillRect(0, 0, width, height); // 填充所在区域
drawOffscreen.setColor(Color.white); // 设置球的颜色
drawOffscreen.fillOval(X, Y, 15, 15); //画球
g.drawImage(OffScreen, 0, 0, this); // 画背景
}
public void update(Graphics g)
{
paint(g);
}
public void run()
{
while (newThread != null)
{
repaint();
try
{
Thread.sleep(50);
}
catch (InterruptedException E) {
}
X = X + moveX;
Y = Y + moveY;
if (X = (width - 15))
{
X = width - 15;
moveX = -moveX;
}
if (X = 0)
{
X = 0;
moveX = -moveX;
}
if (Y = (height - 15))
{
Y = height - 15;
moveY = -moveY;
}
if (Y = 0)
{
Y = 0;
moveY = -moveY;
}
}
}
}
下面那个方法是想返回什么?如果是当前Tank与其他任意Tank有碰撞就返回
,可以写成
public boolean collidesWithTanks (ListTank tanks) {
tanks.remove(this);//这里删除当前对象,下面就不用老判断了
for (int i = 0; i tanks.size(); i++) {
Tank tank =tanks.get(i);
//if (this != tank ) {
if(this.collidesWithTank(tank))
return true; //如果和任意一个有碰撞就返回true
}
return false;
}