
录
- 实现效果
- 代码
这比我手动的快多了,而且是单机的,自动玩没惹骂我,哈哈 ,多人游戏整个自动玩会被骂死~
代码
私信小编01即可获取大量Python学习资源没装软件的先安装一下软件,没装模块的安装一下pygame模块 。
pip install pygame导入模块import pygame,sys,time,randomfrom 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 = 15WIDTH = 15FIELD_SIZE = HEIGHT * WIDTH# 蛇头位于snake数组的第一个元素HEAD = 0用数字代表不同的对象,因为运动时矩阵上每个格子会处理成到达食物的路径长度,因此这三个变量间需要有足够大的间隔(>HEIGHT*WIDTH)来互相区分,小写一般是坐标,大写代表常量 。FOOD = 0UNDEFINED = (HEIGHT1) * (WIDTH1)SNAKE = 2 * UNDEFINEDsnake是一维数组,对应元素直接加上以下值就表示向四个方向移动 。LEFT = -1RIGHT = 1UP = -WIDTH # 一维数组,所以需要整个宽度都加上才能表示上下移动 。DOWN = WIDTH错误码ERR = -2333用一维数组来表示二维的东西,board表示蛇运动的矩形场地,初始化蛇头在(1,1)的地方,初始蛇长度为1 。board = [0] * FIELD_SIZE #[0,0,0,……]snake = [0] * (FIELD_SIZE 1)snake[HEAD] = 1*WIDTH 1snake_size = 1与上面变量对应的临时变量,蛇试探性地移动时使用 。tmpboard = [0] * FIELD_SIZEtmpsnake = [0] * (FIELD_SIZE 1)tmpsnake[HEAD] = 1*WIDTH 1tmpsnake_size = 1food:食物位置初始在(4, 7),best_move: 运动方向 。food = 4 * WIDTH7best_move = ERR运动方向数组,游戏分数(蛇长)mov = [LEFT, RIGHT, UP, DOWN]score = 1【python贪吃蛇游戏代码 Python实现自动玩贪吃蛇】检查一个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 = Falseif move == LEFT:#因为实际范围是13*13,[1,13]*[1,13],所以idx为1时不能往左跑,此时取余为1所以>1flag = True if idx%WIDTH > 1 else Falseelif move == RIGHT:#这里的 (2*WIDTH-1) else Falseelif move == DOWN:flag = True if idx < (FIELD_SIZE-2*WIDTH) else Falsereturn flag 重置boardboard_BFS后,UNDEFINED值都变为了到达食物的路径长度 。
如需要还原,则要重置它 。
def board_reset(psnake, psize, pboard):for i in range(FIELD_SIZE):if i == food:pboard[i] = FOODelif is_cell_free(i, psize, psnake): # 该位置为空pboard[i] = UNDEFINEDelse: # 该位置为蛇身pboard[i] = SNAKE广度优先搜索遍历整个board,计算出board中每个非SNAKE元素到达食物的路径长度 。def board_BFS(pfood, psnake, pboard):queue = []queue.append(pfood)inqueue = [0] * FIELD_SIZEfound = False # while循环结束后,除了蛇的身体,# 其它每个方格中的数字为从它到食物的曼哈顿间距while len(queue)!=0:idx = queue.pop(0)#初始时idx是食物的坐标if inqueue[idx] == 1: continueinqueue[idx] = 1for i in range(4):#左右上下if is_move_possible(idx, mov[i]):if idxmov[i] == psnake[HEAD]:found = Trueif pboard[idx mov[i]]
- python多图合并成一张图 Python实现多张图片合成一张马赛克图片
- 怎么从b站上下载视频 python爬b站视频
- 软件加密方法 python编写加密程序
- 火影忍者大蛇丸怎么用,「火影忍者手游」大蛇丸
- 火影忍者怎么获得巨蛇,分析《火影忍者》大蛇兜
- python编写爬虫的步骤 python爬虫程序代码
- 小编教你python 2.7编程模块函数的详细介绍 小编教你 怎样盘头发好看
- 小编教你python 2.7中安装whl格式文件的详细操作流程 小编教你如何在手机上申报契税
- 小编分享python 2.7将网页内容存到本地的具体操作方法 小编分享得几点希望能帮到大家
- 分享python 2.7合并csv文件的方法介绍 分享的句子语录经典
