Python控制臺輸出俄羅斯方塊移動和旋轉(zhuǎn)功能
今天填一個坑,俄羅斯方塊??!
俄羅斯方塊的移動不難實(shí)現(xiàn),但是旋轉(zhuǎn)就不太容易實(shí)現(xiàn),究其原因是因為Python中沒有數(shù)組這種數(shù)據(jù)結(jié)構(gòu),所以不能用矩陣的公式。今天把旋轉(zhuǎn)做出來了,剛好整理一下,把之前的都整合在一起
這兩天瀏覽量有點(diǎn)離譜,說明一下,我沒有使用pygame,只是在控制臺可以打印、移動和旋轉(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("請輸入俄羅斯方塊的形狀") 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()
俄羅斯方塊-移動
這一版使用了函數(shù)+字典
功能:輸入字母,打印俄羅斯方塊的*圖形,輸入468可以移動
# 文件名稱: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("請輸入圖形:") Model_Tetris.L_char(char) while True: num = int(input("請輸入移動代碼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可以移動,輸入5可以旋轉(zhuǎn)
廢話不多說,直接給出代碼:
#!/usr/bin/python # _*_coding:utf-8_*_ # 開發(fā)人員:zys # 開發(fā)時間: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("請輸入移動代碼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ā)時間: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ǔ)充一個知識點(diǎn): 字典中的key是不可變的,所以不能用list作為字典的key, 因為list可以修改,這里采用了元組作為key,指明不可改變, 后面地址查值的時候需要進(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])]) # 對應(yīng)坐標(biāo)添加到新的坐標(biāo) Tetris[char] = newTetris
到此這篇關(guān)于Python控制臺輸出俄羅斯方塊移動和旋轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Python控制臺輸出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用 Django Highcharts 實(shí)現(xiàn)數(shù)據(jù)可視化過程解析
這篇文章主要介紹了使用 Django Highcharts 實(shí)現(xiàn)數(shù)據(jù)可視化過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-07-07Python Web框架Flask信號機(jī)制(signals)介紹
這篇文章主要介紹了Python Web框架Flask信號機(jī)制(signals)介紹,本文介紹Flask的信號機(jī)制,講述信號的用途,并給出創(chuàng)建信號、訂閱信號、發(fā)送信號的方法,需要的朋友可以參考下2015-01-01appium+python自動化配置(adk、jdk、node.js)
這篇文章主要介紹了appium+python自動化配置(adk、jdk、node.js),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11