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的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
详解 Python 读写XML文件的实例
Aug 02 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
利用Anaconda简单安装scrapy框架的方法
Jun 13 Python
python实现文件的分割与合并
Aug 29 Python
python实现代码统计器
Sep 19 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 Python
Django-rest-framework中过滤器的定制实例
Apr 01 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
May 20 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 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
使用PHP的日期与时间函数技巧
2008/04/24 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
php和nginx交互实例讲解
2019/09/24 PHP
js 学习笔记(三)
2009/12/29 Javascript
高亮显示web页表格行的javascript代码
2010/11/19 Javascript
javascript定义函数的方法
2010/12/06 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
checkbox勾选判断代码分析
2014/06/11 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
python 动态加载的实现方法
2017/12/22 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
python抓取京东小米8手机配置信息
2018/11/13 Python
python匿名函数lambda原理及实例解析
2020/02/07 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
百思买美国官网:Best Buy
2016/07/28 全球购物
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
Vinatis德国:法国领先的葡萄酒邮购公司
2020/09/07 全球购物
毕业生自我鉴定范文
2013/11/08 职场文书
英语专业学生的自我评价
2013/12/30 职场文书
领导干部四风问题自我剖析材料
2014/09/25 职场文书
销售员岗位职责
2015/02/10 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
2019暑假学生安全口号
2019/06/27 职场文书
什么是Python装饰器?如何定义和使用?
2022/04/11 Python
方法汇总:Python 安装第三方库常用
2022/04/26 Python