青鸟激越 老司机一步步教你何如用Python写馋嘴蛇游戏
前几天,有东说念主提到馋嘴蛇,一下子就勾起了我的兴致,毕竟在阿谁Nokia称霸的年代,这款游戏关联词经典中的经典啊!而用Python(蛇)玩Snake(馋嘴蛇),再顺应不外了。
这里通过一个Python初学学习的例子跟人人详备西宾一下!
先通过底下这个着力图来感受下吧!
1 环境
操作系统:Windows
Python版块:3.7.3
2 需求分析
咱们先来总结下馋嘴蛇中的游戏元素及游戏规定。
领先呢,需要有馋嘴蛇、有食品;需要能收尾馋嘴蛇来波折出动赢得食品;馋嘴蛇在吃取食品后,自己长度增多,同期食品隐没并飞快生成新的食品;若是馋嘴蛇触遭遇四周墙壁或是触遭遇我方躯壳时,则游戏收尾。
游戏规定等于这样粗放,接下来咱们借助一个第三方库pygame来收场它。
Pygame是一个运用SDL库的游戏库, 是一组用来开辟游戏软件的 Python 式样模块。SDL(Simple DirectMedia Layer)是一个跨平台库,接济探望谈判机多媒体硬件(声息、视频、输入等),SDL相称雄壮,但好意思中不及的是它是基于 C 话语的。 PyGame是 SDL 库的 Python 包装器(wrapper),Pygame 在SDL库的基础上提供了多样接口,从而使用用户豪迈使用python话语创建多样万般的游戏或多媒体式样。
它的装配秩序很粗放,如下:
念念要了解更多pygame功能的一又友也不错查阅官方的文档。
3 代码收场
领先导入咱们要用到的模块,除了第三方库pygame外,咱们还会用到一些Python内置的模块如sys、random、time等,一并导入即可。
3.1 一些全局参数的出手化
接下来,咱们需要声明一些全局参数。如出手化pygame、界说游戏窗口的大小、窗口的标题、界说全局的热情变量等信息。
3.2 出手化馋嘴蛇及食品
游戏中需要有馋嘴蛇及食品,咱们给定一个出手值。咱们将总共界面当作许多20*20的小方块,每个小方块代表一个尺度小格子,馋嘴蛇的长度就不错用几个尺度小格子暗示。咱们将馋嘴蛇躯壳用列表的体式存储,粗放之后的删减。
3.3 收场馋嘴蛇的波折傍边出动
咱们需要收尾馋嘴蛇的波折傍边的出动,这里通过监听键盘输入来收场。运用键盘中的波折傍边键或WASD键来收尾馋嘴蛇的通顺。
接下来等于将蛇前进所在按照键盘的输入进行转弯操作,并将蛇的头部现时的位置加入到蛇身的列表中。
3.4 判断是否吃到食品
若是蛇头与食品的位置重合,则判定吃到食品,将食品数目清零;而没吃到食品的话,蛇身就会随着蛇头通顺,蛇身的终末一节将被踢出列表。
3.5 再行生成食品
当游戏界面中的食品数目为0时,需要再行生成食品。运用random函数来生成飞快位置
3.6 画图馋嘴蛇、食品、分数等信息
界说馋嘴蛇的画图函数
界说食品的画图函数
界说分数的画图函数
#打印出现时得分
def drawScore(score):
#诞陌生数的显现热情
score_Surf = BASICFONT.render('%s' %(score), True, GREY)
#诞陌生数的位置
score_Rect = score_Surf.get_rect()
score_Rect.midtop = (320, 240)
#绑定以上诞生到句柄
DISPLAY.blit(score_Surf, score_Rect)
这些齐界说好之后,咱们需要在游戏主逻辑中调用它们,并刷新Pygame的显现层,馋嘴蛇与食品的每一次出动,齐会进行刷新显现层的操作来显现。终末咱们不错设定一个速率值来合理收尾游戏试验的速率。
DISPLAY.fill(BLACK)
#画出馋嘴蛇
drawSnake(snake_Body)
#画出食品的位置
drawFood(food_Position)
#打印出玩家的分数
drawScore(len(snake_Body) - 3)
#刷新Pygame的显现层,馋嘴蛇与食品的每一次出动,齐会进行刷新显现层的操作来显现。
pygame.display.flip()
#收尾游戏速率
FPSCLOCK.tick(7)
3.7 界说游戏收尾的画面并判断游戏是否收尾
界说函数,用于展示游戏收尾的画面并退出式样
#游戏收尾并退出
def GameOver():
#诞生GameOver的显现热情
GameOver_Surf = BASICFONT.render('Game Over!', True, GREY)
#诞生GameOver的位置
GameOver_Rect = GameOver_Surf.get_rect()
GameOver_Rect.midtop = (320, 10)
#绑定以上诞生到句柄
DISPLAY.blit(GameOver_Surf, GameOver_Rect)
pygame.display.flip()
#恭候3秒
time.sleep(3)
#退出游戏
pygame.quit()
#退出式样
sys.exit()
在游戏主逻辑中加入判断,游戏是否收尾
'''游戏收尾的判断'''
#馋嘴蛇触遭遇范围
if snake_Head[0]<0 or snake_Head[0]>620:
GameOver() if snake_Head[1]<0 or snake_Head[1]>460:
GameOver()
#馋嘴蛇触遭遇我方
for i in snake_Body[1:]:
if snake_Head[0]==i[0] and snake_Head[1]==i[1]:
GameOver()
跋文:
本文运用Pygame模块收场了最粗放的馋嘴蛇版块。虽然还有许多需要优化的地方,比如飞快生成食品时怎样幸免出咫尺馋嘴蛇的自己上、通过馋嘴蛇的长度来自动收尾游戏速率等等。
更高等小数的有怎样通过AI自动玩馋嘴蛇、馋嘴蛇的双东说念主对战等,期待人人运用Python不错把馋嘴蛇玩出一个新的高度