请编程高手进!请详细回答!深谢!

来源:百度知道 编辑:UC知道 时间:2024/05/25 13:07:29
import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;
import javax.swing.*;

class Snake extends JFrame
{
public static void main(String args[])
{
new Snake();
}
Snake()
{
bb p = new bb();
this.add(p);

this.setSize(500,450);
this.setVisible(true);
this.addKeyListener(p);
}

}
class bb extends JPanel implements Runnable, KeyListener
{
Point q = new Point();
Point body[] = new Point[50];
int nums = 4;
int director;
int c=100;

bb()
{
for (int i = 0; i<50; i++)
{
body[i] = new Point(0,0);
}
q.x = (int)(Math.random()*35);
q.y = (int)(Math.random()*35);

Thread t = new Thread(this);
t.start();
}

public void paintComponent(Graphics g)//
{
super.paintComponent(g);
g.fillRect(q.x*10, q.y*10, 9,

问题1:为什么线程的等待会决定蛇的运动或不运动 还有线程的速度问题
*****
因为该线程被启动后便马上进入一个不断重复一组操作的死循环。
该组操作包括小量地更改蛇的位置、更新整个游戏画面(主要目的是反映蛇的新位置)、
和空等一小段时间。
那意味着线程空等时间的长度与蛇运动的速度成反比。
蛇的“运动”是一种动画效果(http://zh.wikipedia.org/wiki/%E5%8A%A8%E7%94%BB)。

你大可改变空等时间然后观察效果。 “int c=100;”就是设定游戏开始时的空等时间的语句。

问题2:repaint();这句话到底是怎么回事是重画了什么
*****
重画整个游戏画面。

问题3;for (int i = nums - 1; i>0; i--)
{
    body[i].x = body[i - 1].x;
    body[i].y = body[i - 1].y;
}
这段话是什么意思
*****
把蛇尾往前推一“步”。蛇尾的定义是蛇头以外的部分。 这程序的蛇头是 body[0]。
nums 代表蛇的长度。 nums 的初值是 4。 你可以用这个小值去了解这段循环推进蛇尾的具体步骤。

问题4:if(i == e.VK_RIGHT && director!=1)这句判断的后半段director!=1是怎么回事
*****
加入后半段的目的是为了避免蛇直接往后爬(爬到自己身上)。
director 代表蛇当下爬行的方向。 ( 0 == 右, 1 == 左, 2 == 下, 3 == 上 )。

问题5:this.addKeyListener(p);//注