日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python如何寫個俄羅斯方塊

瀏覽:61日期:2022-07-06 10:05:05

俄羅斯方塊是俄羅斯人發明的一款休閑類的小游戲,這款小游戲可以說是很多人童年的主打電子游戲了,本文我們使用 Python 來實現這款小游戲。

游戲的基本規則是:移動、旋轉和擺放游戲自動輸出的各種方塊,使之排列成完整的一行或多行并且消除得分。

實現

我們實現俄羅斯方塊,主要用到的是 PyQt5 庫,安裝使用 pip install PyQt5 即可,游戲的組成比較簡單,主要包括:主界面、各種方塊和計分板,下面我們來看一下具體實現。

首先,我們來畫一個主界面,主要實現代碼如下:

class MainBoard(QFrame): msg = pyqtSignal(str) BoardWidth = 10 BoardHeight = 20 Speed = 300 def __init__(self, parent): super().__init__(parent) self.initBoard() def initBoard(self): self.timer = QBasicTimer() self.isWaitingAfterLine = False self.curX = 0 self.curY = 0 self.numLinesRemoved = 0 self.board = [] self.setFocusPolicy(Qt.StrongFocus) self.isStarted = False self.isPaused = False self.clearBoard()

看一下效果:

python如何寫個俄羅斯方塊

分數的顯示就是利用上面 msg 的 emit() 方法實現的。

我們接著畫各種方塊,方塊的形狀主要包括:T、Z、L、I、O 等,主要實現代碼如下:

class ShapeForm(object): NoShape = 0 ZShape = 1 SShape = 2 LineShape = 3 TShape = 4 SquareShape = 5 LShape = 6 MirroredLShape = 7class Shape(object): coordsTable = ( ((0, 0), (0, 0), (0, 0), (0, 0)), ((0, -1), (0, 0), (-1, 0), (-1, 1)), ((0, -1), (0, 0), (1, 0), (1, 1)), ((0, -1), (0, 0), (0, 1), (0, 2)), ((-1, 0), (0, 0), (1, 0), (0, 1)), ((0, 0), (1, 0), (0, 1), (1, 1)), ((-1, -1), (0, -1), (0, 0), (0, 1)), ((1, -1), (0, -1), (0, 0), (0, 1)) ) def __init__(self): self.coords = [[0,0] for i in range(4)] self.pieceShape = ShapeForm.NoShape self.setShape(ShapeForm.NoShape) def shape(self): return self.pieceShape def setShape(self, shape): table = Shape.coordsTable[shape] for i in range(4): for j in range(2): self.coords[i][j] = table[i][j] self.pieceShape = shape

python如何寫個俄羅斯方塊

我們知道方塊是不斷自動下落的,因此需要一個計時器來控制,主要實現代碼如下:

def timerEvent(self, event):if event.timerId() == self.timer.timerId():if self.isWaitingAfterLine:self.isWaitingAfterLine = Falseself.newPiece()else:self.oneLineDown()else:super(MainBoard, self).timerEvent(event)

在方塊下落的過程中,我們需要通過鍵盤來控制方塊的形狀以及左右移動,因此,我們需要一個按鍵事件來控制它,主要實現代碼如下:

def keyPressEvent(self, event):if not self.isStarted or self.curPiece.shape() == ShapeForm.NoShape:super(MainBoard, self).keyPressEvent(event)returnkey = event.key()if key == Qt.Key_P:self.pause()returnif self.isPaused:returnelif key == Qt.Key_Left:self.tryMove(self.curPiece, self.curX - 1, self.curY)elif key == Qt.Key_Right:self.tryMove(self.curPiece, self.curX + 1, self.curY)elif key == Qt.Key_Down:self.tryMove(self.curPiece.rotateRight(), self.curX, self.curY)elif key == Qt.Key_Up:self.tryMove(self.curPiece.rotateLeft(), self.curX, self.curY)elif key == Qt.Key_Space:self.dropDown()elif key == Qt.Key_D:self.oneLineDown()else:super(MainBoard, self).keyPressEvent(event)

當方塊落到底部后,需要來檢測是否有構成一條直線的,因此我們需要有一個方法來找到所有能消除的行并且消除它們,主要實現代碼如下:

def removeFullLines(self):numFullLines = 0rowsToRemove = []for i in range(MainBoard.BoardHeight):n = 0for j in range(MainBoard.BoardWidth):if not self.shapeAt(j, i) == ShapeForm.NoShape:n = n + 1if n == 10:rowsToRemove.append(i)rowsToRemove.reverse()for m in rowsToRemove:for k in range(m, MainBoard.BoardHeight):for l in range(MainBoard.BoardWidth):self.setShapeAt(l, k, self.shapeAt(l, k + 1))numFullLines = numFullLines + len(rowsToRemove)if numFullLines > 0:self.numLinesRemoved = self.numLinesRemoved + numFullLinesself.msg.emit(str(self.numLinesRemoved))self.isWaitingAfterLine = Trueself.curPiece.setShape(ShapeForm.NoShape)self.update()

我們來看一下最終實現效果:

python如何寫個俄羅斯方塊

是不是有內味了。

總結

本文我們使用 PyQt5 庫寫了一個俄羅斯方塊小游戲,如果你對 PyQt5 庫感興趣的話,可以嘗試使用一下。

示例代碼:py-tetris

以上就是python寫個俄羅斯方塊的詳細內容,更多關于python 俄羅斯方塊的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久99青青| 99精品视频精品精品视频| 欧美网站在线| 久久久久国产| 欧美 日韩 国产精品免费观看| 日韩三区免费| 久久精品主播| 欧美日韩视频| 激情久久五月| 亚洲激情婷婷| 亚洲一区二区三区四区电影| 亚洲精品系列| 国产精品流白浆在线观看| 夜夜嗨一区二区三区| 尤物tv在线精品| 亚洲日本网址| 日韩一级精品| 亚洲日产国产精品| 91欧美极品| 欧美韩一区二区| 高清在线一区| 亚洲高清成人| 亚洲人成网77777色在线播放 | 综合视频一区| 亚洲三级视频| 国产色噜噜噜91在线精品| 精品一区二区三区视频在线播放 | 亚洲午夜久久| 91久久久久| 成人久久久久| 日韩av免费| 91看片一区| 亚洲18在线| 色狠狠一区二区三区| 久久香蕉精品香蕉| 亚洲a成人v| 国产精品乱战久久久| 免费在线亚洲欧美| 亚洲国产综合在线看不卡| 最新国产精品久久久| 精品精品99| 久久av在线| 国产在线看片免费视频在线观看| 国产欧美日韩影院| 欧美日韩国产免费观看视频| 日韩精品中文字幕一区二区| 成人免费网站www网站高清| 亚洲专区一区| 国产盗摄——sm在线视频| 天堂va在线高清一区| 色综合www| 日韩1区2区3区| 国产精品日本| 日本精品一区二区三区在线观看视频| 日韩国产精品久久久久久亚洲| 欧美va天堂在线| 精精国产xxxx视频在线播放| 精品精品国产三级a∨在线| 亚洲免费观看高清完整版在线观| 一区免费在线| 中文国产一区| 每日更新成人在线视频| 精品一区二区三区四区五区| 国产麻豆一区二区三区| 欧美日韩午夜| 国产精品日本一区二区不卡视频| 日韩精品国产精品| 青草国产精品久久久久久| 国产乱子精品一区二区在线观看| 欧美日韩一区自拍| 国产精品4hu.www| 国内精品亚洲| 久久美女性网| 免费人成在线不卡| 日本麻豆一区二区三区视频| 欧美不卡视频| 国产精品免费不| 国产欧美日韩精品一区二区免费| 九九综合在线| 综合欧美亚洲| 岛国av在线播放| 中文亚洲免费| 日韩高清在线一区| 国产一区二区三区四区五区| 日韩伦理一区| 视频一区二区三区中文字幕| 亚洲精品激情| 麻豆精品久久久| 成人av三级| 日韩精品欧美激情一区二区| 免费国产亚洲视频| 国产探花一区在线观看| 国产视频网站一区二区三区| 日韩免费视频| 香蕉视频成人在线观看| 国产欧美一区二区三区国产幕精品| 国产 日韩 欧美一区| 五月国产精品| 欧美搞黄网站| 日韩精品一区二区三区中文在线| 国产欧美自拍一区| 欧美日韩国产v| 亚洲精品三级| 日韩理论视频| 亚洲v天堂v手机在线| 国产一区二区久久久久| 99视频精品免费观看| 日韩在线麻豆| 国产欧美一区二区三区精品酒店| 日韩视频一区| 国产一区2区在线观看| 免费日韩av片| 桃色av一区二区| 日韩 欧美一区二区三区| 999视频精品| 国产在线日韩精品| 日韩高清在线一区| 欧美日韩免费观看一区=区三区 | 日韩一二三区在线观看| 精品久久久久久久| 91亚洲无吗| 视频一区日韩精品| 黄色日韩精品| 亚洲一级二级| 伊人精品一区| 91精品久久久久久久久久不卡| 麻豆国产欧美日韩综合精品二区| 在线看片一区| 另类激情亚洲| 视频在线在亚洲| 丝袜美腿亚洲色图| 亚洲自啪免费| 黄色亚洲在线| 丝瓜av网站精品一区二区| 日韩精品2区| se01亚洲视频 | 日韩高清一区二区| 亚州av日韩av| 日韩avvvv在线播放| 国产欧美日韩影院| 里番精品3d一二三区| 久久99青青| 国产不卡精品在线| 日韩国产一区二区| 激情欧美丁香| 午夜欧美理论片| 国产一区导航| 亚洲三级在线| 久久91视频| 欧美成人综合| 日本一不卡视频| 四虎国产精品免费观看| 99久久婷婷| 日韩午夜电影| 日韩av影院| 女生影院久久| 少妇精品久久久| 久久一区精品| 黄色成人精品网站| 国产精品永久| 日韩欧美二区| 蜜桃传媒麻豆第一区在线观看 | 超碰99在线| 日韩影院免费视频| 国产精品一区高清| 99久久久国产精品美女| 日本成人在线视频网站| 99精品综合| 欧美成人精品| 国产欧美日韩综合一区在线播放| 久久久久亚洲精品中文字幕| 亚洲精品一二三**| av中文字幕在线观看第一页| 好吊一区二区三区| 日韩三级精品| 99久久99久久精品国产片果冰 | 亚洲精品成人一区| 久久久久久久久丰满| 88久久精品| 欧美资源在线| 在线观看精品| 久久精品国产99国产| 亚洲精品日韩久久| 亚洲精品一二三区区别| 成人精品高清在线视频| 免播放器亚洲一区| 激情久久婷婷| 国产精品女主播一区二区三区| av中文字幕在线观看第一页| 亚洲精品va| 亚洲www免费| 国产66精品| 精品国产一区二区三区av片| 青草综合视频| 日韩一区二区三区在线看| 亚洲综合日本| 国产美女一区| 国产农村妇女精品一区二区| 日韩精品永久网址| 日韩欧美二区|