当前位置:   article > 正文

基于Pierre Dellacherie算法实现俄罗斯方块的人工智能(python实现)《一》_俄罗斯方块 pygame

俄罗斯方块 pygame

基于Pierre Dellacherie算法实现俄罗斯方块的人工智能(python实现)《一》

1. 文章结构

本系列文章包括三部分:
1. 用python实现俄罗斯方块:《一》
2. 个性化功能的添加:游戏结束的动画,ad广告板等:《二》
3. 基于Pierre Dellacherie算法实现俄罗斯方块的人工智能:《三》

2. 项目介绍

3. 代码讲解

  • 本次俄罗斯方块只要是在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__)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 封装一个函数方便显示文字(后期我的代码改了这个位置)
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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 下面的代码比较长,是一个方块的类
class CubeShape(object):
    # 储存方块的名字的list
    SHAPES = ['I', 'J', 'L', 'O', 'S'<
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/832625
推荐阅读
相关标签
  

闽ICP备14008679号