十分钟快速制作一个俄罗斯方块桌面游戏

准备

安装 Python:

  1. 下载 Python 安装程序: 访问 Python 官方网站,在下载页面选择适合您操作系统的 Python 版本。通常推荐下载最新版本。

  2. 运行安装程序: 下载完成后,运行下载的安装程序。在安装过程中,请确保勾选“Add Python X.X to PATH”选项(X.X 代表您下载的 Python 版本号),这样可以使 Python 在命令行中直接可用。

  3. 完成安装: 按照安装程序的指示完成安装过程。安装完成后,您可以在命令行中输入 python --version 来确认 Python 是否已经成功安装。

安装 Pygame:

  1. 打开命令行: 在您的计算机上打开命令行(Windows 上为命令提示符,Mac 或 Linux 上为终端)。

  2. 安装 Pygame: 在命令行中输入以下命令来使用 pip 安装 Pygame:

    pip install pygame
    

安装 PyInstaller

  1. 打开命令行(在 Windows 上为命令提示符,Mac 或 Linux 上为终端),然后输入以下命令来使用 pip 安装 PyInstaller:
    pip install pyinstaller
    

直接上源码

import copy
import pygame
import random
import sys
import time

pygame.init()
pygame.mixer.init()
pygame.display.set_caption('俄罗斯方块')

# 操作设置
left = pygame.K_LEFT
right = pygame.K_RIGHT
down = pygame.K_DOWN
spi_r = pygame.K_UP  # 右旋-上键
spi_l = pygame.K_g  # 左旋-G
change = pygame.K_d  # 保留-D
plunge = pygame.K_f  # 强降-F
again = pygame.K_2  # 重新游戏
leve = 1  # 难度等级,数字越大,下落越快

# 定义屏幕大小
width = 500
height = 700
screen = pygame.display.set_mode((500, 700))  # 屏幕大小

# 基础方块绘制
size = 30  # 方块规格
sore = 10  # 分数单位
sores = [0]  # 记录总分
# 基础方块的绘制
face = pygame.Surface((size, size), flags=pygame.HWSURFACE)
pygame.draw.rect(face, (0, 0, 0), [0, 0, size, size], 1)
# 基础方块的投影绘制--增加透明度
face1 = pygame.Surface((size, size), flags=pygame.HWSURFACE)
pygame.draw.rect(face1, (0, 0, 0, 0), [0, 0, size, size], 1)
face1.set_alpha(100)  # 设置透明度
# 字体设置
f = pygame.font.SysFont(['simhei'], 30)  # 分数显示等需要用的字体
f1 = pygame.font.SysFont(['simhei'], 20)
f2 = pygame.font.SysFont(['simhei'], 15)

# 地图参数设置
origin = (5, 5)  # 原点位置,边框的宽度
posSet = [4 * size + origin[0], origin[1] + 0]  # 初始生成方块位置,该坐标全局控制当前形状的位置
c_list = (2, 4, 6, 7, 14, 16, 19)  # 分别为7种大类型的方块,见方块类型函数
ch1 = [c_list[random.randint(0, 6)] for i in range(4)]  # 初始方块产生随机函数
ch1.append(0)  # ch1为一个有装4个值的列表,前三个为即将出现的三个形状的标号,第四个为保留的形状的标号,开始时没有,定为0
filled = []  # 落地方块储存列表,将一落地的每一个形状的信息存入
n = [0]  # 控制是否能更换当前手中方块
control = [1]  # 控制游戏结束,0为结束


# 方块类型函数
# 每个形状表示为四个坐标,取其中一个方块为原点算出其他方块坐标
# c为方块类型标号,a为形状的坐标。
# 该函数最终输出一个列表,其中包含6个坐标,即为一个形状(包含四个基础方块)的四个方块坐标和四个方块中最小的x,y和最大的x,y,方便之后的碰撞判断
# 还要输出形状标号c(方便进行不同方块的不同颜色绘制)
def forms(c, a):
    x0, x1, x2, x3 = 0, 0, 0, 0
    y0, y1, y2, y3 = 0, 0, 0, 0
    # 长条
    if c == 1:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = -1
        x2 = 0
        y2 = 2
        x3 = 0
        y3 = 1
    if c == 2:  # 横条
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 1
        y2 = 0
        x3 = 2
        y3 = 0
    # S
    if c == 3:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = 1
        x2 = -1
        y2 = 0
        x3 = -1
        y3 = -1
    if c == 4:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 0
        y2 = -1
        x3 = 1
        y3 = -1
    # Z
    if c == 5:
        x0 = 0
        y0 = 0
        x1 = 1
        y1 = 0
        x2 = 0
        y2 = 1
        x3 = 1
        y3 = -1
    if c == 6:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 0
        y2 = 1
        x3 = 1
        y3 = 1
    # T
    if c == 7:
        x0 = 0
        y0 = 0
        x1 = 1
        y1 = 0
        x2 = -1
        y2 = 0
        x3 = 0
        y3 = -1
    if c == 8:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = -1
        x2 = 0
        y2 = 1
        x3 = 1
        y3 = 0
    if c == 9:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 0
        y2 = 1
        x3 = 1
        y3 = 0
    if c == 10:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = 1
        x2 = 0
        y2 = -1
        x3 = -1
        y3 = 0
    # L
    if c == 11:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = -1
        x2 = 0
        y2 = 1
        x3 = 1
        y3 = 1
    if c == 12:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 1
        y2 = 0
        x3 = -1
        y3 = 1
    if c == 13:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = -1
        x2 = 0
        y2 = 1
        x3 = -1
        y3 = -1
    if c == 14:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 1
        y2 = 0
        x3 = 1
        y3 = -1
    # J
    if c == 15:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = -1
        x2 = 0
        y2 = 1
        x3 = -1
        y3 = 1
    if c == 16:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = -1
        x2 = -1
        y2 = 0
        x3 = 1
        y3 = 0
    if c == 17:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = 1
        x2 = 0
        y2 = -1
        x3 = 1
        y3 = -1
    if c == 18:
        x0 = 0
        y0 = 0
        x1 = -1
        y1 = 0
        x2 = 1
        y2 = 0
        x3 = 1
        y3 = 1
    # 田
    if c == 19:
        x0 = 0
        y0 = 0
        x1 = 0
        y1 = 1
        x2 = -1
        y2 = 0
        x3 = -1
        y3 = 1
    mx = max(x0, x1, x2, x3)
    my = max(y0, y1, y2, y3)
    mx1 = min(x0, x1, x2, x3)
    my1 = min(y0, y1, y2
  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦迪尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值