摘要
本次论文设计的主题是贪吃蛇游戏。游戏的主要内容大致分为游戏界面设计和游戏功能设计两大部分,其中游戏界面设计是以满足用户的视觉体验为主,游戏功能设计是在满足原有的贪吃蛇游戏基本功能的基础上添加一些其他的功能。本次的实现代码也较为简洁,总共170行左右,运用了Python的一些函数库和模块库,其中最主要的是pygame模块。
1.引言
1.1背景、意义
现如今,人们的生活节奏日益加快,繁忙冗杂的工作、学习和生活使人们的生活变得枯燥,没有新意,休息时间越来越少。面对这样的生活,人们大都渴望在这仅有的休息时间里,找到一些能让身心放松的娱乐活动。于是,贪吃蛇这款游戏就进入了大众的视野。
1997年,诺基亚工程师Taneli Armanto为诺基亚N6610手机写了一款贪吃蛇程序,命名为Snake,中译贪吃蛇。而后,在我们更加熟悉的诺基亚3310等机型上安装了升级版的SnakeII。2000年,诺基亚重写了程序Snake EX,安装在同年发行的诺基亚9200上。近十年来,贪吃蛇游戏以各种形式出现在各大游戏网站,模式新颖,层出不穷,吸引了数以亿计的游戏爱好者前来游玩。2016年,《贪吃蛇大作战》横空出世,火爆一时。同年腾讯游戏退出《疯狂贪吃蛇》网络游戏,下载量居高不下。如此种种,使得贪吃蛇游戏成为国内外游戏史上传播最广泛的作品之一。
1.2相关研究、功能介绍
本次的贪吃蛇游戏主要是仿照前人开发的源代码进行设计的,该游戏拥有和普通贪吃蛇一样的基本功能,主要就是在屏幕区域内绘制出一条小蛇,并且在与蛇不重合的屏幕区域内随机出现一个食物,游戏者通过键盘操纵游戏小蛇上下左右移动来吃到食物,当食物成功被小蛇吃到后,会在另外的区域重新刷新出食物,而小蛇由于吃到食物,身体会增长。除此之外,本游戏的贪吃蛇可以通过吃不同颜色的食物增加不同的分数,同时,分数每增加100,速度也会随之增加1。
1.3开发工具
本次游戏的开发平台为windows7(64位),程序设计语言为Python,程序运行环境为Python3.5。
2.系统结构
2.1系统结构图
图1系统结构图
2.11画面设计
①游戏的界面构造主要包括游戏运行界面尺寸的定义、背景幕布的覆盖以及墙壁的添加等。
②贪吃蛇的构造主要是蛇身的构造,具有贪吃蛇的大部分功能,例如移动、变换方向、碰撞、吃食物等,随着贪吃蛇不断吃到食物,蛇的身体会不断增加。
③食物的构造主要是食物随机刷新在界面内,且不与蛇身重合,与蛇头触碰后会消失,并在其他区域重新生成,蛇吃到不同颜色的食物将得到不同的得分
2.12游戏过程
①贪吃蛇必须从蛇的头部开始移动,所以蛇不能反方向移动。也就是尾巴不能变成蛇头。如果你不按任何键,蛇就会以当前的方向向前移动。当玩家按下有效的箭头键时,蛇头按指定的方向移动,一次移动身体一部分。所以当按下有效的箭头键时,首先要确定蛇头的位置,然后身体随着蛇头移动,实现图形就是蛇头从新的位置开始画一条蛇,此时,由于没有清屏,程序在不停地更新屏幕,原来的蛇差了一个单元,看起来蛇的身体会多一部分,所以蛇的最后一部分被覆盖了背景颜色,使贪吃蛇看起来好像是在到处移动。
②碰撞检测包含两种情况:第一种是蛇头和墙壁的碰撞,第二种是蛇头和蛇身的碰撞。
2.13游戏结束
当蛇头与墙壁或自己的身体发生碰撞时会死亡,这时候游戏进程停止,画面显示GAME OVER。
2.14添加功能
①设置不同颜色的食物,给不同颜色的食物设置不同的分数,贪吃蛇吃到不同颜色的食物就会增加相应的分数。
②贪吃蛇每得到100分,速度就加快1。
③在游戏设计中添加常规功能。
2.2主要函数及模块
2.21主要模块
表1贪吃蛇主要模块
模块 | 作用 |
---|---|
pygame | Python内置模块,游戏设计模块 |
sys | 系统相关的信息模块 |
random | 生成随机数 |
time | 时间模块,控制游戏帧频 |
collections | 调用deque双向队列形成贪吃蛇 |
2.22主要函数
表2贪吃蛇主要函数
函数 | 作用 |
---|---|
Main() | 主函数,控制游戏的所有进程 |
print_text() | 绘制界面幕布 |
init_snake() | 初始化贪吃蛇 |
create_food() | 初始化食物 |
get_food_style() | 吃到食物事件 |
pygame.display.set_caption() | 定义屏幕窗口的标题内容 |
pygame.font.SysFont() | 从系统内加载字体 |
pygame.event.get() | 键盘点击事件 |
screen.fill() | 填充窗口的背景色 |
pygame.draw.line() | 画网格线 |
time.time() | 获取当前时间 |
pygame.display.update() | 把我们绘制的东西显示在屏幕上 |
3.实现代码
3.1初始框架
在制作游戏之前基本工作都是要初始化框架。首先是导入游戏设计模块pygame并初始化该模块,然后设置框架的宽度和高度,用pygame.display.set_mode()函数初始化准备显示的窗口,再用pygame.display.set_caption()函数给这个窗口添加标题。代码如下:
python
import pygame
SCREEN_WIDTH = 600 # 屏幕宽度
SCREEN_HEIGHT = 480 # 屏幕高度
pygame.init() #初始化模块
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) #显示窗口
pygame.display.set_caption('贪吃蛇')
效果图如下:
3.2初始游戏画布
有了游戏框架之后,要在框架里面初始游戏画布。首先要设置小方格的大小以及网格线的宽度,然后设置游戏区域的坐标范围,再设置网格线的颜色以及画布的背景颜色,接着用screen.fill()函数填充背景颜色,用pygame.draw.line()函数绘制网格线,最后用pygame.display.update()函数将我们绘制的东西显示在屏幕上。代码如下:
SIZE = 20 # 小方格大小
LINE_WIDTH = 1 # 网格线宽度
#游戏区域坐标范围
SCOPE_X = (0, SCREEN_WIDTH // SIZE - 1)
SCOPE_Y = (2, SCREEN_HEIGHT // SIZE - 1)
BLACK = (0, 0, 0) # 网格线颜色
BGCOLOR = (40, 40, 60) # 背景色
screen.fill(BGCOLOR) # 填充背景色
#画网格线 竖线
for x in range(SIZE, SCREEN_WIDTH, SIZE):
pygame.draw.line(screen, BLACK, (x, SCOPE_Y[0] * SIZE), (x, SCREEN_HEIGHT