天天看點

Python-pygame子產品實作2048小遊戲-遊戲源碼Python-pygame子產品實作2048小遊戲

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
           

頁面展示

Python-pygame子產品實作2048小遊戲-遊戲源碼Python-pygame子產品實作2048小遊戲

總結

還存在以下問題,懶得搞了,以後有機會再搞吧~

問題1:初始頁面的時候,沒有任何歡迎詞。

問題2:遊戲結束頁面中,沒有提示資訊。

問題3:按鍵有音量,操作快的時候提示音很煩人,沒有制作靜音設定。

問題4:沒有通關設定,是以這是個無法通關的遊戲,也沒有記錄分數,是以有點沒意思。

點選此處下載下傳源碼包

最近聽了一句話,感覺很好,與大家共勉:

成功不必在我 而功力必不唐捐!