网易新闻纵横

让建站和SEO变得简单

让不懂建站的用户快速建站,让会建站的提高建站效率!

青鸟激越 老司机一步步教你何如用Python写馋嘴蛇游戏

发布日期:2024-11-03 02:50    点击次数:116

前几天,有东说念主提到馋嘴蛇,一下子就勾起了我的兴致,毕竟在阿谁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不错把馋嘴蛇玩出一个新的高度






Powered by 网易新闻纵横 @2013-2022 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024