• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

用python制作年久小游戏,5 分钟实现贪吃蛇!

python 搞java代码 3年前 (2022-05-21) 24次浏览 已收录 0个评论

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文来自腾讯云,作者:Python小二

贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中。

尽管贪吃蛇的历史相对比较久远,但它却有着十分顽强的生命力,保持经久不衰,其中很重要的原因便是游戏厂家不断的对其进行更新迭代。现在,这款游戏无论是游戏场景、规则等都变得十分丰富。

接下来,我们看一下如何通过 Python 简单的实现这款小游戏。

规则

  • 要有游戏主界面、贪吃蛇、食物;
  • 能够控制贪吃蛇移动并获取食物;
  • 贪吃蛇吃了食物后,增加自身长度、分数,食物消失并随机生成新的食物;
  • 贪吃蛇触碰到周围边界或自己身体时,游戏结束。

环境

  • 操作系统:Windows
  • Python 版本:3.6
  • 涉及模块:sys、random、pygame

实现

首先,安装第三方库 pygame,使用 pip install pygame 即可。

➢ 游戏主界面

SCREEN_X = 500<span>
SCREEN_Y </span>= 500<span>
screen_size </span>=<span> (SCREEN_X, SCREEN_Y)
screen </span>=<span> pygame.display.set_mode(screen_size)
pygame.display.set_caption(</span><span>"</span><span>贪吃蛇</span><span>"</span>)

www#gaodaima.com来源gaodai$ma#com搞$$代**码)网搞代码

 

➢ 贪吃蛇

初始化

<span>def</span> <span>__init__</span><span>(self):
    self.dirction </span>=<span> pygame.K_RIGHT
    self.body </span>= []

 

移动

<span>def</span><span> addNode(self):
    left, top </span>=<span> (0, 0)
    </span><span>if</span><span> self.body:
        left, top </span>=<span> (self.body[0].left, self.body[0].top)
    node </span>= pygame.Rect(left, top, 20, 20<span>)
    </span><span>if</span> self.dirction ==<span> pygame.K_LEFT:
        node.left </span>-= 20
    <span>elif</span> self.dirction ==<span> pygame.K_RIGHT:
        node.left </span>+= 20
    <span>elif</span> self.dirction ==<span> pygame.K_UP:
        node.top </span>-= 20
    <span>elif</span> self.dirction ==<span> pygame.K_DOWN:
        node.top </span>+= 20<span>
    self.body.insert(0, node)

</span><span>def</span><span> delNode(self):
    self.body.pop()</span>

 

改变方向

<span>def</span><span> changeDirection(self, curkey):
    LR </span>=<span> [pygame.K_LEFT, pygame.K_RIGHT]
    UD </span>=<span> [pygame.K_UP, pygame.K_DOWN]
    </span><span>if</span> curkey <span>in</span> LR +<span> UD:
        </span><span>if</span> (curkey <span>in</span> LR) <span>and</span> (self.dirction <span>in</span><span> LR):
            </span><span>return</span>
        <span>if</span> (curkey <span>in</span> UD) <span>and</span> (self.dirction <span>in</span><span> UD):
            </span><span>return</span><span>
        self.dirction </span>= curkey

 

死亡判断

<span>def</span><span> isDead(self):
    </span><span>#</span><span> 撞墙</span>
    <span>if</span> self.body[0].x <span>not</span> <span>in</span><span> range(SCREEN_X):
        </span><span>return</span><span> True
    </span><span>if</span> self.body[0].y <span>not</span> <span>in</span><span> range(SCREEN_Y):
        </span><span>return</span><span> True
    </span><span>#</span><span> 撞自己</span>
    <span>if</span> self.body[0] <span>in</span> self.body[1<span>:]:
        </span><span>return</span><span> True
    </span><span>return</span> False

 

<code class="prism language-python"><span class="token keyword"><span class="token function"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token comment"><span class="token keyword"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token operator"><span class="token keyword"><span class="token builtin"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token keyword"><span class="token boolean"><span class="token keyword"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token operator"><span class="token keyword"><span class="token builtin"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token keyword"><span class="token boolean"><span class="token comment"><span class="token keyword"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token keyword"><span class="token punctuation"><span class="token punctuation"><span class="token number"><span class="token punctuation"><span class="token punctuation"><span class="token punctuation"><span class="token keyword"><span class="token boolean"><span class="token keyword"><span class="token boolean">
➢ 食物
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>

投放食物

<span>def</span><span> set(self):
    </span><span>if</span> self.rect.x == -20<span>:
        allpos </span>=<span> []
        </span><span>for</span> pos <span>in</span> range(20, SCREEN_X - 20, 20<span>):
            allpos.append(pos)
        self.rect.left </span>=<span> random.choice(allpos)
        self.rect.top </span>=<span> random.choice(allpos)
        </span><span>print</span>(self.rect)

 

吃掉食物

<span>def</span><span> remove(self):
    self.rect.x </span>= -20

 

➢ 文字显示

显示方法

<span>def</span> show_text(screen, pos, text, color, font_bold=False, font_size=30, font_italic=<span>False):
    </span><span>#</span><span> 设置文字大小</span>
    cur_font = pygame.font.SysFont(<span>"</span><span>宋体</span><span>"</span><span>, font_size)
    </span><span>#</span><span> 加粗</span>
<span>    cur_font.set_bold(font_bold)
    </span><span>#</span><span> 斜体</span>
<span>    cur_font.set_italic(font_italic)
    </span><span>#</span><span> 设置内容</span>
    text_fmt = cur_font.render(text, 1<span>, color)
    </span><span>#</span><span> 绘制文字</span>
    screen.blit(text_fmt, pos)

 

显示分数

show_text(screen, (50, 400), <span>"</span><span>scores: </span><span>"</span> + str(scores), (103, 213, 213))

 

显示死亡提示

show_text(screen, (150, 50), <span>"</span><span>GAME OVER</span><span>"</span>, (227, 29, 18), False, 50<span>)
show_text(screen, (</span>140, 100), <span>"</span><span>Press space to try again</span><span>"</span>, (0, 0, 22), False, 30)

 

➢ 吃到食物

当贪吃蛇吃掉食物,增加蛇身长度、分数,食物消失,重新投放食物。

<span>if</span> food.rect ==<span> snake.body[0]:
    scores </span>+= 1<span>
    food.remove()
    snake.addNode()

</span><span>#</span><span> 投放食物</span>
food.set()

 

➢ 最终效果

打包

打包使用 pyinstaller,


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:用python制作年久小游戏,5 分钟实现贪吃蛇!

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址