该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashMap;
import java.util.Map;
public class Main implements KeyListener{
private static final int SPEED =1;
MyWin myWin=new MyWin();
static Snake snk=new Snake();
static Apple app=Apple.getAnApple();
Map dirMap=new HashMap();
{
myWin.addKeyListener(this);
}
public void draw(Apple ap,Snake sn){
myWin.labList.get(ap.point.y*30+ap.point.x).setIcon(myWin.apple);
for(Point p:sn.snake){
myWin.labList.get(30*p.y+p.x).setIcon(myWin.icon2);
}
}
public void run(){
Point head=new Point();
Point tail=new Point();
dirMap.put(0, new Point(0, -1));
dirMap.put(2, new Point(0, 1));
dirMap.put(1, new Point(-1, 0));
dirMap.put(3, new Point(1, 0));
snk.init();
draw(app, snk);
try{
while(true){
head.setLocation(snk.snake.get(0));
tail.setLocation(snk.snake.get(snk.snake.size()-1));
switch (snk.forward) { //方向0-3 上0 下2 左1 右3
case 0:
head.y--;
break;
case 2:
head.y++;
break;
case 1:
head.x--;
break;
case 3:
head.x++;
break;
}
//结束判断
if (head.x<0||head.x>29||head.y<0||head.y>19) {
myWin.setTitle("贪吃蛇---结束");
return;
}
for (int i = 1; i < snk.snake.size(); i++) {
if(head.x==snk.snake.get(i).x&&head.y==snk.snake.get(i).y){
myWin.setTitle("贪吃蛇---结束");
return;
}
}
//吃苹果判定
if(head.x==app.point.x&&head.y==app.point.y){
app=Apple.getAnApple();
boolean flag=true;
while(flag){ //此循环保证生成的苹果不在蛇身上
flag=false;
for (int i = 1; i < snk.snake.size(); i++) {
if(app.point.x==snk.snake.get(i).x&&
app.point.y==snk.snake.get(i).y){
app=Apple.getAnApple();
flag=true;
break;
}
}
}
snk.snake.add(new Point());
snk.snake.get(snk.snake.size()-1).setLocation(tail);
draw(app, snk);
}else {
clearPoint(tail);
}
rebuild();
snk.snake.get(0).setLocation(head);
drawPoint(head);
Thread.sleep(SPEED);
}
}catch (InterruptedException e) {
e.printStackTrace();
}
}
private void rebuild() {
for(int i=snk.snake.size()-1;i>0;i--){
snk.snake.get(i).setLocation(snk.snake.get(i-1));
}
}
public void drawPoint(Point p){
myWin.labList.get(340*p.y+p.x).setIcon(myWin.icon2);
}
public void clearPoint(Point p){
myWin.labList.get(340*p.y+p.x).setIcon(myWin.icon1);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode=e.getKeyCode();
switch (keyCode) { //方向0-3 上0 下2 左1 右3
case 37:
if(snk.forward%2==0){
snk.forward=1;
}
break;
case 38:
if(snk.forward%2==1){
snk.forward=0;
}
break;
case 39:
if(snk.forward%2==0){
snk.forward=3;
}
break;
case 40:
if(snk.forward%2==1){
snk.forward=2;
}
break;
}
}
@Override
public void keyReleased(KeyEvent e) {
}
public static void main(String[] args) {
Main test=new Main();
test.run();
}
}