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


Posted in Python onSeptember 25, 2021

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

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

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

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

Python 相关文章推荐
python 字符串split的用法分享
Mar 23 Python
python中cPickle用法例子分享
Jan 03 Python
python检测远程服务器tcp端口的方法
Mar 14 Python
简单实现python爬虫功能
Dec 31 Python
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
python实现自动登录
Sep 17 Python
解决python ogr shp字段写入中文乱码的问题
Dec 31 Python
关于python3中setup.py小概念解析
Aug 22 Python
Python sys模块常用方法解析
Feb 20 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
Python实现滑雪小游戏
利用python实时刷新基金估值(摸鱼小工具)
Sep 15 #Python
Python极值整数的边界探讨分析
Sep 15 #Python
Python办公自动化PPT批量转换操作
Sep 15 #Python
Python办公自动化解决world文件批量转换
Sep 15 #Python
Python函数式编程中itertools模块详解
Sep 15 #Python
Python编程中Python与GIL互斥锁关系作用分析
Sep 15 #Python
You might like
php4的彩蛋
2006/10/09 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
JS实现超炫网页烟花动画效果的方法
2015/03/02 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
vue语法之拼接字符串的示例代码
2017/10/25 Javascript
基于vue v-for 多层循环嵌套获取行数的方法
2018/09/26 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
[39:32]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS DT 第二场
2014/05/23 DOTA
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
使用python进行文本预处理和提取特征的实例
2018/06/05 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
浅谈matplotlib.pyplot与axes的关系
2020/03/06 Python
pandas按条件筛选数据的实现
2021/02/20 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
业务助理岗位职责
2013/11/18 职场文书
静心口服夜广告词
2014/03/20 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
青春演讲稿范文
2014/05/08 职场文书
消防标语大全
2014/06/07 职场文书
会计试用期自我评价怎么写
2014/09/18 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
使用 JavaScript 制作页面效果
2021/04/21 Javascript