python-pygame子產品實作2048小遊戲-遊戲源碼
- Python-pygame子產品實作2048小遊戲
-
- 代碼展示
-
- 主程式,程式入口
- 定義函數-繪制第x行第y列的顯示單元的顯示情況
- 定義函數-設定操作音
- 算法-實際操作-向上操作示例
- 頁面展示
- 總結
Python-pygame子產品實作2048小遊戲
本來是想做個離線2048小遊戲APP(網上下載下傳的總是有廣告,很煩人),但是android studio使用還不熟練,先來用python捋一遍邏輯。
代碼展示
主程式,程式入口
import sys
import os
width=4 #設定行數
height=6 #設定列出
background=(250,250,250) #背景色
r=80 #設定每一個顯示小方塊的長寬
arr=[[0]*width for i in range(height)] #初始化二維數組
#定義一個pygame
pygame.init()
screen=pygame.display.set_mode((width*r,height*r),0,32)
screen.fill(background)
pygame.display.set_caption("2048")
#循環顯示頁面,并添加監控事件
while 1:
for event in pygame.event.get():
if event.type==pygame.QUIT:
exit()
if event.type==pygame.KEYDOWN:
try:
if event.key==pygame.K_UP:
print("up") #這句可以不要,不影響執行
arr=getnewassign_Up(arr,width,height)
playmusic("../source/sound.mp3")
if event.key==pygame.K_DOWN:
print("DOWN")
arr=getnewassign_Down(arr,width,height)
playmusic("../source/sound.mp3")
if event.key== pygame.K_LEFT:
print("LEFT")
arr=getnewassign_Left(arr,width,height)
playmusic("../source/sound.mp3")
if event.key==pygame.K_RIGHT:
print("RIGHT")
arr=getnewassign_Right(arr,width,height)
playmusic("../source/sound.mp3")
except:
print("遊戲結束!Fail!")
exit()
for i in range(0,width):
for j in range(0,height):
if arr[j][i]==0:
color = background
position = (i * r, j * r, i * r + r, j * r + r)
pygame.draw.rect(screen, color, position, 0)
pygame.draw.rect(screen, (0,0,0), position, 1)
else:
color = tupiancolor(arr[j][i])
position = (i * r, j * r, i * r + r, j * r + r)
pygame.draw.rect(screen, color, position, 0)
pygame.draw.rect(screen, (0, 0, 0), position, 1)
pic=addpic(screen, arr, j, i)
screen.blit(pic,(i*r+0.1*r,j*r+0.1*r))
pygame.display.update()
定義函數-繪制第x行第y列的顯示單元的顯示情況
#screen代指一個已經定義好的顯示
def addpic(screen,arr,x,y):
color=tupiancolor(arr[x][y])
font=pygame.font.Font("../font/msyh.ttc",32)
content=str(arr[x][y])
text_sf=font.render(content,True,(0,0,0),color)
return text_sf
定義函數-設定操作音
def playmusic(musicpath):
pygame.mixer.music.load(musicpath)
pygame.mixer.music.play()
算法-實際操作-向上操作示例
import pygame
import random
#随機生成一個值,相當于為一個二維數組中的非0的值,随機挑選一個設定為2或者4
def getrandominfo(str,width,height):
newstr=[]
for i in range(0,height):
for j in range(0,width):
if str[i][j]==0:
newstr.append((i,j))
temp1=random.randint(0,len(newstr)-1)
temp2=random.randint(1,2)
loc=newstr[temp1]
str[loc[0]][loc[1]]=2*temp2
return str
#定義向上操作事件
def getnewassign_Up(str,width,height):
for i in range (0,width):
newstr = []
newstr1 = []
#将該列的有數的集合在最上面,0值在最下面
for j in range(0,height):
if str[j][i]!=0:
newstr.append(str[j][i])
for temp1 in range(len(newstr),height):
newstr.append(0)
#執行算法,開始計算,把可以加的都加好
for a in range(0,len(newstr)-1):
if newstr[a]==newstr[a+1]:
newstr[a]=2*newstr[a]
newstr[a+1]=0
#重新整理結果,移除零至末尾
for temp2 in range(0, height):
if newstr[temp2] != 0:
newstr1.append(newstr[temp2])
for temp3 in range(len(newstr1), len(newstr)):
newstr1.append(0)
#将我們的緩存數組newstr1中的值,替換數組中,生成最終數組
for m in range(0,len(newstr)):
str[m][i]=newstr1[m]
str=getrandominfo(str,width,height)
return str
頁面展示
總結
還存在以下問題,懶得搞了,以後有機會再搞吧~
問題1:初始頁面的時候,沒有任何歡迎詞。
問題2:遊戲結束頁面中,沒有提示資訊。
問題3:按鍵有音量,操作快的時候提示音很煩人,沒有制作靜音設定。
問題4:沒有通關設定,是以這是個無法通關的遊戲,也沒有記錄分數,是以有點沒意思。
點選此處下載下傳源碼包
最近聽了一句話,感覺很好,與大家共勉:
成功不必在我 而功力必不唐捐!