Python+Pygame制作簡(jiǎn)易版2048小游戲
導(dǎo)語(yǔ)
哈嘍!大家好,我是栗子,感謝大家的支持!
新的一天,新氣象,程序猿們的日常開(kāi)始敲敲敲,改改改——今天給大家來(lái)一款簡(jiǎn)單的小游戲!
2048小游戲——準(zhǔn)確的來(lái)說(shuō)確實(shí)是一個(gè)簡(jiǎn)單版本的!
吶吶吶 ,主要是擔(dān)心很多小伙伴兒直接上界面版本的看不懂,所以做了這款簡(jiǎn)單的2048,先看這篇簡(jiǎn)單版本的吧!
正文
為了搞懂這個(gè)游戲的規(guī)則,小編去直接下載了一款2048的小游戲,上手玩了一波!
然后.........完全停不下來(lái)!23333~
玩法: 用手指或鍵盤(pán)上下左右滑動(dòng),將兩個(gè)相同的數(shù)字合并,例如:2 + 2 = 4, 4 + 4 = 8... 直到
1024 + 1024 = 2048!
主要代碼
# 練習(xí)1:定義函數(shù),將列表中0元素,移動(dòng)到末尾。 # [2,0,2,0] --> [2,2,0,0] # [0,4,2,4] --> [4,2,4,0] # 適合零基礎(chǔ)同學(xué) def zero_to_end(list_target): # 選出非零元素 形成新列表 # [2, 0, 2, 0] --> [2, 2] new_list = [] for item in list_target: if item != 0: new_list.append(item) # 追加零元素 [2, 2] --> [2,2,0,0] # 判斷原列表零元素?cái)?shù)量: list_target.count(0) for i in range(list_target.count(0)): new_list.append(0) # 返回新列表 return new_list # def zero_to_end(list_target): # # 選出非零元素 形成新列表 # # [2, 0, 2, 0] --> [2, 2] # new_list = [item for item in list_target if item != 0] # # 重復(fù)生成零元素 [0] * list_target.count(0) # new_list += [0] * list_target.count(0) # # 返回新列表 # return new_list # 同學(xué)方法 # def zero_to_end(list_target): # # 刪除零元素 在后面追加 # for item in list_target: # if item == 0: # list_target.remove(0) # list_target.append(item) # # 返回新列表 # return list_target # 測(cè)試 # print(zero_to_end([1, 0, 0, 2])) # print(zero_to_end([0, 4, 2, 4])) # 練習(xí)2:定義合并相同(不相鄰也可以)列表元素的函數(shù) # [2,2,0,0] --> [4,0,0,0] # [2,0,2,0] --> [4,0,0,0] # [2,2,2,0] --> [4,2,0,0] # [4,2,0,4] --> [4,2,4,0] # [0,0,2,4] --> [2,4,0,0] # 提示: # 0元素移動(dòng)到末尾 # 相鄰相同合并 # list[0] == list[1] def merge(list_target): # 1.將零元素移動(dòng)到末尾 [2,0,2,0] --> [2,2,0,0] list_target = zero_to_end(list_target) # 2. 合并 for i in range(len(list_target) - 1): # 如果非零元素 相鄰且相同 if list_target[i] != 0 and list_target[i] == list_target[i + 1]: # 將后一個(gè)元素累加到前一個(gè)元素上 list_target[i] += list_target[i + 1] # 講后一個(gè)元素清零 list_target[i + 1] = 0 # 3. 將零元素移動(dòng)到末尾 [2,2,2,0] --> [4,0,2,0] -->[4,2,0,0] list_target = zero_to_end(list_target) return list_target # print(merge([2,2,2,0])) # 練習(xí)3:定義在控制臺(tái)中繪制2048地圖的函數(shù) 11:33 def print_atlas(list_atlas): # 00 01 02 03 for r in range(len(list_atlas)): for c in range(len(list_atlas[r])): print(list_atlas[r][c], end=" ") print() atlas01 = [ [2, 0, 0, 2], [8, 0, 4, 4], [2, 2, 0, 4], [0, 2, 4, 0], ] print_atlas(atlas01) # 練習(xí)4:在控制臺(tái)中打印第二行,與第四行元素。 # 第一列,與第三列元素。 # 第二行 # for c in range(4): # print(atlas01[1][c], end=" ") # print() # # 第四行 # for c in range(4): # print(atlas01[3][c], end=" ") # print() # # 第一列 # for r in range(4): # print(atlas01[r][0]) # # 第三列 # for r in range(4): # print(atlas01[r][2]) # 練習(xí)5,定義向上移動(dòng)的函數(shù) # 提示:將二維列表每列元素形成一維列表,交給合并merge函數(shù),再還給二維列表 def move_up(atlas): # 15:30 # 將二維列表第一列元素形成一維列表, # 00 10 20 30 for c in range(4): list_merge = [] for r in range(4): list_merge.append(atlas[r][c]) # 交給合并merge函數(shù) list_merge = merge(list_merge) # 再還給二維列表 for r in range(4): atlas[r][c] = list_merge[r] return atlas # resutl = move_up(atlas01) # print_atlas(resutl) # 擴(kuò)展作業(yè)1:定義向左移動(dòng)的函數(shù) def move_left(atlas): for r in range(4): # 從左到右依次獲取行 list_merge = [] for c in range(4): # 00 01 02 03 list_merge.append(atlas[r][c]) list_merge = merge(list_merge) for c in range(4): atlas[r][c] = list_merge[c] return atlas # resutl = move_left(atlas01) # print_atlas(resutl) # 擴(kuò)展作業(yè)2:定義向下移動(dòng)的函數(shù) # 30 20 10 00 def move_down(atlas): for c in range(4): list_merge = [] # 從下至上獲取二維列表列元素 for r in range(3,-1,-1): list_merge.append(atlas[r][c]) list_merge = merge(list_merge) # 從左至右獲取一維列表元素 # 從下至上還給二維列表 for r in range(3, -1, -1): atlas[r][c] = list_merge[3 -r] # 0 1 2 3 return atlas def move_right(atlas): for r in range(4): list_merge = [] for c in range(3, -1, -1): list_merge.append(atlas[r][c]) list_merge=merge(list_merge) for c in range(3, -1, -1): atlas[r][c] = list_merge[3 - c] return atlas # resutl = move_down(atlas01) # print_atlas(resutl) # 擴(kuò)展作業(yè)3:定義向右移動(dòng)的函數(shù) while True: shell = input("請(qǐng)輸入玩家指令wsad:") if shell=="w": move_up(atlas01) print_atlas(atlas01) elif shell=="s": move_down(atlas01) print_atlas(atlas01) elif shell=="a": move_left(atlas01) print_atlas(atlas01) elif shell=="d": move_right(atlas01) print_atlas(atlas01) else: print("輸入錯(cuò)誤")
效果圖
到此這篇關(guān)于Python+Pygame制作簡(jiǎn)易版2048小游戲的文章就介紹到這了,更多相關(guān)Python Pygame 2048內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 如何利用pandas和matplotlib繪制餅圖
這篇文章主要介紹了Python 如何利用pandas和matplotlib繪制餅圖,代碼使用了Pandas和Matplotlib庫(kù)來(lái)繪制店鋪銷售數(shù)量占比的餅圖,需要的朋友可以參考下2023-10-10詳解Python 數(shù)據(jù)庫(kù)的Connection、Cursor兩大對(duì)象
這篇文章主要介紹了Python 數(shù)據(jù)庫(kù)的Connection、Cursor兩大對(duì)象,文中通過(guò)python 數(shù)據(jù)庫(kù)圖解給大家介紹的非常詳細(xì),需要的朋友參考下吧2018-06-06python+selenium實(shí)現(xiàn)12306模擬登錄的步驟
這篇文章主要介紹了python+selenium實(shí)現(xiàn)12306模擬登錄的步驟,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01利用python實(shí)現(xiàn)全屏愛(ài)心雨向喜歡的人表白
馬上520了,教大家用Python做一個(gè)下愛(ài)心雨的特效,這篇文章主要給大家介紹了關(guān)于利用python實(shí)現(xiàn)全屏愛(ài)心雨向喜歡的人表白的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的畢業(yè)生信息管理系統(tǒng)的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的畢業(yè)生信息管理系統(tǒng)的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Python并發(fā)編程隊(duì)列與多線程最快發(fā)送http請(qǐng)求方式
假如有一個(gè)文件,里面有10萬(wàn)個(gè)url,需要對(duì)每個(gè)url發(fā)送http請(qǐng)求,并打印請(qǐng)求結(jié)果的狀態(tài)碼,如何編寫(xiě)代碼盡可能快的完成這些任務(wù)呢2021-09-09SpringBoot實(shí)現(xiàn)登錄注冊(cè)常見(jiàn)問(wèn)題解決方案
這篇文章主要介紹了SpringBoot實(shí)現(xiàn)登錄注冊(cè)常見(jiàn)問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03PyTorch線性回歸和邏輯回歸實(shí)戰(zhàn)示例
這篇文章主要介紹了PyTorch線性回歸和邏輯回歸實(shí)戰(zhàn)示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05MySQL中表的復(fù)制以及大型數(shù)據(jù)表的備份教程
這篇文章主要介紹了MySQL中表的復(fù)制以及大型數(shù)據(jù)表的備份教程,其中大表備份是采用添加觸發(fā)器增量備份的方法,需要的朋友可以參考下2015-11-11