日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python基于tkinter制作圖形界面的2048游戲

瀏覽:42日期:2022-06-23 11:46:54
2048游戲輸出

python基于tkinter制作圖形界面的2048游戲

項目先決條件

前提條件如下:

1. Python2. Tkinter

創建main.py

代碼:

from tkinter import *from tkinter import messageboximport randomclass Board: bg_color={ ’2’: ’#eee4da’, ’4’: ’#ede0c8’, ’8’: ’#edc850’, ’16’: ’#edc53f’, ’32’: ’#f67c5f’, ’64’: ’#f65e3b’, ’128’: ’#edcf72’, ’256’: ’#edcc61’, ’512’: ’#f2b179’, ’1024’: ’#f59563’, ’2048’: ’#edc22e’, } color={ ’2’: ’#776e65’, ’4’: ’#f9f6f2’, ’8’: ’#f9f6f2’, ’16’: ’#f9f6f2’, ’32’: ’#f9f6f2’, ’64’: ’#f9f6f2’, ’128’: ’#f9f6f2’, ’256’: ’#f9f6f2’, ’512’: ’#776e65’, ’1024’: ’#f9f6f2’, ’2048’: ’#f9f6f2’, } def __init__(self): self.window=Tk() self.window.title(’ProjectGurukul 2048 Game’) self.gameArea=Frame(self.window,bg= ’azure3’) self.board=[] self.gridCell=[[0]*4 for i in range(4)] self.compress=False self.merge=False self.moved=False self.score=0 for i in range(4): rows=[] for j in range(4): l=Label(self.gameArea,text=’’,bg=’azure4’, font=(’arial’,22,’bold’),width=4,height=2) l.grid(row=i,column=j,padx=7,pady=7) rows.append(l) self.board.append(rows) self.gameArea.grid() def reverse(self): for ind in range(4): i=0 j=3 while(i<j): self.gridCell[ind][i],self.gridCell[ind][j]=self.gridCell[ind][j],self.gridCell[ind][i] i+=1 j-=1 def transpose(self): self.gridCell=[list(t)for t in zip(*self.gridCell)] def compressGrid(self): self.compress=False temp=[[0] *4 for i in range(4)] for i in range(4): cnt=0 for j in range(4): if self.gridCell[i][j]!=0: temp[i][cnt]=self.gridCell[i][j] if cnt!=j: self.compress=True cnt+=1 self.gridCell=temp def mergeGrid(self): self.merge=False for i in range(4): for j in range(4 - 1): if self.gridCell[i][j] == self.gridCell[i][j + 1] and self.gridCell[i][j] != 0: self.gridCell[i][j] *= 2 self.gridCell[i][j + 1] = 0 self.score += self.gridCell[i][j] self.merge = True def random_cell(self): cells=[] for i in range(4): for j in range(4): if self.gridCell[i][j] == 0: cells.append((i, j)) curr=random.choice(cells) i=curr[0] j=curr[1] self.gridCell[i][j]=2 def can_merge(self): for i in range(4): for j in range(3): if self.gridCell[i][j] == self.gridCell[i][j+1]: return True for i in range(3): for j in range(4): if self.gridCell[i+1][j] == self.gridCell[i][j]: return True return False def paintGrid(self): for i in range(4): for j in range(4): if self.gridCell[i][j]==0: self.board[i][j].config(text=’’,bg=’azure4’) else: self.board[i][j].config(text=str(self.gridCell[i][j]), bg=self.bg_color.get(str(self.gridCell[i][j])), fg=self.color.get(str(self.gridCell[i][j])))class Game: def __init__(self,gamepanel): self.gamepanel=gamepanel self.end=False self.won=False def start(self): self.gamepanel.random_cell() self.gamepanel.random_cell() self.gamepanel.paintGrid() self.gamepanel.window.bind(’<Key>’, self.link_keys) self.gamepanel.window.mainloop() def link_keys(self,event): if self.end or self.won: return self.gamepanel.compress = False self.gamepanel.merge = False self.gamepanel.moved = False presed_key=event.keysym if presed_key==’Up’: self.gamepanel.transpose() self.gamepanel.compressGrid() self.gamepanel.mergeGrid() self.gamepanel.moved = self.gamepanel.compress or self.gamepanel.merge self.gamepanel.compressGrid() self.gamepanel.transpose() elif presed_key==’Down’: self.gamepanel.transpose() self.gamepanel.reverse() self.gamepanel.compressGrid() self.gamepanel.mergeGrid() self.gamepanel.moved = self.gamepanel.compress or self.gamepanel.merge self.gamepanel.compressGrid() self.gamepanel.reverse() self.gamepanel.transpose() elif presed_key==’Left’: self.gamepanel.compressGrid() self.gamepanel.mergeGrid() self.gamepanel.moved = self.gamepanel.compress or self.gamepanel.merge self.gamepanel.compressGrid() elif presed_key==’Right’: self.gamepanel.reverse() self.gamepanel.compressGrid() self.gamepanel.mergeGrid() self.gamepanel.moved = self.gamepanel.compress or self.gamepanel.merge self.gamepanel.compressGrid() self.gamepanel.reverse() else: pass self.gamepanel.paintGrid() print(self.gamepanel.score) flag=0 for i in range(4): for j in range(4): if(self.gamepanel.gridCell[i][j]==2048): flag=1 break if(flag==1): #found 2048 self.won=True messagebox.showinfo(’2048’, message=’You Wonnn!!’) print('won') return for i in range(4): for j in range(4): if self.gamepanel.gridCell[i][j]==0: flag=1 break if not (flag or self.gamepanel.can_merge()): self.end=True messagebox.showinfo(’2048’,’Game Over!!!’) print('Over') if self.gamepanel.moved: self.gamepanel.random_cell() self.gamepanel.paintGrid() gamepanel =Board()game2048 = Game( gamepanel)game2048.start()解釋:

我們在代碼中定義了兩個類:

1.Board:

變量:

Bg_color:這是一個字典,用于存儲每個單元格的背景色。 Color:這是一個字典,用于存儲每個單元的前景色。 Window:它是tkinter的主要窗口。 gameArea:這是一個tkinter框架小部件。 gridCell:這是一個4×4整數矩陣,存儲所有單元格的實際整數值。 Board:這是tkinter標簽小部件的4×4網格,它在tkinter窗口上顯示單元格的值。它還用于根據其gridCell值配置該單元格的背景和前景。 Score:它存儲玩家的當前分數。

其余只是標志變量。

功能:

__init __(self):這是構造函數。它使用適當的默認值初始化所有變量,例如gridCell的默認值為“ 0”,移動,合并的默認值為False,等等。 Reverse:反轉gridCell矩陣。 Transpose:它使用zip函數并進行gridCell矩陣的轉置。 CompressGrid:它將所有非空單元格向左移動,因此可以輕松完成合并。 mergeGrid:如果兩個相鄰單元格具有相同的gridCell值,則將它們的gridCell值相加。 Random_cell:首先將所有空單元格存儲在列表中,然后從創建的列表中選擇一個隨機單元格并使其gridCell值2 Can_merge:返回一個布爾值,表示我們可以合并任意兩個單元格。當且僅當兩個單元格具有相同的gridCell值時,我們才可以合并它們。 paintGrid:將前景和背景色分配給4×4網格中與其gridCell值相對應的每個單元。2.game:

此類沒有很多變量,只有一些布爾變量指示游戲狀態。

功能:

__init __(self):這是構造函數。它使用適當的默認值初始化所有變量。 開始:調用random_cell兩次,將’2’賦給兩個隨機單元格的gridCell值,然后繪制網格,然后,調用link_keys鏈接上,下,左和右鍵。 Link_keys:首先,它檢查游戲是贏還是輸,如果是,則不執行任何操作執行return語句。否則,它將繼續執行。

方法:

對于左滑動,我們將先壓縮然后合并gridCell矩陣,然后如果compress或merge為true(指示矩陣的值受前兩個函數影響),那么我們需要再次壓縮網格。 對于上移,我們將進行移調,然后向左輕掃,然后再次進行移調以返回原始順序。 向下移動與向上移動相同,但是我們需要反轉矩陣。 同樣,向右與向左+向后移動相同。 每次操作后,我們需要檢查游戲狀態,如果所有單元都被占用,我們甚至不能合并任何兩個單元,即沒有動作可以改變矩陣的狀態,則游戲結束了。

如果任何一個單元格值都達到2048,則玩家將獲勝,并且屏幕上會閃爍一個消息框,宣布獲勝者。

總結

我們已經成功地用python開發了流行的2048游戲。開發游戲而不是玩別人的游戲非常有趣,現在我們將玩自己開發的游戲。

以上就是python基于tkinter制作圖形界面的2048游戲的詳細內容,更多關于python 圖形界面2048游戲的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久久久久网| 精品视频在线观看网站| 日韩精品免费一区二区三区| 999精品在线| 视频一区二区三区在线| 久久国产精品久久久久久电车| 亚洲永久精品唐人导航网址| 亚洲激情五月| 亚洲91在线| 成人亚洲精品| 亚洲精品小说| 国产欧美日韩在线观看视频| 国内揄拍国内精品久久| 激情丁香综合| 国产精品久久久一区二区| 日韩精品一区二区三区免费观看| 美女国产精品| 国产成人77亚洲精品www| 久久美女性网| 久久狠狠亚洲综合| 久久久成人网| 国产欧美一区二区三区精品观看| 岛国av在线网站| 亚洲一二av| 91精品久久久久久久久久不卡| 免费欧美日韩| 色一区二区三区| 日韩高清欧美激情| 亚洲国产成人精品女人| 国产成人精品福利| 97se亚洲| 亚洲深深色噜噜狠狠爱网站| 久久久天天操| 麻豆极品一区二区三区| 亚洲资源网站| 欧美网站在线| 日韩欧美午夜| 国产精品白丝一区二区三区| 香蕉视频成人在线观看| 日韩国产一区二区三区| 国产精品男女| 欧美视频精品全部免费观看| 蜜桃一区二区三区在线| 欧美a级一区| 成人羞羞在线观看网站| 国产粉嫩在线观看| 国产成人a视频高清在线观看| 国产精品美女久久久久久不卡| 亚洲一二av| 亚洲精品美女| 日韩二区在线观看| 日韩国产精品久久久久久亚洲| 国产精品女主播一区二区三区| 国产福利电影在线播放| 欧美国产美女| 日韩精品影视| 欧美日中文字幕| 久久国产亚洲| 久久亚洲国产| 欧美日韩国产一区精品一区| 亚洲视频www| 视频一区视频二区中文| 亚洲精品少妇| 国产精品白丝久久av网站| 国产一区二区三区天码| 一区二区三区四区日本视频| 蜜臀久久精品| 国产精品外国| 蜜桃视频免费观看一区| 亚洲精品高潮| 久久精品资源| 不卡在线一区| 97久久超碰| 国产精品13p| 亚洲一区网站| 国产精品久久久免费| av资源中文在线天堂| 9久re热视频在线精品| 91成人在线| 成人精品中文字幕| 综合亚洲视频| 日产精品一区二区| 亚洲一区欧美二区| 日韩黄色av| 激情综合网站| 久久精品 人人爱| 色爱av综合网| 日韩精品免费视频人成| 麻豆精品久久久| 黑丝一区二区三区| 7777精品| 久久国产福利| 美女一区网站| 国产精品v亚洲精品v日韩精品| 91精品精品| 精品一区av| 日韩欧美高清一区二区三区| 私拍精品福利视频在线一区| 亚洲欧洲免费| 亚洲国产专区校园欧美| 国产精品777777在线播放| 自拍日韩欧美| 久久精品青草| 亚洲免费福利| 国产一区二区三区国产精品| 亚洲精品美女| 一区二区视频欧美| 四虎4545www国产精品 | 91麻豆国产自产在线观看亚洲| 日韩影院免费视频| 亚洲成av人片一区二区密柚| 麻豆精品在线视频| 国产午夜一区| 欧美啪啪一区| 91成人福利| 天海翼精品一区二区三区| 91精品福利| 亚洲欧美综合| 午夜日韩福利| 蜜桃一区二区三区| 婷婷成人综合| 亚洲视频播放| 综合欧美亚洲| 欧美一区=区三区| 国产精品久av福利在线观看| 欧美一区二区三区久久| 91大神在线观看线路一区| 日韩成人在线看| 欧美一区91| 黄色网一区二区| 九色porny丨国产首页在线| 欧美a级一区| 色8久久久久| 国内自拍视频一区二区三区| 亚洲综合电影| 伊人影院久久| 日韩av一级片| 国产精品13p| 视频一区中文字幕国产| 国产精品亚洲综合在线观看| 92国产精品| 蜜芽一区二区三区| 国产精品观看| 香蕉精品久久| 国产精品九九| 尤物网精品视频| 欧美日韩一区二区三区不卡视频 | 91精品国产自产观看在线| 国产精品嫩草影院在线看| 高清av不卡| 日韩在线电影| 日韩在线精品| 91精品在线免费视频| 久久久9色精品国产一区二区三区| 亚洲综合图色| 中文字幕成在线观看| 免费日韩av片| 久久人人精品| 久久影视三级福利片| 香蕉视频成人在线观看| 麻豆网站免费在线观看| 欧美一区自拍| 亚洲综合精品| 91亚洲一区| 国产午夜精品一区在线观看| 女人天堂亚洲aⅴ在线观看| 久久国产乱子精品免费女| aa国产精品| 中国字幕a在线看韩国电影| 国产丝袜一区| 亚州av一区| 免费观看久久久4p| 免费观看不卡av| 日韩久久一区二区三区| 欧美国产另类| 91免费精品国偷自产在线在线| 欧美日韩免费观看一区=区三区 | 大香伊人久久精品一区二区| 日本在线成人| 石原莉奈在线亚洲三区| 久久精品官网| 成人免费电影网址| 91亚洲国产成人久久精品| 精品伊人久久久| 久久精品色播| 国产区精品区| 国产精品久久久久av蜜臀| 日韩不卡手机在线v区| 午夜性色一区二区三区免费视频| 在线综合亚洲| 午夜日韩在线| 亚洲作爱视频| 最新国产精品| 日韩国产欧美三级| 国产欧美午夜| 国产一区二区三区91| 日韩免费av| 亚洲二区三区不卡| 亚洲精品一级| 国产精品nxnn|