#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QWidget, QLabel, QLCDNumber, QDesktopWidget, QApplication, QMainWindow, QMessageBox, \
QPushButton, QComboBox, QSlider, QLineEdit
from PyQt5.QtGui import QColor, QPainter, QFont
from PyQt5.QtCore import Qt, QBasicTimer, QUrl
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
import random
# 俄罗斯方块类
class BlockShape(object):
b_type = 0
b_data = [
[
[1, 1, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0]
],
[
[0, 1, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 1, 1]
],
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 0, 0, 0],
[1, 1, 1, 0]
]
]
b_color = 0x000000
b_size = 30
offSetX = 30
offSetY = 30
pointX = 0
pointY = 0
border = None
# 类的初始化函数
def __init__(self, color, data, size, offset) -> None:
super().__init__()
self.b_color = color
self.b_data = data
self.b_size = size
self.offSetX = offset
self.offSetY = offset
self.b_type = 0
self.pointX = 0
self.pointY = 0
# 改变形状
def changeType(self):
self.b_type = (self.b_type + 1) % len(self.b_data)
# 左右平移
def changeX(self, i):
self.pointX += i
# 下移
def changeY(self, i):
self.pointY += i
# 绘制网格
def draw(self, painter):
# 列
for y in range(0, len(self.b_data[self.b_type])):
# 行
for x in range(0, len(self.b_data[self.b_type][y])):
if (self.b_data[self.b_type][y][x] == 1):
qcolor = QColor(self.b_color)
self.drawBlock(painter, x, y, qcolor)
self.drawLine(painter)
# 绘制俄罗斯方块
def drawBlock(self, painter, x, y, qcolor):
w = self.b_size
h = self.b_size
x = self.b_size * (x + self.pointX) + self.offSetX
y = self.b_size * (y + self.pointY) + self.offSetY
painter.fillRect(x + 1, y + 1, w - 2, h - 2, qcolor)
painter.setPen(qcolor.lighter())
painter.drawLine(x, y + h - 1, x, y)
painter.drawLine(x, y, x + w - 1, y)
painter.setPen(qcolor.darker())
painter.drawLine(x + 1, y + h - 1, x + w - 1, y + h - 1)
painter.drawLine(x + w - 1, y + h - 1, x + w - 1, y + 1)
# 绘制一行
def drawLine(self, painter):
# 遇到边界则不绘制
if self.border == None:
return
w = self.b_size * 4
h = self.b_size * 4
x = self.offSetX + self.b_size * self.pointX
y = self.offSetY + self.b_size * self.pointY
color = QColor(self.border)
painter.setPen(color.lighter())
painter.drawLine(x, y, x + w, y)
painter.drawLine(x, y + h, x, y)
painter.drawLine(x, y + h, x + w, y + h)
painter.drawLine(x + w, y + h, x + w, y)
# 方块工厂类,用于生成方块
class BlockShapeFactory(object):
# 七个方块,每个四种形状
shapeData = [
[
[
[0, 1, 1, 0],
[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 0, 0, 0]
],
[
[0, 1, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 0, 0, 0]],
[
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 1, 1, 1],
[0, 0, 0, 0]
]
],
[
[
[0, 0, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 1],
[0, 0, 0, 0]],
[
[0, 0, 0, 1],
[0, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]],
[
[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]],
[
[0, 1, 1, 1],
[0, 1, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]
]
],
[
[
[0, 0, 0, 0],
[0, 0, 1, 0],
[0, 1, 1, 1],
[0, 0, 0, 0]],
[
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 0, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 1, 1, 1],
[0, 0, 1, 0],
[0, 0, 0, 0]],
[
[0, 0, 1, 0],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 0, 0, 0]
]
],
[
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 0, 1, 1],
[0, 0, 0, 0]],
[
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 0, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 0, 1, 1],
[0, 0, 0, 0]
],
[
[0, 0, 0, 1],
[0, 0, 1, 1],
[0, 0, 1, 0],
[0, 0, 0, 0]
]
],
[
[
[0, 0, 0, 0],
[0, 0, 1, 1],
[0, 1, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 0, 1, 1],
[0, 1, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 1, 0],
[0, 0, 1, 1],
[0, 0, 0, 1],
[0, 0, 0, 0]
]
],
[
[
[0, 0, 1, 0],
[0, 0, 1, 0],
[0, 0, 1, 0],
[0, 0, 1, 0]
],
[
[0, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 0],
[0, 0, 0, 0]
],
[
[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 0, 0]
],
[
[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 1],
[0, 0, 0, 0]
]
],
[
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]
],
[
[0, 0, 0, 0],
[0, 1, 1, 0],
[0, 1, 1, 0],
[0, 0, 0, 0]
]
]
]
# 方块颜色
shapeColor = [0x000000, 0xCC6666, 0x66CC66, 0x6666CC, 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00]
# 类的初始化函数
def __init__(self):
super().__init__()
# 生成一个方块,随机一种颜色和形状
def product(self, size, offset):
i = random.randint(0, len(self.shapeColor) - 1)
j = random.randint(0, len(self.shapeData) - 1)
color = self.shapeColor[i]
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
俄罗斯方块是一款风靡全球的经典游戏,其简单的规则、挑战性的难度和极具吸引力的游戏性使其成为了无数玩家钟爱的经典之作。而现在,通过PyQt框架的支持,这款经典小游戏焕发出新的生机与活力,为玩家们提供了全新的游戏体验。PyQt-经典小游戏俄罗斯方块,是一款基于PyQt框架开发的经典游戏重制版。该游戏在保留原版俄罗斯方块所有经典玩法的基础上,通过PyQt框架的强大功能,为玩家们呈现出更加流畅、精美的游戏画面和更加灵活、友好的操作体验。
资源推荐
资源详情
资源评论
收起资源包目录
py-qt-tetris-master.zip (5个子文件)
py-qt-tetris-master
music
music.mp3 3.97MB
tetris.py 16KB
scoreRecord.dat 7B
tetris_upgrade.py 23KB
.gitignore 1KB
共 5 条
- 1
资源评论
熬了夜的程序员
- 粉丝: 2365
- 资源: 17
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功