弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星
生活随笔
收集整理的這篇文章主要介紹了
弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
知乎視頻?www.zhihu.com
圖書簡介可以看這里:
童晶:《Python游戲趣味編程》新書上架了?zhuanlan.zhihu.com消滅星星是一款非常容易上癮的消除類游戲,只需點擊一個方塊,如果和其連接的有兩個或兩個以上顏色相同的方塊即可消除,游戲得分即為消除的方塊數,如圖11-1所示。首先利用二維數組存儲所有小方塊的信息并顯示;然后實現鼠標點擊小方塊、連通方塊序號的獲取;接著實現方塊消除及位置更新、得分的計算與顯示。
本章案例最終代碼一共98行,代碼參看:配套資源第11章11-8.py,視頻效果參看:配套資源第11章消滅星星.mp4。
知乎視頻?www.zhihu.comimport pgzrun # 導入游戲庫 import random # 導入隨機庫 import copy # 導入復制庫TILE_SIZE = 50 # 小方塊的大小,50*50 WIDTH = 10*TILE_SIZE # 設置窗口的寬度 500 HEIGHT = 11*TILE_SIZE # 設置窗口的高度 500 score = 0 # 得分stars = [] # 二維數組,開始為空列表,用于儲存小方塊編號 for i in range(10): # 對行遍歷row = [] # 存儲一行的數據,開始為空列表for j in range(10): # 對列遍歷x = random.randint(1, 5) # 取1-5之間的隨機數row.append(x) # 把數據添加到行列表row中stars.append(row) # 再把行列表row添加到二維數組stars中Tiles = [] # 二維數組,開始為空列表,存放所有小方塊圖片信息 def updateTiles(): # 根據stars更新Tiles二維數組for i in range(10):for j in range(10):tile = Actor('star'+str(stars[i][j])) # 對應小方塊圖片初始化tile.left = j * TILE_SIZE # 小方塊圖片最左邊的x坐標tile.top = i * TILE_SIZE # 小方塊圖片最頂部的y坐標Tiles.append(tile) # 將當前小方塊加入到列表中 updateTiles() # 根據stars更新Tiles二維數組def draw(): # 繪制模塊,每幀重復執行screen.clear() # 每幀清除屏幕,便于重新繪制for tile in Tiles:tile.draw() # 繪制所有小方塊screen.draw.text("消除方塊:"+str(score), (180, 510), fontsize=25,fontname='s', color='red')def on_mouse_down(pos, button): # 當鼠標按鍵時執行global scoreiClicked = int(pos[1]/TILE_SIZE) # 點擊方塊在二維數組中的行序號jClicked = int(pos[0]/TILE_SIZE) # 點擊方塊在二維數組中的列序號connectedSet = {(iClicked, jClicked)} # 創建集合,存儲選中方塊及其連通的點序號for k in range(20): # 重復找多次,就可以把所有連通區域都找到了tempSet = copy.deepcopy(connectedSet) # 復制一份臨時集合for each in tempSet: # 對集合中所有小方塊處理i = each[0] # 小方塊對應的行序號j = each[1] # 小方塊對應的列序號# 找到上下左右四個方塊,把顏色一致的添加到集合中,注意防止超過邊界colorId = stars[i][j]if i > 0 and stars[i-1][j] == colorId:connectedSet.add((i-1, j))if i < 9 and stars[i+1][j] == colorId:connectedSet.add((i+1, j))if j > 0 and stars[i][j-1] == colorId:connectedSet.add((i, j-1))if j < 9 and stars[i][j+1] == colorId:connectedSet.add((i, j+1))tempSet.clear() # 臨時集合清空if len(connectedSet) >= 2: # 連通方塊個數最少兩個,才消除 for each in connectedSet: # 集合中的所有方塊遍歷if stars[each[0]][each[1]] != 0:stars[each[0]][each[1]] = 0 # 標記為0,對應黑色小方塊圖片score = score + 1 # 得分等于消去的方塊數目# 從下往上遍歷,下面一個是0的話,上面的小色塊就往下落。最頂上的空出來,變成黑色for j in range(10):templist = [] # 存儲第j列的所有元素的列表for i in range(10):templist.append(stars[i][j])count = 0 # 記錄列表中值為0的元素個數# 去除列表中的0元素while 0 in templist:templist.remove(0)count += 1# 把對應0元素移動到列表起始位置for i in range(count):templist.insert(0, 0)# 再賦值給原始的二維數組for i in range(10):stars[i][j] = templist[i]# 如果某一列都消除了,則右邊列的方塊向左移zeroColId = -1for j in range(10):templist = [] # 存儲第j列的所有元素的列表for i in range(10):templist.append(stars[i][j])if sum(templist) == 0:zeroColId = j # 這一列都為0了breakif zeroColId != -1: # 表示這一列元素都為0了for j in range(zeroColId, 9, 1): # 所有右邊的列向左移動for i in range(10):stars[i][j] = stars[i][j+1]for i in range(10): # 最右邊的一列都是0stars[i][9] = 0updateTiles() # 根據stars更新Tiles二維數組pgzrun.go() # 開始執行游戲分步驟代碼、圖片音效素材、講解視頻可以從異步社區下載:
https://www.epubit.com/bookDetails?id=UB72096d97d6149?www.epubit.com分步驟代碼也可以直接從這里下載:
聯想Filez?box.lenovo.com這一章主要實現了消滅星星游戲,學習了二維數組、元組、集合、while循環語句等知識點。讀者可以嘗試在本章代碼基礎上繼續改進:
1、實現游戲結束的判斷(也就是剩下的方塊何時不能繼續消除);
2、實現某一步操作的撤銷功能(類似于下棋游戲中的悔棋功能)。
讀者也可以參考本章的開發思路,嘗試設計并分步驟實現五子棋、泡泡堂、消消樂等小游戲。
總結
以上是生活随笔為你收集整理的弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个go1.9.x 编译器内联引起的栈信
- 下一篇: python判断字母数字_Python判