1、设计游戏,首先就要设计界面。首先看一下我设计的一个界面。界面分为左边的游戏区与右边的控制区。游戏区包含“得分信息”和贪吃蛇的游戏区,盯衫右边控制区有“开始”“暂停”“停止”按钮,等级选择单选框以及游戏排行榜。
2、所以我们需要定义swing组件,并在类初始化时初始化这些组件,添加组件。因为后面设计游戏的时候,我们要确切知道游戏区的大小,所以这里设置游戏区固定大小值。本来想用布局来更好的管理,但作者对布局也掌握不够,所以就先设置固定大小吧。
3、定义我们的游戏。贪吃蛇游戏其实就是包含很多细小网格,然后蛇在网格中移动。蛇由一连串的网格组成,为了视觉效果,蛇身用蓝色标记,食物用红色标记,背景白色。如第一张图片所示。所以,我们需要定义二维数组,保存网格凯逗腔信息,保存蛇身和食物的位置信息等。初始化时,还需要添加键盘事件控制上下左右移动。
4、食物的位置信息是二维的,所以我简单定义了一个类用来保存二维信息。
5、接着就是实现游戏的功能了。开始,暂停,停止按钮添加事件控制游戏开始。等级按钮定义游戏难度等。
6、开始游戏后,我们指举定义一个定时器。蛇身按照指定的方向移动,方向是通过初始化时添加的键盘事件,键盘的上下左右按钮来控制。蛇身是连续的位置信息,保存到队列中,所以蛇身的移动就是队首增加一个位置,队尾减少位置,然后重新绘画游戏区就可以了。
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()
}
}
有。贪吃蛇自行编辑java代码使其具有交互功能是可以的。实现贪吃蛇游戏如咐基本功能,屏幕上随机出现一个“食物”,称为豆子。玩家能利用上下左右键控制“蛇”的移动,“蛇”吃到“耐粗豆子”后“蛇”身体加长一节,得分增加,“蛇”昌橡镇碰到边界或蛇头与蛇身相撞,“蛇”死亡,游戏结束。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)