本文实例为大家分享了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