✌ 作者简介:信年✘ ✌,大家可以叫我 ❤信年❤ ,一位精通五门语言的博主 ✌
🏆 CSDN博客专家认证、华为云享专家、阿里云专家博主 、掘金创作榜No.1
📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
💬 人生格言:没有我不会的语言,没有你过不去的坎儿。💬
🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦
📌作者主页传送门:点此传送
🔎系列文章&专栏推荐:暂未开放
🌐为大家推荐一款刷题网站呀👉点击跳转
所有编程语言,都可以从此网站中找到并参考学习哟~

首先,确保你有安装cfg的库和pygame的库,没有安装的看下安装方法
首先,win+r,在运行框里输入cmd或者CMD,进入终端,输入以下两行代码
- pip install pygame
- pip install cfg
注:cfg容易安装错误,具体看报错,如有报错评论区留言,我会一一答复
1.凡是安装Python的第三方库,只需要输入pip install 库的名字(当然有一些特例)
2.凡是程序运行不起来,整体代码大部分报错,一般是没安装库,一个Python文件里面引用的库一般在开头:import 库的名字,检查这里有没有报错或者黄色下划线就好了,如果有,就用方法一安装库,如果没有,可能是自身代码的问题了
- import os
- import sys
- import random
- from modules import *
- from PyQt5.QtGui import *
- from PyQt5.QtCore import *
- from PyQt5.QtWidgets import *
-
-
- '''定义俄罗斯方块游戏类'''
- class TetrisGame(QMainWindow):
- def __init__(self, parent=None):
- super(TetrisGame, self).__init__(parent)
- # 是否暂停ing
- self.is_paused = False
- # 是否开始ing
- self.is_started = False
- self.initUI()
- '''界面初始化'''
- def initUI(self):
- # icon
- self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'resources/icon.jpg')))
- # 块大小
- self.grid_size = 22
- # 游戏帧率
- self.fps = 200
- self.timer = QBasicTimer()
- # 焦点
- self.setFocusPolicy(Qt.StrongFocus)
- # 水平布局
- layout_horizontal = QHBoxLayout()
- self.inner_board = InnerBoard()
- self.external_board = ExternalBoard(self, self.grid_size, self.inner_board)
- layout_horizontal.addWidget(self.external_board)
- self.side_panel = SidePanel(self, self.grid_size, self.inner_board)
- layout_horizontal.addWidget(self.side_panel)
- self.status_bar = self.statusBar()
- self.external_board.score_signal[str].connect(self.status_bar.showMessage)
- self.start()
- self.center()
- self.setWindowTitle('Tetris —— 九歌')
- self.show()
- self.setFixedSize(self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height())
- '''游戏界面移动到屏幕中间'''
- def center(self):
- screen = QDesktopWidget().screenGeometry()
- size = self.geometry()
- self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2)
- '''更新界面'''
- def updateWindow(self):
- self.external_board.updateData()
- self.side_panel.updateData()
- self.update()
- '''开始'''
- def start(self):
- if self.is_started:
- return
- self.is_started = True
- self.inner_board.createNewTetris()
- self.timer.start(self.fps, self)
- '''暂停/不暂停'''
- def pause(self):
- if not self.is_started:
- return
- self.is_paused = not self.is_paused
- if self.is_paused:
- self.timer.stop()
- self.external_board.score_signal.emit('Paused')
- else:
- self.timer.start(self.fps, self)
- self.updateWindow()
- '''计时器事件'''
- def timerEvent(self, event):
- if event.timerId() == self.timer.timerId():
- removed_lines = self.inner_board.moveDown()
- self.external_board.score += removed_lines
- self.updateWindow()
- else:
- super(TetrisGame, self).timerEvent(event)
- '''按键事件'''
- def keyPressEvent(self, event):
- if not self.is_started or self.inner_board.current_tetris == tetrisShape().shape_empty:
- super(TetrisGame, self).keyPressEvent(event)
- return
- key = event.key()
- # P键暂停
- if key == Qt.Key_P:
- self.pause()
- return
- if self.is_paused:
- return
- # 向左
- elif key == Qt.Key_Left:
- self.inner_board.moveLeft()
- # 向右
- elif key == Qt.Key_Right:
- self.inner_board.moveRight()
- # 旋转
- elif key == Qt.Key_Up:
- self.inner_board.rotateAnticlockwise()
- # 快速坠落
- elif key == Qt.Key_Space:
- self.external_board.score += self.inner_board.dropDown()
- else:
- super(TetrisGame, self).keyPressEvent(event)
- self.updateWindow()
-
-
- '''run'''
- if __name__ == '__main__':
- app = QApplication([])
- tetris = TetrisGame()
- sys.exit(app.exec_())
-
-
那么完整代码写完后就可以双击运行代码啦,如果有报错记得按我说的方法排查一下,么么哒!
感谢你们的阅读😆
后续还会继续更新💓,欢迎持续关注📌哟~
💫如果有错误❌,欢迎指正呀💫
✨如果觉得收获满满,可以点点赞👍支持一下哟~✨