1、本代码主要功能为实现贪吃蛇游戏,图形用户界面界面做到尽量简洁和原游戏相仿。目前版本包含计分,统计最高分,长度自动缩短计时功能。

2、运行时请把Java。语言(一种计算机语言,尤用于创建网站)文件放入默认包即可运行。

答文件位置

b)进入游戏

c)游戏进行中

Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)实现代码

版权所有3导入Java。awt。*;

导入Java。awt。事件。*;

导入静态Java。郎。字符串。格式;导入Java。util。*;

导入Java。util。列表;导入javax。挥棒。*;

Publicclass扩展JPanel实现可运行{

枚举目录{

向上(0,-1),向右(1,0),向下(0,1),向左(-1,0);

Dir(intx,inty){ this。x=xthis.y=y

}

finalintx,y;

}

静态最终随机rand=new Random();

staticfinalintWALL=-1;

staticfinalintMAX _ ENERGY=1500

volatilebooleangameOver=true

线程gameThreadintscore,hiScoreintnRows=44

intnCols=64

直接能源

int[][]网格;

列举《点蛇,请客;

字体小字体

公共蛇(){

setPreferredSize(新维度(640,440));

设置背景(颜色。白色);

设置字体(新字体(“SansSerif”,字体。粗体,48));

setFocusable(true);

smallFont=getFont().衍生字体(字体。粗体,18);

初始化网格();

addMouseListener(新的MouseAdapter() {

@覆盖

按下公共void鼠标(鼠标事件e){

if (gameOver) {

开始新游戏();

repaint();

}

}

});

addkey侦听器(新密钥适配器(){

@覆盖

公共无效按键(按键事件e) {

switch (e.getKeyCode()) {

案例关键事件VK_UP:如果(dir!=dir。向下)dir=dir。向上;打破;

案例关键事件VK _左:如果(dir!=dir。右)dir=dir。左;打破;

案例关键事件VK _右:如果(dir!=dir。左)dir=dir。对;打破;

案例关键事件VK _唐:如果(dir!=dir。向上)dir=dir。向下;打破;

}

repaint();

}

});

}

void start new game(){ game over=false;

stop();

初始化网格();

treats=新链表();

dir=左方向

能量=最大能量

if(score hiScore)他的核心=score得分=0;

snake=new ArrayList();for(intx=0;x7;x ) snake.add(新点(nCols/2 x,nRows/2));

do添加treat();而(请客。isempty());

(游戏线程=新线程(这个)).start();

}

无效停止(){

如果(gameThread!=null) {

thread tmp=gameThreadgameThread=nulltmp。中断();

}

}

void init grid(){ grid=new int[nRows][nCols];for(intr=0;

r”n行;r){ for(intc=0;cif(c==0 | | c==nCols-1 | | r==0 | | r==nRows-1)grid[r][c]=WALL;

}

}

}

@覆盖

publicvoid run() {

while(线程。当前线程()==游戏线程){ try { thread。睡觉(数学。最大值(75分,25));

} catch (InterruptedException e) {

返回;

} if(能量消耗()| |击中墙壁()| |击中蛇()){

游戏结束();

}否则{

if(eatsTreat()){ score;能量=最大能量

长蛇();

}

moveSnake();

添加treat();

}

repaint();

}

}布尔使用的能量(){ energy-=10;

返回能量=0;

}

布尔hitsWall() {

点头=蛇。get(0);

int nextcol=head。x方向。x;

int nextrow=head。y方向。y;

return grid[next row][next col]==WALL;

}

布尔hitsSnake() {

点头=蛇。get(0);

int nextcol=head。x方向。x;

int nextrow=head。y方向。y;

for(点p:snake)if(p . x==nextcolp。y==nextRow)返回true返回假的;

}

布尔eatsTreat() {

点头=蛇。get(0);

int nextcol=head。x方向。x;int nextrow=head。y方向。y;for(点p:treats)if(p . x==nextcolp。y==nextRow){回请。移除(p);

}

返回假的;

} void gameOver(){ gameOver=true;

stop();

} void moveSnake() {

for(inti=snake。size()-1;I 0;我- ) {

点P1=蛇。get(I-1);

点p2=蛇。get(I);p2。x=P1。x;

p2。x=P1。x;p2。y=P1。y;

}

点头=蛇。get(0);头。x=方向。x;头。y=方向。y;

}

void growSnake() {

点尾=蛇。获取(蛇。size()-1);intx=tail。x方向。x;inty=tail。y方向。y;snake.add(新点(x,y));

} void add treat(){ if(treats。size()《3》{

如果(兰特。nextint(10)==0){//1 in 10 if(rand。nextint(4)!=0) { //3 in 4 intx,y;while (true) {

x=兰特。nextint(nCols);

y=兰特。nextint(nRows);if (grid[y][x]!=0)继续;

点p=新点(x,y);

如果(蛇。包含(p)| | treats。包含(p))继续;

款待。添加(p);打破;

}

}

else if(请客。大小()1)对待。删除(0);

}

}

}

void绘制网格(图形2d g){ g .设置颜色(颜色。浅灰色);

for(intr=0;r}

}

}

void绘制蛇(图形2d g){ g .设置颜色(颜色。蓝色);对于(点p : snake) g.fillRect(p.x * 10,p.y * 10,10,10);

g.setColor(能量500?颜色。红色:颜色。橙色);

点头=蛇。get(0);

g.fillRect(head.x * 10,head.y * 10,10,10);

}

void drawTreats(Graphics2D g) {

g。设置颜色(颜色。绿色);对于(点p : treats) g.fillRect(p.x * 10,p.y * 10,10,10);}

void draw开始屏幕(图形2d g){ g .设置颜色(颜色。蓝色);

g。设置字体(get font());

g。拉带("蛇",240,190);

g。设置颜色(颜色。橙色);g .设置字体(小字体);

g .拉绳((点击开始)",250,240);

}

void draw score(graphics 2d g){ inth=getHeight();

g。设置字体(小字体);

g。设置颜色(get foreground());

string s=format("hiscore % d score % d",his core,score);

g。拉带(s,30,h-30);

g.drawString(format("energy %d",energy),getWidth() - 150,h-30);

}

@覆盖

公共空油漆组件(图形gg){ super。油漆成分(gg);

图形2d g=(图形2d)gg;

g。setrenderinghint(呈现提示.钥匙_抗锯齿,渲染提示VALUE _ ANTIALIAS _ ON);

绘图网格(克);

if (gameOver) {

绘制开始屏幕(g);

}否则{

画蛇(g);

抽奖活动(克);

抽奖分数(克);

}

}

publicstaticvoid main(String[]args){

摇摆公用事业。稍后调用(()-{

JFrame f=new JFrame();

f。setdefaultcloseoperation(JFrame .EXIT _ ON _ CLOSE);

塞蒂特莱(《蛇》);

f。setresizable(false);

f.add(new Snake(),BorderLayout .中心);

f。pack();

f。setlocationrelativeto(null);

f。设置可见(真);

});

}

}