由于此地板涉嫌违规,因此它将折叠在系统中以隐藏此地板并显示此地板
import javax.swing.*;
import java.awt.*;
import Java.awt.event.key adapter;
import java.awt.event.KeyEvent;
import java.util.LinkedList; //*
公共类snake game {
静态文件int width=20,HEIGHT=5;
staticchartmdgktmdgkmap=new char [ height ] [ width ];
publicstaticvoidmain (stringtmdgkargs ) {
snakeGame.initBackground (; //初始化背景,放入虫子
snakeLine.initSnake (; //初始化蛇
snake game.putsnakeinmap (snake line );
snakeGame.show (; //显示一下
控制. set bounds (900,500,100,100 );
控制. set resizable (假;
控制. set visible (true;
控制. addkey监听器(new key adapter ) )。
@Override
公共语音密钥预置(密钥事件e ) {
sitch(e.getkeycode ) ) ) ) )。
case KeyEvent.VK_UP:
snake line.direction=snake line.up;
布雷克;
case KeyEvent.VK_DOWN:
snake line.direction=snake line.down;
布雷克;
case KeyEvent.VK_LEFT:
snake line.direction=snake line.left;
布雷克;
case KeyEvent.VK_RIGHT:
snake line.direction=snake line.right;
布雷克;
默认:
布雷克;
}
int result=snakeLine.move (;
if(result==-1 ) {
snake game.putgameoverinmap (snake line.snake points.size ) );
snakeGame.show (;
}
snake game.putsnakeinmap (snake line );
snakeGame.show (;
}
);
}
//用文字画背景
私密void init后台(
for(intI=0; i HEIGHT; I () /外围控制线
for(intj=0; j WIDTH; j ()//内循环控制各行的第几个
this.map [ I ] [ j ]=(j==0| (j==width-1 )|I==0||(I==height-1 ) )? ' O' : ';
}
}
}
//显示背景
公共void show () }
int height=map.length;
int width=map[0].length;
for(intI=0; i height; I ) {
for(intj=0; j width; j ) {
}
}
}
//添加到地图
voidputsnakeinmap (snakelinesnakeline ) {
Point p;
this.initBackground (;
map [ snake line.food.y ] [ snake line.food.x ]=snake line.worm;
for(intI=0; i snakeLine.snakePoints.size (; I ) {
p=snakeline.snakepoints.get(I;
if (p.y0p.y height-1p.x0p.x width-1 ) {
map[p.y][p.x]=(i==0)? snake line.head : snake line.body;
} else {
putgameoverinmap (snake line.snake points.size );
}
}
}
语音识别器(int points ) {
chartmdgkgameover=(game over score : ((points-3 ) *10 ).toCharArray ); //这里有18个字,吞噬蛇的地图宽度WIDTH不能小于20
for(intI=0; i gameOver.length; I ) {
map [ height/2-1 ] [ I ] [ width-game over.length ]/2 ]=game over [ I ];
}
show (;
}
}class SnakeLine {
静态final int right=0,DOWN=1,LEFT=2,UP=3;
静态文件头=',body='0',worm='* '; //头部和身体的表示
int direction;
staticpointfood=newpoint((int ) ) Math.random ) ) * (SnakeGame.WIDTH - 2 ) ) 1,(int ) ) Math.random ) )
私密void新福克斯
int count=0;
food=newpoint((int ) Math.random ) * ) * (SnakeGame.WIDTH - 2 ) 1,() int ) (Math.random ) * (SnakeGame )
. HEIGHT - 2 ()1);
if(snakepoints.contains(food ) ) if ) count10 ) {System.out.println (你赢了,小虫子无处可藏) ); 返回; }else {count; 新福克斯(; }
}
void initSnake (
point head=new point (snake game.width/2,SnakeGame.HEIGHT/2 );
snakepoints.addfirst(head; //头
snakepoints.addlast(newpoint ) head.x-1,head.y );
snakepoints.addlast(newpoint ) head.x-2,head.y );
}
int move ()。
Point head=snakePoints.getFirst (;
点新头=null;
交换机(方向) {
case RIGHT:
新头=新点(head.y,head.y );
布雷克;
case LEFT:
新头=新点(head.x-1,head.y );
布雷克;
case DOWN:
newhead=newpoint(head.x,head.y 1);
布雷克;
case UP:
新头=新点(head.x,head.y - 1 );
布雷克;
}
if (snake points.contains (new head ) )。
返回- 1; //咬住了自己
}
snakepoints.addfirst(newhead );
我吃了if(newhead.equals(food ) )//食物
新福克斯(;
返回2;
}
snakePoints.removeLast (;
返回1;
}
}