本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下
玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速的。
源码分享:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
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_()) |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://laoshifu.blog.csdn.net/article/details/120425285