窝牛号

使用OpenCV与Python编写自己的俄罗斯方块小游戏

俄罗斯方块小游戏是当年风靡一时的小游戏,该游戏由一个棋盘组成,该棋盘跨度为10个单元格,高度为20个单元格,如下所示。

俄罗斯方块小游戏

关于此小游戏的规则,我们不再介绍,本期文章主要用代码来实现,我们知道俄罗斯方块小游戏主要有如下7个方块组成,我们在代码中使用字母“ O”,“ I”,“ S”,“ Z”,“ L”,“ J”和“ T”表示它们。

俄罗斯方块

使用OpenCV和python创建俄罗斯方块import cv2 import numpy as np from random import choice SPEED = 1 34;& 所有方块造型 next_piece = choice([&34;, &34;, &34;, &34;, &34;, &34;, &34;]) def get_info(piece): if piece == &34;: coords = np.array([[0, 3], [0, 4], [0, 5], [0, 6]]) color = [255, 155, 15] elif piece == &34;: coords = np.array([[1, 3], [1, 4], [1, 5], [0, 4]]) color = [138, 41, 175] elif piece == &34;: coords = np.array([[1, 3], [1, 4], [1, 5], [0, 5]]) color = [2, 91, 227] elif piece == &34;: coords = np.array([[1, 3], [1, 4], [1, 5], [0, 3]]) color = [198, 65, 33] elif piece == &34;: coords = np.array([[1, 5], [1, 4], [0, 3], [0, 4]]) color = [55, 15, 215] elif piece == &34;: coords = np.array([[1, 3], [1, 4], [0, 4], [0, 5]]) color = [1, 177, 89] else: coords = np.array([[0, 4], [0, 5], [1, 4], [1, 5]]) color = [2, 159, 227] return coords, color

然后我们建立7个俄罗斯方块的造型与颜色,以上建立完成后,我们需要搭建一个游戏界面以及鼠标控制事件

def display(board, coords, color, next_info, held_info, score, SPEED): border = np.uint8(127 - np.zeros([20, 1, 3])) border_ = np.uint8(127 - np.zeros([1, 34, 3])) dummy = board.copy() dummy[coords[:,0], coords[:,1]] = color right = np.uint8(np.zeros([20, 10, 3])) right[next_info[0][:,0] + 2, next_info[0][:,1]] = next_info[1] left = np.uint8(np.zeros([20, 10, 3])) left[held_info[0][:,0] + 2, held_info[0][:,1]] = held_info[1] dummy = np.concatenate((border, left, border, dummy, border, right, border), 1) dummy = np.concatenate((border_, dummy, border_), 0) dummy = dummy.repeat(20, 0).repeat(20, 1) dummy = cv2.putText(dummy, str(score), (520, 200), cv2.FONT_HERSHEY_DUPLEX, 1, [0, 0, 255], 2) 34;A - move left&34;D - move right&34;S - move down&34;W - hard drop&34;J - rotate left&34;L - rotate right&34;I - hold&34;Tetris&34;__main__&34;I&34;T&34;L&34;J&34;Z&34;S&34;O&确定方块的颜色和位置current_piece,next_piece以及held_piece if held_piece == &34;: held_info = np.array([[0, 0]]), [0, 0, 0] else: held_info = get_info(held_piece) next_info = get_info(next_piece) coords, color = get_info(current_piece) if current_piece == &34;: top_left = [-2, 3] 34;a&34;I&34;d&34;I&34;j&34;l&34;I&34;O&34;I&34;O&34;j&34;w&34;i&34;&34;I&34;I&34;s&34;I& 计算得分 lines = 0 for line in range(20): if np.all([np.any(pos != 0) for pos in board[line]]): lines += 1 board[1:line+1] = board[:line] if lines == 1: score += 40 elif lines == 2: score += 100 elif lines == 3: score += 300 elif lines == 4: score += 1200

以上便是本期完整的代码,运行此代码,我们便可以看到一个我设计完成的游戏界面,这里按照左屏的键盘字母提示就可以愉快的来玩游戏了

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

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