python实现有障碍物的贪吃蛇(python 贪吃蛇小游戏代码)
上期视频,我们分享了一个人工智能来玩贪吃蛇的视频,本期我们讲解一下其基础代码,利用本代码自己也可以写游戏了。
游戏界面
贪吃蛇小游戏是一代人的梦,本期文章我们简单制作一个贪吃蛇小游戏
导入cv2将numpy作为铭牌导入
来自随机导入randint
来自随机进口选择
代码截图
首先导入我们需要的第三方库,然后定义一个贪吃蛇的类来定义贪吃蛇的运动,头部等信息
蛇形零件:级
def __init__(自,前,x,y):
self.front=front
self.x=x
self.y=y
极好的移动(自身):
self.x=self.front.x
自我
代码截图
此类我们定义贪吃蛇的身体以及运动等
班级编号:
def __init__(自我,方向,x,y):
自我方向=方向
self.x=x
self.y=y
极好的移动(自身):
if self.direction==0:
self.x=1
elif self.direction==1:
self.y=1
elif self.direction==2:
self.x -=1
elif self.direction==3:
自我。y-=1
代码截图
然后我们定义贪吃蛇的头部以及运动信息,这里我们控制键盘的W\S\A\D四个键来控制贪吃蛇头部的运动方向
极好的显示器(:)
BOARD=NP。零([棋盘大小,棋盘大小,3])
对于蛇:中的部分
board[part.y,part.x]=[0,255,0]
board[appley,applex]=[0,0,255]
cv2.imshow('蛇游戏',NP。uint 8(板。重复(细胞大小,0))。重复(细胞大小,1))
key=cv2.waitKey(int(1000/SPEED))
返回键
代码截图
显示类来显示贪吃蛇的颜色以及要吃的苹果的颜色
def win_focus():
cv2.namedWindow('蛇游戏cv2 .WINDOW _ AUTOSIZE);
BOARD=NP。零([板大小*单元大小,板大小*单元大小,3])
cv2.imshow('蛇游戏,棋盘);
cv2.setWindowProperty('蛇游戏cv2 .WND_PROP_FULLSCREEN,cv2 .WINDOW _全屏);
cv2.waitKey(2000年)
cv2.setWindowProperty('蛇游戏
", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_AUTOSIZE)Win_focus 类函数来显示游戏画面
1. cv2.VideoCapture(0) #构建视频抓捕器
参数说明:0表示需要启动的摄像头,这里也可以写视频的路径
2. cv2.nameWindow(name, cv2.WINDOW_NORMAL) # 构建视频的窗口
参数说明: 表示窗口的名字, cv2.WINDOW_NORMAL表示窗口的大小,这里窗口的大小是正常,
3.cv2.setWindowProperty(name, cv2.WND_PROP_FULLSCREEN, cv2.WND_PROP_FULLSCREEN)
参数说明: name表示需要更改像素的窗口名字, cv2.WND_PROP_FULLSCREEN表示全屏
4. video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 对窗口像素进行设置
参数说明: cv2.CAP_PROP_FRAME_WIDTH 表示设置其宽的大小, 1920表示设置的像素
以上参数类设置后,我们开始主函数的部分
if __name__ == '__main__' : # 每个cell的大小 CELL_SIZE = 20 # cell的数量 BOARD_SIZE = 45 # 游戏中贪吃蛇的运行速度 SPEED = 6 # 贪吃蛇成长的速度 GROWTH = 3 eaten = True quit = False grow = 0 snake = [] #游戏中从屏幕中间开始执行 head = Head(0, int((BOARD_SIZE - 1)/2), int((BOARD_SIZE - 1)/2)) snake.append(head) # 设置键盘 print('w = top, a = left, s = down, d = right') win_focus() while True: if eaten: s = list(range(0, BOARD_SIZE ** 2)) for part in snake: s.remove(part.x * BOARD_SIZE + part.y) a = choice(s) applex = int(a/BOARD_SIZE) appley = a % BOARD_SIZE eaten = False接下来,我们设置一下贪吃蛇的键盘移动设置,W/A/S/D,分别代表贪吃蛇的移动方向,这个跟普通游戏设置的一样,由于opencv不能设置箭头,这里只能设置为W/A/S/D
key = display() if key == 8 or key == 27: break elif key == ord("d") : head.direction = 0 elif key == ord("s") : head.direction = 1 elif key == ord("a") : head.direction = 2 elif key == ord("w") : head.direction = 3设置完成后,就可以进行贪吃蛇的移动控制,以及贪吃蛇的游戏规则,当贪吃蛇吃过一个苹果后,其身体要增加一个大小尺寸
# 移动贪吃蛇 for part in snake[::-1]: part.move() # 设置游戏规则 if head.x < 0 or head.x > BOARD_SIZE - 1 or head.y < 0 or head.y > BOARD_SIZE - 1: break for part in snake[1:]: if head.x == part.x and head.y == part.y: quit = True break if quit: break # 设置贪吃蛇 if grow > 0: snake.append(SnakePart(snake[-1], subx, suby)) grow -= 1 # 当吃过一个苹果后,增加贪吃蛇的长度 if applex == head.x and appley == head.y: subx = snake[-1].x suby = snake[-1].y eaten = True grow += GROWTHOk,所有设置完成后,便可以进行游戏了,当然这里只是设置了基本的贪吃蛇规格,你也可以在代码里面增加分数设置,看看你能跑多少分吧