赞
踩
本系列文章包括三部分:
1. 用python实现俄罗斯方块:《一》
2. 个性化功能的添加:游戏结束的动画,ad广告板等:《二》
3. 基于Pierre Dellacherie算法实现俄罗斯方块的人工智能:《三》
- 本次俄罗斯方块只要是在python的pygame上实现的,不了解pygame 的语法的同学可以先去了解一波,学过前端canvas的童鞋估计学得比较快。
- 代码主要参考pygame 俄罗斯方块-lovetianyats,以及这位作者的github代码:pygame开发小游戏
- 大家可以先下载这位作者的代码阅读,懂的话可以跳过。
- 名词解释:
- 方块:就是任意一个俄罗斯方块的意思
- 方格:一个俄罗斯方块由四个小方格组成
- 形状(shape):就是俄罗斯方块的形状,有
'I', 'J', 'L', 'O', 'S', 'T', 'Z'
这么多种形状- 形态(dir or station):就是一个俄罗斯方块经过旋转之后的形态
下面是正式的代码讲解:
开始部分
# 引入包就不说了
import pygame
import random
import os
#pygame的开始
pygame.init()
#定义各自的宽度,行列方向的格子数量
GRID_WIDTH = 20
GRID_NUM_WIDTH = 15
GRID_NUM_HEIGHT = 25
#根据格子数量计算可视框的宽度和高度
WIDTH, HEIGHT = GRID_WIDTH * GRID_NUM_WIDTH, GRID_WIDTH * GRID_NUM_HEIGHT
SIDE_WIDTH = 200
SCREEN_WIDTH = WIDTH + SIDE_WIDTH
# 定义常用颜色
WHITE = (0xff, 0xff, 0xff)
BLACK = (0, 0, 0)
LINE_COLOR = (0x33, 0x33, 0x33)
# 定义颜色矩阵,主要用于生成不用颜色的俄罗斯方块
CUBE_COLORS = [
(0xcc, 0x99, 0x99), (0xff, 0xff, 0x99), (0x66, 0x66, 0x99),
(0x99, 0x00, 0x66), (0xff, 0xcc, 0x00), (0xcc, 0x00, 0x33),
(0xff, 0x00, 0x33), (0x00, 0x66, 0x99), (0xff, 0xff, 0x33),
(0x99, 0x00, 0x33), (0xcc, 0xff, 0x66), (0xff, 0x99, 0x00)
]
# 设置可视窗的宽高
screen = pygame.display.set_mode((SCREEN_WIDTH, HEIGHT))
# 设置标题
pygame.display.set_caption("俄罗斯方块")
# 根据帧数限制游戏运行速度
clock = pygame.time.Clock()
# 帧数
FPS = 30
# 分数和等级
score = 0
level = 1
# 储存每个格子的状态,若未填充格子则为None,已填充的话会变成该方块的颜色值
screen_color_matrix = [[None] * GRID_NUM_WIDTH for i in range(GRID_NUM_HEIGHT)]
# 设置游戏的根目录为当前文件夹
base_folder = os.path.dirname(__file__)
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
def show_text(surf, text, size, x, y, color=WHITE):
font_name = os.path.join(base_folder, 'font/font.ttc')
font = pygame.font.Font(font_name, size)
text_surface = font.render(text, True, color)
text_rect = text_surface.get_rect()
text_rect.midtop = (x, y)
surf.blit(text_surface, text_rect)
class CubeShape(object):
# 储存方块的名字的list
SHAPES = ['I', 'J', 'L', 'O', 'S'<
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。