校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > python基于tkinter制作圖形界面的2048游戲

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

熱門標簽:廣東旅游地圖標注 電話外呼系統招商代理 京華圖書館地圖標注 電話機器人貸款詐騙 打印谷歌地圖標注 淮安呼叫中心外呼系統如何 佛山通用400電話申請 蘇州人工外呼系統軟件 看懂地圖標注方法

2048游戲輸出

項目先決條件

前提條件如下:

1. Python
2. Tkinter

創建main.py

代碼:

from tkinter import *
from tkinter import messagebox
import random

class 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(ij):
  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基于tkinter制作無損音樂下載工具(附源碼)
  • python使用tkinter實現屏幕中間倒計時
  • Python使用tkinter實現小時鐘效果
  • Python tkinter實現日期選擇器
  • Python使用tkinter制作在線翻譯軟件
  • Python爬蟲+tkinter界面實現歷史天氣查詢的思路詳解
  • Python爬蟲+Tkinter制作一個翻譯軟件的示例
  • python tkinter實現下載進度條及抖音視頻去水印原理
  • 使用python tkinter開發一個爬取B站直播彈幕工具的實現代碼
  • python tkinter模塊的簡單使用

標簽:駐馬店 股票 衡水 呼和浩特 中山 畢節 湖州 江蘇

巨人網絡通訊聲明:本文標題《python基于tkinter制作圖形界面的2048游戲》,本文關鍵詞  python,基于,tkinter,制作,圖形,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python基于tkinter制作圖形界面的2048游戲》相關的同類信息!
  • 本頁收集關于python基于tkinter制作圖形界面的2048游戲的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    成人a区在线观看| 日韩成人精品视频| 九九热在线视频观看这里只有精品| 国产69精品久久久久777| 国产在线视频一区二区| 亚洲国产wwwccc36天堂| 亚洲欧洲性图库| 国产精品乱码一区二区三区软件| 欧美日韩国产一级| 538prom精品视频线放| 精品视频1区2区3区| 欧美日韩美少妇| 欧美久久久久中文字幕| 91精品国产色综合久久久蜜香臀| 在线观看国产精品网站| 日韩免费观看2025年上映的电影| 午夜久久久久久电影| 不卡的av电影| 亚洲欧洲精品一区二区三区| 久久电影网电视剧免费观看| 欧美性色欧美a在线播放| 国产精品乱人伦中文| 秋霞午夜av一区二区三区| 欧洲日韩一区二区三区| 国产精品欧美久久久久无广告| 婷婷夜色潮精品综合在线| 欧美日韩国产一二三| 久久蜜桃av一区二区天堂 | 国产一区美女在线| 91精品国产麻豆国产自产在线| 日韩高清欧美激情| 久久精品综合网| 国产区在线观看成人精品| 色婷婷综合久久| jlzzjlzz亚洲日本少妇| 丝袜美腿高跟呻吟高潮一区| 欧美电视剧免费全集观看 | 国产精品欧美一区喷水| 久久9热精品视频| 久久先锋影音av鲁色资源网| 久久99久国产精品黄毛片色诱| 欧美一级黄色大片| 国产乱人伦精品一区二区在线观看| 精品免费日韩av| 91高清视频在线| 极品美女销魂一区二区三区免费| 精品国产精品网麻豆系列| 狠狠色丁香婷婷综合| 一个色在线综合| 亚洲三级在线看| 欧美日韩成人激情| 激情图区综合网| 亚洲一区二区三区四区五区中文| 日韩一区二区免费在线观看| 国产高清在线观看免费不卡| 精品国产免费久久| 成人午夜视频免费看| 日韩1区2区3区| 一区二区三区四区激情| 欧美精品一区二区三区在线播放| 欧美系列日韩一区| av成人动漫在线观看| 国产成人精品一区二区三区四区 | 91精品91久久久中77777| 韩国视频一区二区| 国产精品亚洲视频| 精品亚洲国内自在自线福利| 国产一区二区三区av电影| 国产精品亚洲成人| 欧洲人成人精品| 欧美成人aa大片| 亚洲欧洲另类国产综合| 日韩avvvv在线播放| 亚洲在线一区二区三区| 亚洲成a人在线观看| 亚洲免费观看高清| 久久人人爽人人爽| 成人丝袜高跟foot| 国产suv精品一区二区883| 精品一区免费av| 国产aⅴ综合色| 亚洲大片在线观看| 欧美日韩在线亚洲一区蜜芽| 在线免费观看日韩欧美| 欧美中文字幕一二三区视频| 欧美少妇xxx| 日韩欧美第一区| 中文字幕不卡在线观看| 最新国产成人在线观看| 777xxx欧美| 中文字幕免费观看一区| 亚洲午夜在线观看视频在线| 天天综合色天天| 高清av一区二区| 91精品国产综合久久久久久久久久 | 亚洲麻豆国产自偷在线| 久久久天堂av| 五月婷婷欧美视频| 日本不卡高清视频| 99在线热播精品免费| 日韩欧美电影一区| 三级亚洲高清视频| 色系网站成人免费| 国产丝袜美腿一区二区三区| 亚洲欧美电影院| www.色精品| 亚洲欧洲另类国产综合| 国产成人综合在线观看| 日韩一区二区在线看| 亚洲综合激情另类小说区| 成人亚洲一区二区一| 久久精品视频一区二区| 免费在线成人网| 日韩欧美国产小视频| 亚洲国产成人精品视频| 成人99免费视频| 亚洲视频在线一区观看| av电影天堂一区二区在线| 一区二区中文字幕在线| 亚洲国产成人av好男人在线观看| 91色porny在线视频| 亚洲欧美综合色| 欧美亚洲综合另类| 久久国产精品99精品国产| 欧美一区二区三区播放老司机| 久久免费视频一区| 成人精品国产免费网站| 精品久久人人做人人爽| 97精品国产露脸对白| 亚洲第一成人在线| 在线观看一区日韩| 麻豆91在线播放免费| 久久久91精品国产一区二区精品| 亚洲激情图片一区| 久久久激情视频| 777a∨成人精品桃花网| 91社区在线播放| 国产一区二区h| 亚洲国产精品久久人人爱蜜臀| 日韩视频免费观看高清在线视频| 免费在线观看一区| 一区二区三区日韩精品| jiyouzz国产精品久久| 99久久国产综合色|国产精品| 视频在线观看91| 一区二区三区91| 国产精品的网站| 亚洲精品国产第一综合99久久| 久久在线免费观看| 欧美成人三级在线| 日韩午夜电影av| 色香蕉成人二区免费| 国产成人精品三级麻豆| 亚洲乱码精品一二三四区日韩在线| 国产亚洲欧美在线| 精品欧美乱码久久久久久| 欧美精品一区男女天堂| 久久久国际精品| 国产精品视频一二三| 国产精品久久毛片av大全日韩| 国产精品久久久久久久久图文区| 国产欧美一区二区精品秋霞影院 | 亚洲电影欧美电影有声小说| 亚洲精品高清在线观看| 亚洲美女屁股眼交| 亚洲午夜一区二区三区| 国产一区三区三区| 99久久777色| 欧美乱妇15p| 国产亚洲综合av| 石原莉奈一区二区三区在线观看| 麻豆成人在线观看| 成人午夜av电影| 日韩欧美久久一区| 亚洲女与黑人做爰| 国产精品白丝jk黑袜喷水| 国产成人在线免费| 国产成人av电影| 欧美日韩你懂得| 国产午夜精品久久| 久久电影网站中文字幕| 99精品国产91久久久久久 | 色婷婷精品久久二区二区蜜臀av| 欧美裸体一区二区三区| 国产亚洲精品资源在线26u| 亚洲激情在线激情| 成人av电影在线播放| 欧美色窝79yyyycom| 亚洲男女一区二区三区| 国产成人在线观看免费网站| 欧美裸体一区二区三区| 亚洲自拍偷拍网站| 欧美日韩在线播放三区| 一区二区高清视频在线观看| 不卡的电影网站| 国产精品久久久久久久久免费丝袜| 久久99精品国产91久久来源| 欧美伦理影视网| 久久草av在线| 欧美激情中文不卡|