高手帮忙解释一下JAVA 贪食蛇游戏中蛇的代码

高手帮忙解释一下JAVA 贪食蛇游戏中蛇的代码,第1张

public

class

Snake

implements

Data//蛇类实现了data接口

{

public

Snake()

{

array.add(new

Point(10,

10))//

array.add(new

Point(10,

11))//

array.add(new

Point(10,

12))//

array.add(new

Point(10,

13))//

array.add(new

Point(10,

14))//这五句话是构造一个蛇,这条蛇由五个坐标点连成

currentFlag

=UPFLAG

//当前的运动方向设为向上

lifeFlag

=

true//当前蛇的生命设为活着

}

public

void

move()//蛇的运动函数

{

tair

=

(Point)array.get(array.size()

-

1)//得到蛇的尾巴

int

len

=

array.size()

-

2

for(int

i

=

len

i

>=

0

i--)//这个for循环把蛇的每一个点都坐标偏移即运动了

{

Point

leftPoint

=

(Point)array.get(i)

Point

rightPoint

=

(Point)array.get(i

+

1)

rightPoint.x

=

leftPoint.x

rightPoint.y

=

leftPoint.y//每一个右边的点等于其左边的点,像蛇那样的一缩一张的运动

}

}

public

void

moveHeadLeft()//把蛇的头部转向左边

{

if(currentFlag

==

RIGHTFLAG

||

currentFlag

==

LEFTFLAG)//如果运动方向设为向左或向右则不执行

{

return

}

move()

Point

point

=

(Point)(array.get(0))

//得到蛇头

point.x

=

point.x

-

1//蛇头部横坐标减一,纵坐标不变

point.y

=

point.y

if(point.x

<

LEFT)//如果蛇头部不能再左,就不执行

{

lifeFlag

=

false

}

currentFlag

=

LEFTFLAG//将蛇运动方向改为左

}

import java.awt.*

import javax.swing.*

import java.awt.event.*

import java.util.*

public class SnakeGame extends JFrame implements KeyListener{

private int stat=1,direction=0,bodylen=6,headx=7,heady=8,

tailx=1,taily=8,tail,foodx,foody,food//初始化定义变量

public final int EAST=1,WEST=2,SOUTH=3,NORTH=4//方向常量

int [][] fillblock=new int [20][20]//定义蛇身所占位置

public SnakeGame() {//构造函数

super("贪吃蛇")

setSize(510,510)

setVisible(true)//设定窗口属性

addKeyListener(this)//添加监听

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)

for(int i=1i<=7i++) fillblock[i][8]=EAST//初始化蛇身属性

direction=EAST//方向初始化的设置

FoodLocate()//定位食物

while (stat==1){

fillblock[headx][heady]=direction

switch(direction){

case 1:headx++break

case 2:headx--break

case 3:heady++break

case 4:heady--break

}//蛇头的前进

if(heady>19||headx>19||tailx>19||taily>19||heady<0||headx<0||tailx<0||taily<0||fillblock[headx][heady]!=0){

stat=0

break

} //判断游戏是否结束

try{

Thread.sleep(150)}

catch(InterruptedException e){}//延迟

fillblock[headx][heady]=direction

if(headx==foodx&&heady==foody){//吃到食物

FoodLocate()

food=2

try{

Thread.sleep(100)}

catch(InterruptedException e){}//延迟

}

if(food!=0)food--

else{tail=fillblock[tailx][taily]

fillblock[tailx][taily]=0//蛇尾的消除

switch(tail){

case 1:tailx++break

case 2:tailx--break

case 3:taily++break

case 4:taily--break

}//蛇尾的前进

}

repaint()

}

if(stat==0)

JOptionPane.showMessageDialog(null,"GAME OVER","Game Over",JOptionPane.INFORMATION_MESSAGE)

}

public void keyPressed(KeyEvent e) {//按键响应

int keyCode=e.getKeyCode()

if(stat==1) switch(keyCode){

case KeyEvent.VK_UP:if(direction!=SOUTH) direction=NORTHbreak

case KeyEvent.VK_DOWN:if(direction!=NORTH)direction=SOUTHbreak

case KeyEvent.VK_LEFT:if(direction!=EAST)direction=WESTbreak

case KeyEvent.VK_RIGHT:if (direction!=WEST)direction=EASTbreak

}

}

public void keyReleased(KeyEvent e){}//空函数

public void keyTyped(KeyEvent e){} //空函数

public void FoodLocate(){//定位食物坐标

do{

Random r=new Random()

foodx=r.nextInt(20)

foody=r.nextInt(20)

}while (fillblock[foodx][foody]!=0)

}

public void paint(Graphics g){//画图

super.paint(g)

g.setColor(Color.BLUE)

for(int i=0i<20i++)

for(int j=0j<20j++)

if (fillblock[i][j]!=0)

g.fillRect(25*i+5,25*j+5,24,24)

g.setColor(Color.RED)

g.fillRect(foodx*25+5,foody*25+5,24,24)

}

public static void main(String[] args) {//主程序

SnakeGame application=new SnakeGame()

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11338398.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存