
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()
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)