我试图制作一个回合制的蛇,但是我无法让它正常工作。我认为run()方法可能有问题,因为如果if()语句没有激活,它只会循环一次。如果我在if()语句之后添加任何内容,比如System.out.println()或repaint(),那么一切都会起作用。我认为这可能是因为如果if()语句没有激活,while循环根本不做任何事情,因此如果我不做任何事情就会自行打破。但我无法相信程序会违反其代码。所以我只是想知道真正的原因是什么。有任何想法吗? :)
编辑:没有真实条件的while()循环不是问题。我已经多次测试了,但我很肯定循环没有循环。不过,我可能错了,我不知道。 :|
我的代码:
public class Class extends Applet implements KeyListener, Runnable {
private static final long serialVersionUID = 1L;
int p = 5;
int x[] = new int[p];
int y[] = new int [p];
int e;
int n;
public Class() {
for (int i = 0; i < p; i++) {
x[i] = 10 + i;
y[i] = 10;
}
e = x[0];
n = y[0];
addKeyListener(this);
new Thread(this).start();
}
public static void main(String[] args) {
new Class();
}
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_UP) {
y[0]--;
}
if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x[0]++;
}
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
y[0]++;
}
if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x[0]--;
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
public void run() {
while (true) {
if (x[0] != e || y[0] != n) {
for (int i = p - 1; i > 1; i--) {
x[i] = x[i-1];
y[i] = y[i-1];
}
x[1] = e;
y[1] = n;
e = x[0];
n = y[0];
repaint();
}
}
}
public void paint(Graphics g) {
for (int i = 0; i < p; i++) {
g.drawString(x[0] + ", " + y[0], 10, 10);
g.fillRect(x[i] * 10, y[i] * 10, 10, 10);
}
}
}
请以非常简单的方式解释所有内容,因为我还不擅长编程(还)。良好的建议也非常感谢。 :)
答案 0 :(得分:0)
在更详细地查看代码后,很明显,如果您没有拨打repaint()
,则没有任何内容可以指示应用程序使用“{1}}或paint()
按键分配的新变量。在按键或update()
循环的每次迭代后调用repaint()
是否有害?否则屏幕将不会使用新变量进行更新(即使它们实际上随着每次按键而改变)