最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 俄羅斯方塊游戲

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

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

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

2 Python代碼實(shí)現(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()
        # 焦點(diǎn)
        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())
    #=============游戲界面移動(dòng)到屏幕中間=======================
    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()
    #============計(jì)時(shí)器事件=================
    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完整實(shí)現(xiàn)俄羅斯方塊游戲全解的文章就介紹到這了,更多相關(guān)Python 俄羅斯方塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python+Pygame制作簡(jiǎn)易版2048小游戲

    Python+Pygame制作簡(jiǎn)易版2048小游戲

    2048作為經(jīng)典的手機(jī)端游戲一直深受大家的喜愛,本文將利用Python中的Pygame模塊制作簡(jiǎn)單版的2048游戲,感興趣的小伙伴可以了解一下
    2022-02-02
  • flask設(shè)置cookie

    flask設(shè)置cookie

    這篇文章主要介紹了flask設(shè)置cookie,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的同學(xué)可以參考閱讀
    2023-04-04
  • django restframework使用redis實(shí)現(xiàn)token認(rèn)證

    django restframework使用redis實(shí)現(xiàn)token認(rèn)證

    本文主要介紹了django restframework使用redis實(shí)現(xiàn)token認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 深入理解Python虛擬機(jī)中魔術(shù)方法的使用

    深入理解Python虛擬機(jī)中魔術(shù)方法的使用

    這篇文章主要給大家介紹在?cpython?當(dāng)中一些比較花里胡哨的魔術(shù)方法,以幫助我們自己實(shí)現(xiàn)比較花哨的功能,當(dāng)然這其中也包含一些也非常實(shí)用的魔術(shù)方法,需要的可以參考下
    2023-05-05
  • Django通過設(shè)置CORS解決跨域問題

    Django通過設(shè)置CORS解決跨域問題

    這篇文章主要介紹了Django 通過設(shè)置CORS解決跨域問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python整數(shù)對(duì)象實(shí)現(xiàn)原理詳解

    Python整數(shù)對(duì)象實(shí)現(xiàn)原理詳解

    這篇文章主要介紹了Python整數(shù)對(duì)象實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python中文件變化監(jiān)控示例(watchdog)

    python中文件變化監(jiān)控示例(watchdog)

    這篇文章主要介紹了python中文件變化監(jiān)控示例(watchdog),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • scrapy利用selenium爬取豆瓣閱讀的全步驟

    scrapy利用selenium爬取豆瓣閱讀的全步驟

    這篇文章主要給大家介紹了關(guān)于scrapy利用selenium爬取豆瓣閱讀的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法

    關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法

    今天小編就為大家分享一篇關(guān)于django 1.10 CSRF驗(yàn)證失敗的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 超簡(jiǎn)單的Matplotlib安裝與配置教程

    超簡(jiǎn)單的Matplotlib安裝與配置教程

    Matplotlib是Python的第三方繪圖庫,它非常類似于MATLAB,在使用Matplotlib軟件包之前需要對(duì)其進(jìn)行安裝,這篇文章主要給大家介紹了關(guān)于Matplotlib安裝與配置的相關(guān)資料,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

调兵山市| 时尚| 碌曲县| 治县。| 仙游县| 新平| 汽车| 林芝县| 商丘市| 烟台市| 香格里拉县| 金山区| 邵武市| 旌德县| 于田县| 托克逊县| 织金县| 城步| 通州区| 青田县| 建始县| 乃东县| 金湖县| 南岸区| 偏关县| 济源市| 那坡县| 如东县| 蓬莱市| 上林县| 宁武县| 虞城县| 张家口市| 汉源县| 阿勒泰市| 霸州市| 彭水| 多伦县| 柳州市| 武功县| 张家口市|