新闻动态

Python实现简单的俄罗斯方块游戏

发布日期:2022-01-01 04:15 | 文章来源:脚本之家

本文实例为大家分享了Python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下

玩法:童年经典,普通模式没啥意思,小时候我们都是玩加速的。

源码分享:

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_())

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

相关文章

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部