如何用java实现一个贪吃蛇小游戏?

如何用java实现一个贪吃蛇小游戏?,第1张

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代码使其具有交互功能是可以的。实现贪吃蛇游戏如咐基本功能,屏幕上随机出现一个“食物”,称为豆子。玩家能利用上下左右键控制“蛇”的移动,“蛇”吃到“耐粗豆子”后“蛇”身体加长一节,得分增加,“蛇”昌橡镇碰到边界或蛇头与蛇身相撞,“蛇”死亡,游戏结束。


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

原文地址: http://outofmemory.cn/yw/12218218.html

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

发表评论

登录后才能评论

评论列表(0条)

保存