• Python实战项目:俄罗斯方块(源码分享)(文章较短,直接上代码)


     ✌ 作者简介:信年✘ ✌,大家可以叫我 ❤信年❤ ,一位精通五门语言的博主 ✌
    🏆 CSDN博客专家认证、华为云享专家、阿里云专家博主 、掘金创作榜No.1
    📫 如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步👀
    💬 人生格言:没有我不会的语言,没有你过不去的坎儿。💬
    🔥 如果感觉博主的文章还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦

    📌作者主页传送门:点此传送

    🔎系列文章&专栏推荐:暂未开放

    🌐为大家推荐一款刷题网站呀👉点击跳转
    所有编程语言,都可以从此网站中找到并参考学习哟~

    效果展示:

    准备工作

    首先,确保你有安装cfg的库和pygame的库,没有安装的看下安装方法

    库的安装方法

    首先,win+r,在运行框里输入cmd或者CMD,进入终端,输入以下两行代码

    1. pip install pygame
    2. pip install cfg

    注:cfg容易安装错误,具体看报错,如有报错评论区留言,我会一一答复

    科普小知识

    1.凡是安装Python的第三方库,只需要输入pip install 库的名字(当然有一些特例)

    2.凡是程序运行不起来,整体代码大部分报错,一般是没安装库,一个Python文件里面引用的库一般在开头:import 库的名字,检查这里有没有报错或者黄色下划线就好了,如果有,就用方法一安装库,如果没有,可能是自身代码的问题了

    完整代码

    1. import os
    2. import sys
    3. import random
    4. from modules import *
    5. from PyQt5.QtGui import *
    6. from PyQt5.QtCore import *
    7. from PyQt5.QtWidgets import *
    8. '''定义俄罗斯方块游戏类'''
    9. class TetrisGame(QMainWindow):
    10. def __init__(self, parent=None):
    11. super(TetrisGame, self).__init__(parent)
    12. # 是否暂停ing
    13. self.is_paused = False
    14. # 是否开始ing
    15. self.is_started = False
    16. self.initUI()
    17. '''界面初始化'''
    18. def initUI(self):
    19. # icon
    20. self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'resources/icon.jpg')))
    21. # 块大小
    22. self.grid_size = 22
    23. # 游戏帧率
    24. self.fps = 200
    25. self.timer = QBasicTimer()
    26. # 焦点
    27. self.setFocusPolicy(Qt.StrongFocus)
    28. # 水平布局
    29. layout_horizontal = QHBoxLayout()
    30. self.inner_board = InnerBoard()
    31. self.external_board = ExternalBoard(self, self.grid_size, self.inner_board)
    32. layout_horizontal.addWidget(self.external_board)
    33. self.side_panel = SidePanel(self, self.grid_size, self.inner_board)
    34. layout_horizontal.addWidget(self.side_panel)
    35. self.status_bar = self.statusBar()
    36. self.external_board.score_signal[str].connect(self.status_bar.showMessage)
    37. self.start()
    38. self.center()
    39. self.setWindowTitle('Tetris —— 九歌')
    40. self.show()
    41. self.setFixedSize(self.external_board.width() + self.side_panel.width(), self.side_panel.height() + self.status_bar.height())
    42. '''游戏界面移动到屏幕中间'''
    43. def center(self):
    44. screen = QDesktopWidget().screenGeometry()
    45. size = self.geometry()
    46. self.move((screen.width() - size.width()) // 2, (screen.height() - size.height()) // 2)
    47. '''更新界面'''
    48. def updateWindow(self):
    49. self.external_board.updateData()
    50. self.side_panel.updateData()
    51. self.update()
    52. '''开始'''
    53. def start(self):
    54. if self.is_started:
    55. return
    56. self.is_started = True
    57. self.inner_board.createNewTetris()
    58. self.timer.start(self.fps, self)
    59. '''暂停/不暂停'''
    60. def pause(self):
    61. if not self.is_started:
    62. return
    63. self.is_paused = not self.is_paused
    64. if self.is_paused:
    65. self.timer.stop()
    66. self.external_board.score_signal.emit('Paused')
    67. else:
    68. self.timer.start(self.fps, self)
    69. self.updateWindow()
    70. '''计时器事件'''
    71. def timerEvent(self, event):
    72. if event.timerId() == self.timer.timerId():
    73. removed_lines = self.inner_board.moveDown()
    74. self.external_board.score += removed_lines
    75. self.updateWindow()
    76. else:
    77. super(TetrisGame, self).timerEvent(event)
    78. '''按键事件'''
    79. def keyPressEvent(self, event):
    80. if not self.is_started or self.inner_board.current_tetris == tetrisShape().shape_empty:
    81. super(TetrisGame, self).keyPressEvent(event)
    82. return
    83. key = event.key()
    84. # P键暂停
    85. if key == Qt.Key_P:
    86. self.pause()
    87. return
    88. if self.is_paused:
    89. return
    90. # 向左
    91. elif key == Qt.Key_Left:
    92. self.inner_board.moveLeft()
    93. # 向右
    94. elif key == Qt.Key_Right:
    95. self.inner_board.moveRight()
    96. # 旋转
    97. elif key == Qt.Key_Up:
    98. self.inner_board.rotateAnticlockwise()
    99. # 快速坠落
    100. elif key == Qt.Key_Space:
    101. self.external_board.score += self.inner_board.dropDown()
    102. else:
    103. super(TetrisGame, self).keyPressEvent(event)
    104. self.updateWindow()
    105. '''run'''
    106. if __name__ == '__main__':
    107. app = QApplication([])
    108. tetris = TetrisGame()
    109. sys.exit(app.exec_())

    最后

    那么完整代码写完后就可以双击运行代码啦,如果有报错记得按我说的方法排查一下,么么哒!

    感谢你们的阅读😆

    后续还会继续更新💓,欢迎持续关注📌哟~

    💫如果有错误❌,欢迎指正呀💫

    ✨如果觉得收获满满,可以点点赞👍支持一下哟~✨

  • 相关阅读:
    gin 中间件
    Python 入门
    J2EE项目部署与发布
    Redis+Lua解决库存超卖
    机器学习(三十二):Apriori 算法进行关联规则挖掘(原理与实战)
    信号与线性系统分析(吴大正,郭宝龙)(信号的分类)
    光环:研发云搭建及人才梯队建设——姚冬
    基于PyTorch3D的GeoAI实现【ESRI】
    R语言STAN贝叶斯线性回归模型分析气候变化影响北半球海冰范围和可视化检查模型收敛性...
    Dijkstra算法——单源最短路径查找
  • 原文地址:https://blog.csdn.net/xinnian_yyds/article/details/126207722