贪吃蛇小游戏总论

引言:一个月前完成了贪吃蛇小游戏,作为一个用来练手的项目,自己的确成长了不少,打算就这个项目写点东西,后来工作太忙,再加上一些原因,一直到现在才有空写下来,贪吃蛇小游戏分为总论,分论三篇和反思一篇,五篇文章来写,总论主要说明贪吃蛇小游戏主要实现了那些功能,以及贪吃蛇小游戏的算法分析,设计原理等等,分论主要讲贪吃蛇小游戏的各个组成部分原理,反思主要复盘自己在设计这个游戏中的错误和自我成长。

(一)贪吃蛇游戏功能分析

贪吃蛇小游戏主要有三个界面组成,启动界面,运行界面和重启界面。
启动界面有一个按钮和一张背景图片组成,背景图片的作用在于使得窗体看上去更加好看,点击按钮便会从启动界面转入运行界面,如下图

在这里插入图片描述
在启动界面点击进入游戏按钮以后,程序会进入下一个界面,即运行界面,在运行界面中,界面主体显示贪吃蛇和食物,在界面的右面可以有贪吃蛇的长度显示,点击游戏指南按钮可以弹出一个新界面,用来说明贪吃蛇小游戏的操作,点击不同的速度按钮便可以使得贪吃蛇的移动速度发生变化,在刚进入运行界面时,贪吃蛇是静止的,点击开始按钮贪吃蛇即可发生向上移动,点击停止按钮是贪吃蛇停止移动,点击退出游戏按钮时游戏结束,当贪吃蛇在移动的过程中如果撞到自己或撞到墙时,则贪吃蛇会死亡,进入到重启界面。
在这里插入图片描述

贪食蛇移动方式一般有两种方式,通过鼠标或者键盘来控制贪吃蛇的移动。
当点击开始游戏的按钮时,贪吃蛇开始向上移动,窗体会监听鼠标在窗体中的位置,如果鼠标在下图中上的区域,点击鼠标,贪吃蛇会向上移动,在左的区域,点击鼠标,贪吃蛇向左移动,右和下的区域类似,鼠标出现在相应的区域贪吃蛇会相应的移动,但是贪吃蛇不能反向移动。换句话来说,将贪吃蛇的运行界面按对角线划分为四个区域,然后窗体监听鼠标所在的区域,贪吃蛇不能反向移动,故而出现在左区域则贪吃蛇向左移动,右区域则向右移动。下区域则向下移动,不用点击鼠标,只需要监听鼠标所在的区域即可实现相应的移动。
通常贪吃蛇小游戏是利用键盘控制来实现的,加入键盘的监听器事件,在键盘中利用上下左右键来控制贪吃蛇的移动,在源代码中我并没有将键盘控制的部分代码删除,而是保留了下来,并写了详细的注释。可以在界面中加入键盘控制或者鼠标控制的按钮。用来选择控制方式来控制贪吃蛇的移动,这算一个彩蛋吧,后面我会介绍华容道小游戏,华容道小游戏有利用鼠标或键盘来操作,可以借鉴。

在这里插入图片描述
当贪吃蛇撞墙或者撞到自己时,贪吃蛇会死亡,跳入到重启界面。在重启界面,有两个按钮,点击重新开始按钮,游戏进入运行界面,点击结束游戏按钮,游戏结束,加入一张贪吃蛇图片,使得界面更加好看。
在这里插入图片描述

贪吃蛇小游戏涉及到Java基础知识,图像界面设计swing,数组和多线程等部分,这个游戏的难点不在于界面的设计,而是贪吃蛇的设计,如形状,移动,吃掉随机点,和死亡等,以及随机点的设计,这部分在下面的算法分析和后面分论中会很详细的介绍。

(二)贪吃蛇小游戏分析

(1)需求分析
在这里插入图片描述

  1. 蛇的绘制: 贪吃蛇分为蛇头,蛇身和蛇尾 。蛇身会随着蛇头的移动而移动,蛇身的每一部分都会沿着它的前一部分的轨迹运动,而每一部分都会沿着蛇头的轨迹运动。如果蛇头碰到随机点,则吃到一个食物都会使蛇身长度加一,蛇尾依旧是蛇尾。

  2. 食物绘制,食物绘制相对比较简单,当一个食物被吃掉以后,便在地图的其他随机的一个地方产生下一个食物。

  3. 蛇生命周期 :当蛇碰到地图边界,碰到自己的身体和尾巴的时候,即判定为死亡。

  4. 方向控制,首先我们需要实现的是通过鼠标位置实现控制蛇的运动方向,
    需要注意的有两点:

    1.蛇运动的时候不能向上一个状态的反方向运动,例如,原先向右,下一次改变的方向不能为左
    2.运动的时候如果按了一个方向键,再下一次按键之前将维持原先的方向运动。

(2)设计分析

在这里插入图片描述

  1. 启动界面类:作为游戏的顶层容器和游戏程序的入口点/
  2. 运行界面类:作为游戏画面的显示组件,同时用来运行游戏循环,并对用户的输入事件进行处理。贪吃蛇的封装类,用来设置贪吃蛇的属性,并对其运动逻辑进行更新,同时对其图形进行绘制。食物的封装类,用来设置食物的属性,并对其运动逻辑进行更新,同时对其图形进行绘制。即运行界面。
  3. 贪吃蛇类(Snake): ,用来设置贪吃蛇的属性,将贪吃蛇定义为数组,且可以返回蛇身的坐标,以便于碰到随机点时进行坐标计算。
  4. 重启界面类(Food):用于判断游戏是否结束。
  5. 辅助类,贪吃蛇小游戏有很多按钮,按钮类个性化设计按钮,在运行的时候。需要加入游戏背景音乐,虽然背景音乐乐意在隐形姐买你类中实现,那样使得运行界面类有些臃肿,故而另外定义一个类,通过实例化来引用。

(3)算法分析

  1. <1> 贪吃蛇小游戏的设计
  • 整个游戏最基本的元素是地图。在java中用于绘图的类是swing和awt,在这里主要用到swing类。swing中用于窗口显示的类有JFrame及其子类。JFrame可以直接添加组件, 在窗体中定义面板,然后将组件加入到面板中,如按钮,标签。
  • 贪吃蛇是由什么组成的?如何实现移动?我们可以把贪吃蛇的蛇身理解成一个集合,它有固定的起始元素,代表游戏一开始时的蛇身。当贪吃蛇吃到点时,集合就添加一个元素,蛇的长度就加一。那么,集合中的元素是什么呢?要理解这个问题,首先得关注蛇身移动所处的环境。在JFrame窗体中,是由X、Y轴坐标对位置进行区分。贪吃蛇的蛇身可以看做是一个一个联系紧密的点,在坐标轴上显示出来。每当朝某个方向移动时,蛇的坐标就按照某个规律变化。例如,我们操控贪吃蛇向上移动时,蛇的全体的Y轴就减一;如果蛇的第一个坐标与蛇身的某个坐标重合,就代表贪吃蛇碰到自己;如果蛇的第一个坐标碰到了边界,蛇就撞墙。这就是贪吃蛇的本质。
  • 小食物有不同的随随机点组成,随机点可面板中的坐标来确定,当贪吃蛇吃掉一个随机点时,则需要重画随机点。

1.<2>贪吃蛇移动分析

  • 贪吃蛇小游戏中最难的点便在于贪吃蛇的设计,我们已经知道面板中的位置可以通过坐标来确定,那么贪吃蛇的设计包括基本原理部分和设计实现部分,设计实现部分就是将贪吃蛇在面板上画出来,可以通过图像类来实现,蛇头蛇尾和蛇身的形状不一样,贪吃蛇本身是一个数组,通过寻遍历数组的各个坐标,即可实现。
  • 设计原理部分如下:
    Java面板中的位置以通过坐标来控制,坐标以面板左上角为原点,向右为x轴,向下为y轴,那么,将贪吃蛇定义为一个数组,将数组的坐标定义在面板中,便可以在面板中实现可视化,
    蛇其实是由1个1个正方体拼成的。每个正方体的左上角是他们的坐标。在程序中,我们可以用一个数组表示一条蛇。数组的每一个位置存放一个正方形的坐标。在画蛇的时候,我们只需要遍历数组,根据数组里面的坐标在画布上画出一个一个的正方体就变成一条蛇啦。 在这里插入图片描述

至于蛇的行走怎么办? 贪吃蛇的移动说白了就是数组坐标的变化,那么,上下左右时坐标是如何变化呢?如下一步,蛇往上走了。
在这里插入图片描述
若下一步往上走,则下一个点为数组首点的横坐标不标,纵坐标+10
其他方向的移动和向上的原理类似。
在这里插入图片描述

  • 当贪吃蛇碰到食物时,数组的长度增加一,然后重新画随机点。

猜你喜欢

转载自blog.csdn.net/weixin_41792162/article/details/85324120