使用python玩簡(jiǎn)單的游戲,好像可以練習(xí)基本語(yǔ)法。下面介紹如何使用Python PtQt5創(chuàng)建俄羅斯矩形。
先設(shè)計(jì)一下基本的流程,分別介紹每個(gè)流程所需要開(kāi)發(fā)的代碼:
開(kāi)始
設(shè)置一個(gè)定時(shí)任務(wù),循環(huán)畫(huà)背景,當(dāng)前一個(gè)方塊、下一個(gè)方塊。
生產(chǎn)出當(dāng)前方塊和下一個(gè)方塊。
使用QBasicTimer開(kāi)啟一個(gè)timer,設(shè)置時(shí)間間隔,則會(huì)根據(jù)時(shí)間間隔回調(diào)`timerEvent`方法。
= QBasicTimer()
.start(1000, self)
def timerEvent(self, event):
if event.timerId() == .timerId():
()
else:
super(QWidget, self).timerEvent(event)
方塊生產(chǎn)
首先我們要定義方塊和背景的構(gòu)建。
背景:采用二維數(shù)組的方式構(gòu)建背景,有方塊的地方則為非0,沒(méi)有方塊的地方則為0,然后循環(huán)這個(gè)二維數(shù)組畫(huà)圖。
方塊:采用一個(gè)四維數(shù)組7 * 4 * 4 * 4,第一維是7個(gè)形狀(長(zhǎng)條形狀、方塊形狀),第二維是每個(gè)形狀有4個(gè)方向,三四維度一起看做一個(gè)4*4的二維數(shù)組,存儲(chǔ)方塊的具體數(shù)據(jù)。有方塊的地方則為非0,沒(méi)有方塊的地方則為0,然后循環(huán)這個(gè)二維數(shù)組可以畫(huà)出形狀。
鍵盤監(jiān)聽(tīng)
監(jiān)聽(tīng)鍵盤的上下左右
def keyPressEvent(self, event):
key = event.key()
if key == Qt.Key_Left:
()
elif key == Qt.Key_Right:
()
elif key == Qt.Key_Down:
()
elif key == Qt.Key_Up:
()
elif key == Qt.Key_P:
()
elif key == Qt.Key_Space:
()
判斷是否可以移動(dòng)
當(dāng)進(jìn)行左右移動(dòng),或變形時(shí),需要判斷是否可以移動(dòng),主要是根據(jù)背景的是否有非0的數(shù)據(jù)而不能進(jìn)行操作。需要結(jié)合背景當(dāng)前的數(shù)據(jù)、當(dāng)前形狀的坐標(biāo)和數(shù)據(jù)進(jìn)行判斷。
1. 判斷x軸數(shù)據(jù)是否越界。
2. 判斷y軸數(shù)據(jù)是否越界。
3. 判斷方塊數(shù)據(jù)是否和背景數(shù)據(jù)發(fā)生重合。
def isChange(self, shapeData, x, y):
for i in range(0, len(shapeData)):
for j in range(0, len(shapeData[i])):
if(shapeData[i][j] == 1):
if (x + j) < 0 :
return False
if (x + j) >= :
return False
if (y + i) >= :
return False
i[y + i][x + j] > 0):
return False
return True
落地處理
當(dāng)不能在移動(dòng)的時(shí)候,說(shuō)明方塊需要落地,主要處理削行、和產(chǎn)生下一個(gè)方塊。
消除行,循環(huán)背景數(shù)據(jù),當(dāng)發(fā)現(xiàn)數(shù)組有一行數(shù)據(jù)全為非0,則需要將上面的數(shù)據(jù)copy過(guò)來(lái):
def scoreShape(self):
total = 0
for i in range(0, len)):
count = 0
for j in range(0, len[i])):
if [i][j] > 0 :
count += 1
if count == len[i]):
total += 1
for k in range(i, 1, -1):
[k] = [k - 1]
return total
產(chǎn)生下一個(gè)方塊,如果需要展示下一個(gè)方塊,則copy數(shù)據(jù)即可。
def productShape(self):
if :
= (.color, .data, , )
else:
= (, )
= (, 0)
.offsetX = + 2) *
.offsetY = 2 *
.border = 0xaaaaaa
1.《俄羅斯方快怎么處理?總結(jié)很全面速看!Python PyQt5俄羅斯方塊》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。
2.《俄羅斯方快怎么處理?總結(jié)很全面速看!Python PyQt5俄羅斯方塊》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。
3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/gl/2987687.html