欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python完整實現(xiàn)俄羅斯方塊游戲全解

 更新時間:2022年03月08日 15:12:56   作者:是夢吧,是你吧!  
俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計和編程的益智類視頻游戲。本文將利用python實現(xiàn)這一經(jīng)典的小游戲,需要的可以參考一下

1 俄羅斯方塊游戲

《俄羅斯方塊》原本是前蘇聯(lián)科學(xué)家阿列克謝·帕基特諾夫所開發(fā)的教育用軟件,之后開始提供授權(quán)給各個游戲公司,造成各平臺上軟件大量發(fā)行的現(xiàn)象。

Game Boy版的俄羅斯方塊在日本賣出424萬套,是Game Boy史上賣最好的游戲。海灣戰(zhàn)爭時,也是前線美軍最常拿消磨時間的游戲之一。

由于俄羅斯方塊具有的數(shù)學(xué)性、動態(tài)性與知名度,也經(jīng)常拿來作為游戲程序設(shè)計的練習(xí)題材。

2 Python代碼實現(xiàn) 

2.1 展現(xiàn)

2.2 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()
        # 旋轉(zhuǎn)
        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()
 
 
#==========運(yùn)行===================
 
if __name__ == '__main__':
    app = QApplication([])
    tetris = TetrisGame()
    sys.exit(app.exec_())

到此這篇關(guān)于Python完整實現(xiàn)俄羅斯方塊游戲全解的文章就介紹到這了,更多相關(guān)Python 俄羅斯方塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pandas爆炸函數(shù)的使用技巧

    Pandas爆炸函數(shù)的使用技巧

    同事舉了個簡單的例子來說明爆炸函數(shù)的功能,我當(dāng)場就記下了這個函數(shù)名稱:爆炸函數(shù)。Hive在我的工作中使用的并不多,于是我在想:Pandas能夠?qū)崿F(xiàn)這個功能嗎?本文就來了解一下
    2021-05-05
  • 使用 Python 實現(xiàn)簡單的 switch/case 語句的方法

    使用 Python 實現(xiàn)簡單的 switch/case 語句的方法

    這篇文章主要介紹了用 Python 實現(xiàn)簡單的 switch/case 語句的方法,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-09-09
  • Python3+Pycharm+PyQt5環(huán)境搭建步驟圖文詳解

    Python3+Pycharm+PyQt5環(huán)境搭建步驟圖文詳解

    這篇文章主要介紹了Python3+Pycharm+PyQt5環(huán)境搭建步驟圖文詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • Pandas?多進(jìn)程處理數(shù)據(jù)提高速度

    Pandas?多進(jìn)程處理數(shù)據(jù)提高速度

    這篇文章主要介紹了Pandas?多進(jìn)程處理數(shù)據(jù)提高速度,Pandas多進(jìn)程的方法,pandarallel?庫,下面具體的測試方法,需要的朋友可以參考一下,希望對你的學(xué)習(xí)有所幫助
    2022-04-04
  • Django異步任務(wù)之Celery的基本使用

    Django異步任務(wù)之Celery的基本使用

    這篇文章主要給大家介紹了關(guān)于Django異步任務(wù)之Celery使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Django Form常用功能及代碼示例

    Django Form常用功能及代碼示例

    這篇文章主要介紹了Django Form常用功能及代碼示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • pytorch 如何用cuda處理數(shù)據(jù)

    pytorch 如何用cuda處理數(shù)據(jù)

    考慮到各種運(yùn)算只能在cpu或者gpu運(yùn)算,不能混和運(yùn)算,本文介紹常用的幾種把數(shù)據(jù)挪到gpu或者直接在gpu創(chuàng)建數(shù)據(jù)再進(jìn)行運(yùn)算的方法
    2021-06-06
  • python開啟多個子進(jìn)程并行運(yùn)行的方法

    python開啟多個子進(jìn)程并行運(yùn)行的方法

    這篇文章主要介紹了python開啟多個子進(jìn)程并行運(yùn)行的方法,涉及Python進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • 對python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解

    對python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解

    今天小編就為大家分享一篇對python 數(shù)據(jù)處理中的LabelEncoder 和 OneHotEncoder詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程

    僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程

    這篇文章主要介紹了僅用50行代碼實現(xiàn)一個Python編寫的計算器的教程,主要用到了PlyPlus庫使得核心代碼十分簡單,需要的朋友可以參考下
    2015-04-04

最新評論