老师给的任务,不会写,马上就要交了,求救,求java代码#(泪) #(泪) 弹球游戏,1,图形用户

2025-06-22 11:46:54
推荐回答(6个)
回答1:

这个问题主要的几点就是:移动与边界判断,小球与木板移动,这个通过修改座标来实现,边界判断,这个也通过座标值判断;移动的板跟随鼠标移动,通过MouseMotionListener监听鼠标移动,再修改木板座标实现;小球移动,设置2个方向,水平与垂直,>0,座标值增加(向右或向下移动),<0座标减小(向上或向左移动),到达边界后,修改方向值,使其向反方向移动。
因为,有大神先贴了代码,就不献丑了。如果需要代码,可以追问我。

回答2:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class CopyOfBallCrash implements Runnable {
public static void main(final String[] args) {
new Thread(new CopyOfBallCrash()).start();
}

private final int width = 400;
private final int height = 700;
private int mouse_X, mouse_Y;
private final BufferedImage offscreen = new BufferedImage(width, height,
BufferedImage.TYPE_4BYTE_ABGR);
private final JPanel panel = new JPanel();
private final Shape ball = new Shape(100, 100, 1, 1, 20);
private final Shape rect = new Shape(0, 100, 20);

public CopyOfBallCrash() {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
panel.setPreferredSize(new Dimension(width, height));
ball.setBounds(width, height);
rect.setBounds(width, height);
frame.setContentPane(panel);
panel.addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseDragged(final MouseEvent e) {}

@Override
public void mouseMoved(final MouseEvent e) {
mouse_X = e.getX();
mouse_Y = e.getY();
}
});
frame.pack();
frame.setVisible(true);
}

public void paint(final Graphics g) {
final Graphics2D g2d = offscreen.createGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.fillRect(0, 0, width, height);
g2d.setColor(Color.blue);
rect.drawRect(g2d, mouse_X);
g2d.setColor(Color.red);
ball.drawOval(g2d, rect);
if (Shape.isLose) g2d.drawString("你输了!!!", 100, 300);
g2d.dispose();
g.drawImage(offscreen, 0, 0, null);
}

@Override
public void run() {
while (true)
paint(panel.getGraphics());
}
}

class Shape {
public int width, height;
public int x, y, vx, vy, r, w, h;
public static boolean isLose;

public Shape(final int x, final int y, final int vx, final int vy, final int r) {
super();
this.x = x;
this.y = y;
this.vx = vx;
this.vy = vy;
this.r = r;
}

public Shape(final int x, final int w, final int h) {
super();
this.x = x;
this.w = w;
this.h = h;
}

public final void setBounds(final int width, final int height) {
this.width = width;
this.height = height;
}

public final void drawOval(final Graphics2D g2d, final Shape shape) {
if (y + h >= height) {
isLose = true;
return;
}
if (x + vx <= 0 || x + vx + w >= width) vx = -vx;
if (y + vy <= 0) vy = -vy;
if (isCrashOutside(shape.x, shape.y, shape.w, shape.h) && y + w >= shape.y)
vy = -vy;
x += vx;
y += vy;
g2d.fillOval(x, y, r, r);
}

public final void drawRect(final Graphics2D g2d, final int mouseX) {
y = height - h;
if (x + w < width && x < mouseX) x++;
if (x > 0 && x > mouseX) x--;
g2d.fillRect(x, y, w, h);
}

public final boolean isCrashOutside(final int x, final int y, final int w,
final int h) {
return (this.x > x ? this.x <= w + x : x <= r + this.x)
&& (this.y > y ? this.y <= h + y : y <= r + this.y);
}
}

回答3:

走好。。。。。

回答4:

..........................

回答5:

哈喽

回答6:

一路走好不送