Python控制臺(tái)輸出俄羅斯方塊的方法實(shí)例
今天填一個(gè)坑,俄羅斯方塊??!
俄羅斯方塊的移動(dòng)不難實(shí)現(xiàn),但是旋轉(zhuǎn)就不太容易實(shí)現(xiàn),究其原因是因?yàn)镻ython中沒有數(shù)組這種數(shù)據(jù)結(jié)構(gòu),所以不能用矩陣的公式。今天把旋轉(zhuǎn)做出來了,剛好整理一下,把之前的都整合在一起
俄羅斯方塊-打印
功能:輸入字母,打印俄羅斯方塊的*圖形
# 盡可能吧俄羅斯方塊放在中間
Tetris = {'L': [[1, 1], [1, 2], [1, 3], [2, 3]],
'O': [[1, 1], [2, 1], [1, 2], [2, 2]],
'J': [[2, 1], [2, 2], [1, 3], [2, 3]],
'Z': [[1, 1], [2, 1], [2, 2], [3, 2]],
'S': [[1, 1], [1, 2], [2, 2], [2, 3]],
'I': [[1, 1], [1, 2], [1, 3], [1, 4]],
'T': [[1, 1], [2, 1], [2, 2], [3, 1]]}
print(Tetris)
while True:
figure = input("請(qǐng)輸入俄羅斯方塊的形狀")
flag = 0
for i in range(0, 5):
for j in range(0, 4):
for li in range(0, len(Tetris[figure])): # Tetris['L']
if j == Tetris[figure][li][0] and i == Tetris[figure][li][1]:
flag = 1
if flag == 1:
print("*", end='')
else:
print(" ", end='')
flag = 0
print()
俄羅斯方塊-移動(dòng)
這一版使用了函數(shù)+字典
功能:輸入字母,打印俄羅斯方塊的*圖形,輸入468可以移動(dòng)
# 文件名稱:Model-Tetris.PY
# 開發(fā)工具:PyCharm
Tetris = {'L': [[1, 1], [1, 2], [1, 3], [2, 3]],
'O': [[1, 1], [2, 1], [1, 2], [2, 2]],
'J': [[2, 1], [2, 2], [1, 3], [2, 3]],
'Z': [[1, 1], [2, 1], [2, 2], [3, 2]],
'S': [[1, 1], [1, 2], [2, 2], [2, 3]],
'I': [[1, 1], [1, 2], [1, 3], [1, 4]],
'T': [[1, 1], [2, 1], [2, 2], [3, 1]]}
def L_char(char):
flag = 0
for i in range(0, 7):
for j in range(0, 7):
for li in range(0, len(Tetris[char])): # Tetris['L']
if j == Tetris[char][li][0] and i == Tetris[char][li][1]:
flag = 1
if flag == 1:
print("*", end='')
else:
print(" ", end='')
flag = 0
print()
def move(char, num):
if num == 2:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] += 1
if num == 4:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] -= 1
if num == 6:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] += 1
if num == 8:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] -= 1
# 文件名稱:Test-Tetris.PY
# 開發(fā)工具:PyCharm
from Day05 import Model_Tetris
if __name__ == '__main__':
char = input("請(qǐng)輸入圖形:")
Model_Tetris.L_char(char)
while True:
num = int(input("請(qǐng)輸入移動(dòng)代碼2/4/6/8:"))
if num == 8 or num == 2 or num == 4 or num == 6:
Model_Tetris.move(char, num)
Model_Tetris.L_char(char)
else:
break
俄羅斯方塊-旋轉(zhuǎn)
主要思想:預(yù)定義4X4的坐標(biāo)轉(zhuǎn)換,旋轉(zhuǎn)式查找字典中的轉(zhuǎn)換坐標(biāo),進(jìn)行相應(yīng)的替換
功能:輸入字母,打印俄羅斯方塊的*圖形,輸入468可以移動(dòng),輸入5可以旋轉(zhuǎn)
廢話不多說,直接給出代碼:
#!/usr/bin/python
# _*_coding:utf-8_*_
# 開發(fā)人員:zys
# 開發(fā)時(shí)間:2021/4/16 16:50
# 文件名稱:Test-Tetris.PY
# 開發(fā)工具:PyCharm
import random
from Day06.test1 import Model_Tetris
if __name__ == '__main__':
# 隨機(jī)生成方法
# Character = "LOJSZIT"
# char = random.choice(Character)
char = "L"
Model_Tetris.L_char(char)
while True:
num = int(input("請(qǐng)輸入移動(dòng)代碼4/5/6/8:")) # 5是旋轉(zhuǎn)
if num == 8 or num == 4 or num == 6:
Model_Tetris.move(char, num)
Model_Tetris.L_char(char)
elif num == 5:
Model_Tetris.revolve(char)
Model_Tetris.L_char(char)
else:
break
#!/usr/bin/python
# _*_coding:utf-8_*_
# 開發(fā)人員:zys
# 開發(fā)時(shí)間:2021/4/16 16:36
# 文件名稱:Model-Tetris.PY
# 開發(fā)工具:PyCharm
Tetris = {'L': [[1, 1], [1, 2], [1, 3], [2, 3]],
'O': [[1, 1], [1, 2], [2, 1], [2, 2]],
'J': [[1, 2], [2, 2], [3, 1], [3, 2]],
'Z': [[1, 1], [1, 2], [2, 2], [2, 3]],
'S': [[1, 1], [2, 1], [2, 2], [3, 2]],
'I': [[1, 1], [2, 1], [3, 1], [4, 1]],
'T': [[1, 1], [1, 2], [2, 2], [1, 3]]}
# 4*4旋轉(zhuǎn)
'''這里補(bǔ)充一個(gè)知識(shí)點(diǎn):
字典中的key是不可變的,所以不能用list作為字典的key,
因?yàn)閘ist可以修改,這里采用了元組作為key,指明不可改變,
后面地址查值的時(shí)候需要進(jìn)行類型轉(zhuǎn)換。'''
rotateDict = {(1, 1): [4, 1], (1, 2): [3, 1], (1, 3): [2, 1], (1, 4): [1, 1],
(2, 1): [4, 2], (3, 1): [4, 3], (4, 1): [4, 4], (4, 2): [3, 4],
(4, 3): [2, 4], (4, 4): [1, 4], (3, 4): [1, 3], (2, 4): [1, 2],
(2, 2): [3, 2], (3, 2): [3, 3], (3, 3): [2, 3], (2, 3): [2, 2]}
def L_char(char):
flag = 0
for i in range(0, 5):
for j in range(0, 5):
for li in range(0, len(Tetris[char])): # Tetris['L']
if j == Tetris[char][li][0] and i == Tetris[char][li][1]:
flag = 1
if flag == 1:
print("*", end='')
else:
print(" ", end='')
flag = 0
print()
def move(char, num):
if num == 2:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] += 1
if num == 4:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] -= 1
if num == 6:
for li in range(0, len(Tetris[char])):
Tetris[char][li][0] += 1
if num == 8:
for li in range(0, len(Tetris[char])):
Tetris[char][li][1] -= 1
def revolve(char):
newTetris = [] # 新的list
for i in range(len(Tetris[char])):
newTetris.append(rotateDict[tuple(Tetris[char][i])]) # 對(duì)應(yīng)坐標(biāo)添加到新的坐標(biāo)
Tetris[char] = newTetris
總結(jié)
到此這篇關(guān)于Python控制臺(tái)輸出俄羅斯方塊的文章就介紹到這了,更多相關(guān)Python輸出俄羅斯方塊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實(shí)例
今天小編就為大家分享一篇pytorch-神經(jīng)網(wǎng)絡(luò)擬合曲線實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01
Python中Playwright?與?pyunit?結(jié)合使用詳解
這篇文章主要介紹了Python中Playwright?與?pyunit?結(jié)合使用,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03
Python實(shí)現(xiàn)12種降維算法的示例代碼
數(shù)據(jù)降維算法是機(jī)器學(xué)習(xí)算法中的大家族,與分類、回歸、聚類等算法不同,它的目標(biāo)是將向量投影到低維空間,以達(dá)到某種目的如可視化,或是做分類。本文將利用Python實(shí)現(xiàn)12種降維算法,需要的可以參考一下2022-04-04
Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解
這篇文章主要介紹了Python 實(shí)現(xiàn)靜態(tài)鏈表案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解
這篇文章主要為大家介紹了pandas探索你的數(shù)據(jù)實(shí)現(xiàn)可視化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Python3中函數(shù)參數(shù)傳遞方式實(shí)例詳解
這篇文章主要介紹了Python3中函數(shù)參數(shù)傳遞方式,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python3中函數(shù)參數(shù)傳遞的常見操作技巧,需要的朋友可以參考下2019-05-05
Python實(shí)現(xiàn)對(duì)照片中的人臉進(jìn)行顏值預(yù)測(cè)
今天給大家?guī)淼氖顷P(guān)于Python實(shí)戰(zhàn)的相關(guān)知識(shí),文章圍繞如何用Python實(shí)現(xiàn)對(duì)照片中的人臉進(jìn)行顏值預(yù)測(cè)展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
python使用梯度下降算法實(shí)現(xiàn)一個(gè)多線性回歸
這篇文章主要為大家詳細(xì)介紹了python使用梯度下降算法實(shí)現(xiàn)一個(gè)多線性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03

