窝牛号

使用Python代码制作贪吃蛇小游戏,你也可以打造自己的AI

上期视频,我们分享了一个AI来玩贪吃蛇的视频,本期我们讲解一下其基础代码,利用本代码自己也可以写游戏了。

游戏界面

贪吃蛇小游戏是一代人的梦,本期文章我们简单制作一个贪吃蛇小游戏import cv2 import numpy as np from random import randint from random import choice

代码截图

首先导入我们需要的第三方库,然后定义一个贪吃蛇的类来定义贪吃蛇的运动,头部等信息

class Snakepart: def __init__(self, front, x, y): self.front = front self.x = x self.y = y def move(self): self.x = self.front.x self.y = self.front.y

代码截图

此类我们定义贪吃蛇的身体以及运动等

class Head: def __init__(self, direction, x, y): self.direction = direction self.x = x self.y = y def move(self): 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: self.y -= 1

代码截图

然后我们定义贪吃蛇的头部以及运动信息,这里我们控制键盘的WSAD四个键来控制贪吃蛇头部的运动方向

def display(): board = np.zeros([BOARD_SIZE, BOARD_SIZE, 3]) for part in snake: board[part.y, part.x] = [0, 255, 0] board[appley, applex] = [0, 0, 255] cv2.imshow(&34;, np.uint8(board.repeat(CELL_SIZE, 0).repeat(CELL_SIZE, 1))) key = cv2.waitKey(int(1000/SPEED)) return key

代码截图

Display类来显示贪吃蛇的颜色以及要吃的苹果的颜色

def win_focus(): cv2.namedWindow(&34;, cv2.WINDOW_AUTOSIZE); board = np.zeros([BOARD_SIZE * CELL_SIZE, BOARD_SIZE * CELL_SIZE, 3]) cv2.imshow(&34;, board); cv2.setWindowProperty(&34;, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN); cv2.waitKey(2000) cv2.setWindowProperty(&34;, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_AUTOSIZE)

代码截图

Win_focus 类函数来显示游戏画面

1. cv2.VideoCapture(0) 构建视频的窗口

参数说明: 表示窗口的名字, 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__ == &39; : cell的数量 BOARD_SIZE = 45 贪吃蛇成长的速度 GROWTH = 3 eaten = True quit = False grow = 0 snake = [] 设置键盘 print(&39;) 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(&34;) : head.direction = 0 elif key == ord(&34;) : head.direction = 1 elif key == ord(&34;) : head.direction = 2 elif key == ord(&34;) : head.direction = 3

代码截图

设置完成后,就可以进行贪吃蛇的移动控制,以及贪吃蛇的游戏规则,当贪吃蛇吃过一个苹果后,其身体要增加一个大小尺寸

设置游戏规则 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 applex == head.x and appley == head.y: subx = snake[-1].x suby = snake[-1].y eaten = True grow += GROWTH

Ok,所有设置完成后,便可以进行游戏了,当然这里只是设置了基本的贪吃蛇规格,你也可以在代码里面增加分数设置,看看你能跑多少分吧

游戏截图

本站所发布的文字与图片素材为非商业目的改编或整理,版权归原作者所有,如侵权或涉及违法,请联系我们删除

窝牛号 wwww.93ysy.com   沪ICP备2021036305号-1