看视频学的贪吃蛇动不了,求帮忙看看哪里出错了

luluxiu_ 2018-03-15 05:28:21
package day1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Point;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.LinkedList;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class Snake extends JFrame {
private Point point=new Point();
private LinkedList<Point> list=new LinkedList();
private int key=37;
public void init() {
point.setLocation(100, 100);
list.add(new Point(300, 300));//Ctrl+alt+下
list.add(new Point(310, 300));
list.add(new Point(320, 300));
list.add(new Point(330, 300));
list.add(new Point(340, 300));
list.add(new Point(350, 300));
list.add(new Point(360, 300));
new Thread(new MoveTHREAD()).start();
}


@Override
public void paint(Graphics g) {
Image img=createImage(500, 500);
Graphics g2=img.getGraphics();
g2.setColor(Color.WHITE);
g2.fillRect(0, 0, 500, 500);
g2.translate(50, 50);
g2.setColor(Color.RED);
g2.drawRect(0, 0, 400, 400);
g2.setColor(Color.GREEN);
/* for(int i=0;i<list.size();i++) {
g2.fillRect(list.get(i).x, list.get(i).y, 10, 10);
}
*/
for(Point p:list) {
g2.fillRect(p.x, p.y, 10, 10);
}
g2.setColor(Color.RED);

g2.fillRect(point.x, point.y, 10, 10);
g.drawImage(img, 0, 0, 500, 500, this);

}
public Snake() {
this.setTitle("贪吃蛇");//this表示当前对象
this.setResizable(false);//不能改变大小
this.setSize(500, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);//居中显示
this.setVisible(true);//可见
this.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if( e.getKeyCode()>=37&&e.getKeyCode()<=40)
{
if(Math.abs(key-e.getKeyCode())!=2)
{
key=e.getKeyCode();
}
}


}
});
init();
}
class MoveTHREAD implements Runnable {
/* (non-Javadoc)
* @see java.lang.Runnable#run()
*/
@Override
public void run() {
while(true) {
try {
Thread.sleep(150);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Point p=list.getFirst().getLocation();
switch (key) {
case 37:
p.x=p.x-10;
break;
case 38:
p.x=p.y-10;
break;
case 39:
p.x=p.x+10;
break;
case 40:
p.x=p.y+10;
break;

}
if(p.x<0||p.x>390||p.y<0||p.y>390||list.contains(p)) {
JOptionPane.showMessageDialog(null,"游戏结束");
break;
}
list.addFirst(p);
if(p.equals(point)) {
int x=(int)(Math.random()*40)*10;
int y=(int)(Math.random()*40)*10;
point.setLocation(x, y);
}else {
list.removeLast();
}
Snake.this.repaint();
}

}

// TODO Auto-generated method stub

}
}




public static void main(String[] args) {
new Snake();
}

}
...全文
670 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
G.Jagger 2018-03-16
  • 打赏
  • 举报
回复
断点调试了一下,发现你的Snake线程无限运行sleep方法,你的运行细节就放在catch里的?

58,452

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧