首先给出代码下载地址(含素材):https://share.weiyun.com/8hkvy1Ja
目录
1.实现效果:

2.游戏玩法
该游戏用上下左右控制蛇的方向,寻找吃的东西,每吃一口就能得到一定的积分,而且蛇的身子会越吃越长,身子越长玩的难度就越大,不能碰墙,不能咬到自己的身体,更不能咬自己的尾巴,等到了一定的分数,就能过关,然后继续玩下一关。这次我们以一关的实现为例,关卡控制交给读者自行添加。
3.需求分析
- 方向控制
首先我们需要实现的是通过按键实现控制蛇的运动方向,需要注意的有两点:
1.蛇运动的时候不能向上一个状态的反方向运动,例如,原先向右,下一次改变的方向不能为左。
2.运动的时候如果按了一个方向键,再下一次按键之前将维持原先的方向运动。
2.如果蛇头和身体的图片不一样,那么蛇头要随着运动方向进行旋转。
- 蛇的绘制
蛇我这里分为了蛇头和蛇身两部分,当然你也可以加蛇尾。这里以蛇头和蛇身两部分为例:
蛇头游戏开始就已经存在,之后吃到一个食物都会使蛇身长度加一。蛇身的每一部分都会沿着它的前一部分的轨迹运动,而每一部分都会沿着蛇头的轨迹运动。
- 食物绘制
食物绘制相对比较简单,当一个食物被吃掉以后,便在地图的其他随机的一个地方产生下一个食物。
- 蛇和食物的生命周期
蛇:当蛇碰到地图边界,碰到自己的身体和尾巴的时候,即判定为死亡。
食物:当蛇头碰到食物,则食物死亡。
4.代码实现
- 项目目录
- Constant类,存储一些常量。
public class Constant {
public static final int GAME_WIDTH = 1024;//窗体宽度
public static final int GAME_HEIGHT = 578;//窗体高度
public static final String IMG_PRE="com/zzk/snake/img/";//图片路径前缀
}
- MyFrame类,用于加载游戏窗体和不断刷新绘制窗体内容:
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import com.zzk.snake.constant.Constant;
public class MyFrame extends Frame{
/**
* 加载窗体
*/
public void loadFrame(){
this.setTitle("贪吃蛇");//设置窗体标题
this.setSize(Constant.GAME_WIDTH, Constant.GAME_HEIGHT);//设置窗体大小
this.setBackground(Color.BLACK);//设置背景
this.setLocationRelativeTo(null);//居中
//设置可关闭
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {