前言:

文章利用Python pygame做一个贪吃蛇的小游戏而且讲清楚每一段代码是用来干嘛的。

据说是贪吃蛇游戏是1976年,Gremlin公司推出的经典街机游戏,那我们今天用Python制作的这个贪吃蛇小游戏是一个像素版的,虽然简陋,但还是可以玩起来的

我们主要要做的内容:

* 创建游戏窗口
* 绘制贪吃蛇与食物
* 蛇吃食物
贪吃蛇的棋盘模型:

现在就开始我们的代码,首先,还是导入模块:
`import` `pygame` `import` `random` `import` `copy`
|

<>1. 创建游戏窗口

<>1.1 游戏初始化

|
`pygame.init()` `clock` `=` `pygame.time.Clock() ``# 设置游戏时钟` `pygame.display.
set_caption(``"贪吃蛇-解答、源码、相关资料可私信我"``) ``# 初始化标题` `screen` `=` `pygame.display.
set_mode((``500``,` `500``)) ``# 初始化窗口 窗体的大小为 500 500`
|

<>1.2 初始化蛇的位置 蛇的长度 10 10 也就是蛇的 X Y 坐标

|

1

|
`snake_list` `=` `[[``10``,` `10``]]`
|

首先设置蛇的一个运行方向 接下来判断键盘事件在决定蛇的运行方向

蛇可以运行起来了,那么接下来就是,吃食物增加自己的长度和不吃食物在不同的位置显示。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,架下我尉(同英):
2763177065 【教程/工具/方法/解疑】

初始小蛇方向:

|
`move_up` `=` `False` `move_down` `=` `False` `move_left` `=` `False`
`move_right` `=` `True`
|

<>1.3 初始化食物的位置

|
`x` `=` `random.randint(``10``,` `490``)` `y` `=` `random.randint(``10``,` `490
``)` `food_point` `=` `[x, y]`
|

<>1.4 开启游戏循环

|
`running` `=` `True` `while` `running:` `# 游戏时钟 刷新频率` `clock.tick(``20``)`
|

<>1.5 填充背景为白色

|
`screen.fill([``255``,` `255``,` `255``])` |
<>1.6 绘制背景

|
`for` `x` `in` `range``(``0``,` `501``,` `10``):` `pygame.draw.line(screen, (``
195``,` `197``,` `199``), (x,` `0``), (x,` `500``),` `1``)` `pygame.draw.line(
screen, (``195``,` `197``,` `199``), (``0``, x), (``500``, x),` `1``)`
`food_rect` `=` `pygame.draw.circle(screen, [``255``,` `0``,` `0``], food_point,
` `15``,` `0``)`
|

<>1.7绘制蛇

|
`snake_rect` `=` `[]` `for` `pos` `in` `snake_list:` `# 1.7.1 绘制蛇的身子`
`snake_rect.append(pygame.draw.circle(screen, [``255``,` `0``,` `0``], pos,` `5
``,` `0``))`
|

<>2. 绘制贪吃蛇与食物

<>2.1 获取蛇的长度,移动蛇的身子
`pos` `=` `len``(snake_list)` `-` `1` `while` `pos >` `0``:` `snake_list[pos]`
`=` `copy.deepcopy(snake_list[pos` `-` `1``])` `pos` `-``=` `1`
|

<>2.2 更改蛇头位置
`if` `move_up:` `snake_list[pos][``1``]` `-``=` `10` `if` `snake_list[pos][``1
``] <` `0``:` `snake_list[pos][``1``]` `=` `500` `if` `move_down:` `snake_list[
pos][``1``]` `+``=` `10` `if` `snake_list[pos][``1``] >` `500``:` `snake_list[
pos][``1``]` `=` `0` `if` `move_left:` `snake_list[pos][``0``]` `-``=` `10` `if
` `snake_list[pos][``0``] <` `0``:` `snake_list[pos][``0``]` `=` `500` `if`
`move_right:` `snake_list[pos][``0``]` `+``=` `10` `if` `snake_list[pos][``0``]
>` `500``:` `snake_list[pos][``0``]` `=` `0` |
<>2.3 键盘控制移动职位
`for` `event` `in` `pygame.event.get():` `# print(event)` `# 判断按下的按键` `if`
`event.``type` `=``=` `pygame.KEYDOWN:` `# 上键` `if` `event.key` `=``=` `pygame.
K_UP:` `move_up` `=` `True` `move_down` `=` `False` `move_left` `=` `False`
`move_right` `=` `False` `# 下键` `if` `event.key` `=``=` `pygame.K_DOWN:`
`move_up` `=` `False` `move_down` `=` `True` `move_left` `=` `False`
`move_right` `=` `False` `# 左键` `if` `event.key` `=``=` `pygame.K_LEFT:`
`move_up` `=` `False` `move_down` `=` `False` `move_left` `=` `True`
`move_right` `=` `False` `# 右键` `if` `event.key` `=``=` `pygame.K_RIGHT:`
`move_up` `=` `False` `move_down` `=` `False` `move_left` `=` `False`
`move_right` `=` `True` |
<>2.4 获取蛇的长度,移动蛇的身子

|
`pos` `=` `len``(snake_list)` `-` `1` `while` `pos >` `0``:` `snake_list[pos]`
`=` `copy.deepcopy(snake_list[pos` `-` `1``])` `pos` `-``=` `1`
|

<>3. 蛇吃食物

<>3.1 碰撞检测 如果蛇吃掉食物
`if` `food_rect.collidepoint(pos):` `# 贪吃蛇吃掉食物` `snake_list.append(food_point)
` `# 重置食物位置` `food_point` `=` `[random.randint(``10``,` `490``), random.randint(
``10``,` `490``)]` `food_rect` `=` `pygame.draw.circle(screen, [``255``,` `0``,
` `0``], food_point,` `15``,` `0``)` `break` |
<>3.2 如果蛇吃掉了自己
| `head_rect` `=` `snake_rect[``0``]` `count` `=` `len``(snake_rect)` `while`
`count>` `1``:` `if` `head_rect.colliderect(snake_rect[count` `-` `1``]):`
`running` `=` `False` `count` `-``=` `1` `pygame.display.update()`
|

到此这篇关于Python制作当年第一款手机游戏-贪吃蛇游戏(练习)的文章就介绍到这了,更多相关Python制
手机游戏-贪吃蛇游戏内容请搜索python教程入门学习以前的文章或继续浏览下面的相关文章希望大家以后多多支持python教程入门学习!

技术
©2019-2020 Toolsou All rights reserved,
CSS实现溢出显示省略号mysql导出数据sql语句_mysql 根据sql查询语句导出数据HTML+CSS+JavaScript实现模态框(可拖拽)关于串口单片机给上位机的发送数据七大排序算法Java学生信息管理系统控制台版react中解决css样式全局污染qt使用数据库sqlite2020第十一届蓝桥杯国赛Python组vue 限制input只能输入正数