【python教程入门学习】Python实现自动玩贪吃蛇程序

本文通过Python的pygame模块详细介绍了如何编写自动玩贪吃蛇游戏的代码,包括游戏的实现效果、广度优先搜索算法及pygame的相关操作。
摘要由CSDN通过智能技术生成

这篇文章主要介绍了通过Python实现的简易的自动玩贪吃蛇游戏的小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学一学

实现效果

先看看效果

这比我手动的快多了,而且是单机的,自动玩没惹骂我,哈哈 ,多人游戏整个自动玩会被骂死~

image.png

代码

没装软件的先安装一下软件,没装模块的安装一下pygame模块。

|

1

|

`pip install pygame`

|

导入模块

|

1

2

|

`import` `pygame,sys,time,random`

`from` `pygame.``locals` `import` `*`

|

定义颜色变量

|

`redColour` `=` `pygame.Color(``255``,``0``,``0``)`

`blackColour` `=` `pygame.Color(``0``,``0``,``0``)`

`whiteColour` `=` `pygame.Color(``255``,``255``,``255``)`

`greenColour` `=` `pygame.Color(``0``,``255``,``0``)`

`headColour` `=` `pygame.Color(``0``,``119``,``255``)`

|

在所有后续的除法中,为预防pygame输出出现偏差,必须取除数(//)而不是单纯除法(/)

程序界面

第0行,HEIGHT行,第0列,WIDTH列为围墙,所以实际大小是13*13

|

`IGHT` `=` `15`

`WIDTH` `=` `15`

`FIELD_SIZE` `=` `HEIGHT` `*` `WIDTH`

`# 蛇头位于snake数组的第一个元素`

`HEAD` `=` `0`

|

用数字代表不同的对象,因为运动时矩阵上每个格子会处理成到达食物的路径长度,因此这三个变量间需要有足够大的间隔(>HEIGHT*WIDTH)来互相区分,小写一般是坐标,大写代表常量。对于新手小白想更轻松的学好Python基础,Python爬虫,web开发、大数据,数据分析,人工智能等技术,这里给大家分享系统教学资源,架下我尉(同英): 2763177065 【教程/工具/方法/解疑】

|

`FOOD` `=` `0`

`UNDEFINED` `=` `(HEIGHT` `+` `1``)` `*` `(WIDTH` `+` `1``)`

`SNAKE` `=` `2` `*` `UNDEFINED`

|

snake是一维数组,对应元素直接加上以下值就表示向四个方向移动。

|

`LEFT` `=` `-``1`

`RIGHT` `=` `1`

`UP` `=` `-``WIDTH` `# 一维数组,所以需要整个宽度都加上才能表示上下移动。`

`DOWN` `=` `WIDTH`

|

错误码

|

1

|

`ERR` `=` `-``2333`

|

用一维数组来表示二维的东西,board表示蛇运动的矩形场地,初始化蛇头在(1,1)的地方,初始蛇长度为1。

|

`board` `=` `[``0``]` `*` `FIELD_SIZE` `#[0,0,0,……]`

`snake` `=` `[``0``]` `*` `(FIELD_SIZE``+``1``)`

`snake[HEAD]` `=` `1``*``WIDTH``+``1`

`snake_size` `=` `1`

|

与上面变量对应的临时变量,蛇试探性地移动时使用。

|

`tmpboard` `=` `[``0``]` `*` `FIELD_SIZE`

`tmpsnake` `=` `[``0``]` `*` `(FIELD_SIZE``+``1``)`

`tmpsnake[HEAD]` `=` `1``*``WIDTH``+``1`

`tmpsnake_size` `=` `1`

|

food:食物位置初始在(4, 7),best_move: 运动方向。

|

|

`food` `=` `4` `*` `WIDTH` `+` `7`

`best_move` `=` `ERR`

|

运动方向数组,游戏分数(蛇长)

|

|

`mov` `=` `[LEFT, RIGHT, UP, DOWN]                                          `

`score` `=` `1`

|

检查一个cell有没有被蛇身覆盖,没有覆盖则为free,返回true 。

|

|

`def` `is_cell_free(idx, psize, psnake):`

`return` `not` `(idx` `in` `psnake[:psize])`

|

检查某个位置idx是否可向move方向运动

|

|

`def` `is_move_possible(idx, move):`

`flag` `=` `False`

`if` `move` `=``=` `LEFT:`

`#因为实际范围是13*13,[1,13]*[1,13],所以idx为1时不能往左跑,此时取余为1所以>1`

`flag` `=` `True` `if` `idx``%``WIDTH >` `1` `else` `False`

`elif` `move` `=``=` `RIGHT:`

`#这里的<WIDTH-2跟上面是一样的道理`

`flag` `=` `True` `if` `idx``%``WIDTH < (WIDTH``-``2``)` `else` `False`

`elif` `move` `
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值