手把手教你Java小项目-简易版贪吃蛇

项目地址:Game-Mysnake: 贪吃蛇项目

图片资源请在Gitee中获取

设计游戏图纸

实现700*900

宽度值为700像素,每个格子为25像素,共计有28个格子

高度值为900像素,每个格子为25像素,共计有36 个格子

画出700*900像素窗口

在窗口上添加画布

新建一个类MyPanel画布,同时继承JPanel

编写两个方法:无参构造方法和重写画组件,其中参数看作是一个画笔

方法体中编写代码:先调用父类方法做一些基本工作,然后再设置背景颜色,最后在main方法的窗口中添加画布

编写具体代码如下:

执行思路:当添加画布时,执行无参构造方法,然后再自动执行重写画组件的方法

运行效果如下:

在画布上添加黑色游戏区

使用画笔填满整个区域,四个参数分别是:在画布中x坐标,在画布中y坐标,以及宽度和高度值

编写具体代码如下:

放静态蛇

声明右侧头部图片

声明身体图片

添加右侧头部

添加两个身体

编写具体代码如下:

运行效果如下:

定义蛇的数据结构

当游戏运行后,蛇的身体会不断变长,蛇的位置也会不断的发生改变,因此需要将蛇的长度和蛇的位置存放起来,目前使用数组完成。

具体操作步骤如下:

声明一个初始值,表示蛇的初始长度为3

声明蛇的x坐标和y坐标

当创建对象执行无参构造方法时,完成蛇的右侧头部和身体位置初始化

此时就不需要之前编写静态蛇身体的代码,通过编写循环遍历数组即可

编写具体代码如下:

控制蛇头方向

蛇头可以进行上下左右移动

操作步骤:

定义一个枚举方向,有上、下、左、右四个取值

分别声明向上、向下和向左的三个蛇头图片

声明一个枚举类型变量,标识蛇头的方向

通过更改枚举方向的值,来更改蛇头的方向

编写具体代码如下:

放上开始提示

在重写画组件的方法中,使用画笔就可以完成

编写具体代码如下:

运行效果如下:

按空格键开始游戏

1.声明一个boolean类型变量isStart为false标记游戏的状态

2.判断,当isStart值为false时,显示开始提示文字

3.在无参构造方法中设置获取焦点为true,也就是:可以获取键盘的事件

4.获取键盘事件后谁来监听,添加监听this.addKeyListener(this);其中this代表自身,但是目前还没有处理监听事件

则需要在MyPanel类实现KeyListener接口,并且重写三个方法,分别是:keyTyped()、keyPressed()、keyReleased()

在keyPressed()方法或keyReleased()方法中都可以实现

其中参数keyEvent表示按了哪个键,按不同的键获取不同的数字,则通过e.getKeyCode()获取当前按键对应的数字,然后判断,如果按的是空格键或者数字32,则将当前标记isStart值取反,同时没有开始游戏的提示信息,需要调用repaint()方法,表示重新画组件

编写具体代码如下:

让蛇动起来

1.创建一个定时器Timer,第一个参数为多长时间比如:100毫秒,第二个参数当时间到了以后找谁this

需要实现ActionListener接口,重写actionPerformed()方法,也就是当时间到了调用actionPerformed()方法

2.在构造方法中启动定时器,当到100毫秒就调用重写actionPerformed()方法

3.在重写actionPerformed()方法体中,实现蛇移动

移动蛇的思路:

假如蛇水平向右移动,最后一个身体移动到前面一个身体的位置,也就是x坐标更改,y坐标不动

假如蛇的头部也水平向右移动,蛇的头部x坐标应该在当前位置+25

4.调用重新画的方法,再重新启动定时器

编写具体代码如下:

运行效果如下:

实现暂停

在重写actionPerformed()方法中进行判断,当标记的值为true时,则蛇进行移动

编写具体代码如下:

实现转向功能

1.通过键盘按键更改变量direction的值

2.在actionPerformed()方法中,通过判断变量direction方向进行蛇头的上下左右移动

编写具体代码如下:

添加食物

1.随机生成食物,声明两个变量foodX和foodY表示食物的位置,声明一个随机的变量random,声明食物图片food

2.在无参构造方法中,生成食物foodX和foodY的坐标

foodX = 25 + 25 * random.nextInt(20);

foodY = 25 + 25 * random.nextInt(20);

3.在paintComponect()方法中添加食物

编写具体代码如下:

运行效果如下:

吃掉食物

当蛇的头部和食物的坐标完全重叠时,则表示吃到食物,同时蛇的长度加1,并且生成一个新的食物

具体实现思路如下:

1.在actionPerformed()方法中,判断蛇头x的坐标与食物x坐标foodX相同,并且蛇头y坐标与食物y坐标foodY相同,则长度加1

2.再重新生成食物的x和y坐标

编写具体代码如下:

当吃到食物时蛇的长度加1,然后生成新的食物,运行效果如下:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值