成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

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

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

2048游戲輸出

項(xiàng)目先決條件

前提條件如下:

1. Python
2. Tkinter

創(chuàng)建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()

解釋:

我們?cè)诖a中定義了兩個(gè)類:

1.Board:

變量:

  • Bg_color:這是一個(gè)字典,用于存儲(chǔ)每個(gè)單元格的背景色。
  • Color:這是一個(gè)字典,用于存儲(chǔ)每個(gè)單元的前景色。
  • Window:它是tkinter的主要窗口。
  • gameArea:這是一個(gè)tkinter框架小部件。
  • gridCell:這是一個(gè)4×4整數(shù)矩陣,存儲(chǔ)所有單元格的實(shí)際整數(shù)值。
  • Board:這是tkinter標(biāo)簽小部件的4×4網(wǎng)格,它在tkinter窗口上顯示單元格的值。它還用于根據(jù)其gridCell值配置該單元格的背景和前景。
  • Score:它存儲(chǔ)玩家的當(dāng)前分?jǐn)?shù)。

其余只是標(biāo)志變量。

功能:

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

2.game:

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

功能:

  • __init __(self):這是構(gòu)造函數(shù)。它使用適當(dāng)?shù)哪J(rèn)值初始化所有變量。
  • 開始:調(diào)用random_cell兩次,將'2'賦給兩個(gè)隨機(jī)單元格的gridCell值,然后繪制網(wǎng)格,然后,調(diào)用link_keys鏈接上,下,左和右鍵。
  • Link_keys:首先,它檢查游戲是贏還是輸,如果是,則不執(zhí)行任何操作執(zhí)行return語句。否則,它將繼續(xù)執(zhí)行。

方法:

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

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

總結(jié)

我們已經(jīng)成功地用python開發(fā)了流行的2048游戲。開發(fā)游戲而不是玩別人的游戲非常有趣,現(xiàn)在我們將玩自己開發(fā)的游戲。

以上就是python基于tkinter制作圖形界面的2048游戲的詳細(xì)內(nèi)容,更多關(guān)于python 圖形界面2048游戲的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • python基于tkinter制作無損音樂下載工具(附源碼)
  • python使用tkinter實(shí)現(xiàn)屏幕中間倒計(jì)時(shí)
  • Python使用tkinter實(shí)現(xiàn)小時(shí)鐘效果
  • Python tkinter實(shí)現(xiàn)日期選擇器
  • Python使用tkinter制作在線翻譯軟件
  • Python爬蟲+tkinter界面實(shí)現(xiàn)歷史天氣查詢的思路詳解
  • Python爬蟲+Tkinter制作一個(gè)翻譯軟件的示例
  • python tkinter實(shí)現(xiàn)下載進(jìn)度條及抖音視頻去水印原理
  • 使用python tkinter開發(fā)一個(gè)爬取B站直播彈幕工具的實(shí)現(xiàn)代碼
  • python tkinter模塊的簡單使用

標(biāo)簽:駐馬店 股票 衡水 呼和浩特 中山 畢節(jié) 湖州 江蘇

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《python基于tkinter制作圖形界面的2048游戲》,本文關(guān)鍵詞  python,基于,tkinter,制作,圖形,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python基于tkinter制作圖形界面的2048游戲》相關(guān)的同類信息!
  • 本頁收集關(guān)于python基于tkinter制作圖形界面的2048游戲的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国产成人一区三区| 懂色av粉嫩av浪潮av| 日本美女一区| 99久久久久久| 麻豆明星ai换脸视频| 国产精品你懂的在线| 欧美亚洲丝袜| 国内欧美日韩| 中文字幕乱在线伦视频中文字幕乱码在线| 久久久久午夜电影| 天天干视频在线观看| 国产精品毛片久久久久久久av| 疯狂欧美牲乱大交777| 亚洲一级片在线看| 91美女视频在线| 成人国产精品久久久久久亚洲| 亚洲欧美日韩中文播放| 日本最新高清不卡中文字幕| 免费av小说| 国产精品av免费在线观看| 欧美激情精品久久久久久大尺度| 免费黄色av片| 哺乳挤奶一区二区三区免费看| 天天插天天狠天天透| 精品日韩中文字幕| 69视频在线观看免费| 日本电影一区二区| 久久久99精品久久| 菠萝蜜视频网站入口| 91在线免费看| 日韩国产欧美亚洲| 91精品国产综合久久国产大片| 亚洲第一色网站| 伊人精品久久久久7777| 91精品综合久久| 青青久精品观看视频最新| 无码精品视频一区二区三区| 亚洲欧美视频一区二区三区| 日本一区精品久久久久影院| 国产午夜精品全部视频在线播放| 亚洲三级在线播放| 蜜臀av粉嫩av懂色av| 日本福利视频在线| av一线二线| 99久久99久久免费精品小说| 亚洲色图综合图区| 91福利精品在线观看| 在线免费观看黄色小视频| 99re在线视频这里只有精品| 日韩精选在线| 女主播福利一区| 97aⅴ精品视频一二三区| 午夜激情小视频| 亚洲综合日韩中文字幕v在线| 欧美日韩在线观看视频小说| 欧美熟妇精品一区二区| 91视频综合| 91久久极品少妇xxxxⅹ软件| 亚洲私人影院在线观看| 国产精品久久久久久久久久久久午夜片| 成人激情视频网| 精品一区亚洲| 午夜精品偷拍| 女~淫辱の触手3d动漫| 粉嫩av性色av蜜臀av网站| 国产综合久久久久影院| 国产精品123区| 欧美一区三区四区| 国产视频1区2区3区| 久久国产高清视频| 日本精品一二三| caoporn-草棚在线视频最| 国产精品12p| 美女精品视频在线| 日韩av一区二区在线影视| 欧美孕妇孕交黑巨大网站| 久久偷拍免费视频| 久久久不卡网国产精品一区| 亚洲伦在线观看| 国产青青在线视频| 日韩精品在线看片z| 97国产精品视频人人做人人爱| 99久久综合色| 国产欧美日韩不卡免费| 国产福利久久精品| 亚洲成人原创| 亚洲精品一区二区毛豆| 亚洲av永久无码国产精品久久| 国产伦精品一区二区三区视频金莲| 555夜色666亚洲国产免| 欧美一级视频免费在线观看| 亚洲日本天堂| 女人裸体性做爰全过| 亚洲第一区在线观看| 国产精品日韩无码| 中文字幕1区2区3区| 96av麻豆蜜桃一区二区| 日韩欧美在线观看免费| 日韩激情第一页| 久久综合色占| 亚洲色图图片区| 黄色aaa级片| 国产精品国产自产拍在线| 青春草在线观看视频| 天海翼在线播放| 国产精品av网站| 日韩国产成人无码av毛片| 成人免费播放视频| 九九在线视频| 丁香婷婷在线| 国产精品一国产精品| 中国极品少妇videossexhd| 成人激情视频在线播放| 欧美激情一区二区三区在线视频观看| 伊人久久大香线蕉午夜av| 99re免费99re在线视频手机版| 午夜福利视频一区二区| 玖玖爱在线观看| 男人的天堂色| 成人午夜无人区一区二区| 中文字幕在线免费播放| 欧美xxxx免费虐| 在线一区二区三区| 日本韩国欧美在线| 日日夜夜一区二区| 99在线影院| 亚洲国产美女精品久久久久∴| www免费视频观看在线| 日韩成人影视| 天堂资源最新在线| 制服.丝袜.亚洲.中文.综合懂色| 亚洲高清国产拍精品26u| 亚洲日韩色图| 青柠在线免费观看| 一区二区乱子伦在线播放| 亚洲国产精品suv| 亚洲国产另类久久久精品极度| 国产精品传媒在线观看| 久久久久久无码精品人妻一区二区| 少妇又色又爽又黄的视频| 久久久久成人精品| 妺妺窝人体色www聚色窝仙踪| 中文字幕自拍vr一区二区三区| 久久狠狠婷婷| 欧美18—20岁hd第一次| 欧美91在线|欧美| 欧美日韩亚洲一二三| 国产日韩精品一区| 天堂美国久久| 亚洲日本伊人| 91视频你懂的| 国产一级片网站| 成人午夜小视频| 手机精品视频在线观看| 亚洲黄色免费电影| 超碰色偷偷男人的天堂| 亚洲午夜视频在线| 亚洲bt天天射| 永久免费成人代码| 亚洲欧美日韩一区成人| 国产污视频网站| 午夜精品免费看| 亚洲精品中文字幕在线| 欧美最猛黑人xxxx黑人猛交黄| 91福利资源站| 国产美女av| 亚洲精品一二三区| 久久精品亚洲欧美日韩精品中文字幕| 中文字幕视频网站| 91色乱码一区二区三区| 看欧美ab黄色大片视频免费| 91麻豆免费视频网站| 625成人欧美午夜电影| 四虎精品影院在线观看视频| 天天做天天爱天天高潮| 国产一区一区| 成人国产综合| 亚洲国产精品尤物yw在线观看| 国产又黄又猛又爽| 大波视频国产精品久久| 成人3d动漫一区二区三区91| 韩日欧美一区| 欧美日韩高清在线观看| 亚洲视频在线观看不卡| 污网站免费观看| 日韩av在线免费观看| 亚洲天堂av中文字幕| 国产在线二区| 国产精品一卡| 一区二区三区国产| 日韩精品高清不卡| 国产无套内射久久久国产| 亚洲精品国产精品国产| 91狠狠综合久久久| 在线视频免费在线观看一区二区| 一区二区三区|亚洲午夜| 在线视频您懂的| 不用播放器成人网| 国产亚洲精品成人| 日本免费看黄色| 国产网友自拍视频| 一区二区电影免费观看| 欧美国产精品日韩| www..com.cn蕾丝视频在线观看免费版| 黄色av免费在线观看| 午夜激情福利电影| 日本高清一区二区视频| 国产aⅴ夜夜欢一区二区三区| 最近2018年在线中文字幕高清| 久久精品在线观看视频| 妞干网2018| 免费一二一二在线视频| 久久久久久久久一区二区| 国产精品国产三级国产在线观看| 亚洲男人的天堂在线aⅴ视频| 禁断一区二区三区在线| 亚洲欧美自拍偷拍| 国产精品久久久久久妇女| 日韩欧美中文字幕电影| 熟妇无码乱子成人精品| 欧美人与z0zoxxxx特| 日韩欧美精品免费在线| 久久网站免费观看| 国产成人精品免费视频大全软件| 国产精品一区二区美女视频免费看| 性久久久久久久久久久久久久| 国产真实乱对白精彩久久| 欧美激情手机在线视频| 成人黄色大片在线观看| 亚洲欧美激情另类校园| 亚洲资源在线播放| 日韩伦理一区二区三区| 99re免费99re在线视频手机版| 欧美一区三区二区| 中国视频免男男gay| 国产97在线观看| 97精品久久久午夜一区二区三区| 国产成人手机高清在线观看网站| 香蕉视频国产在线观看| 92精品国产成人观看免费| 国产精品三区在线观看| 亚洲一二三av| 色综合666| 伊人久久一区| 久久久久久久一区二区三区| 伊人免费视频二| 牛牛精品视频在线| 中文字幕精品在线播放| 欧美日韩亚洲一区二区| 国产av精国产传媒| 欧美午夜宅男影院| 少妇精品久久久一区二区三区| 成人av一区二区三区在线观看| 日本一卡2卡三卡4卡网站| 桥本有菜av在线| 色www精品视频在线观看| 最新视频 - x88av| 成人毛片一区二区| 黄色片在线观看免费| 国产日产精品一区二区三区的介绍| 不卡的电视剧免费网站有什么| 一级黄色a视频| 国产欧美综合一区二区三区| 亚洲欧美日韩精品久久久久| 国产精品三级在线观看无码| 亚洲国产精品久久卡一| 国产欧美日韩| 美日韩黄色大片| 精品国产福利在线| 国产乱人伦偷精品视频不卡| 欧美在线免费观看| 久久国产精品一区二区三区四区| 久久久久久欧美精品色一二三四| 性高潮免费视频| 有码av在线| 国内精品福利| 欧美综合在线播放| 欧美极品欧美精品欧美视频| 黄色日韩网站视频| 一本一本久久a久久精品综合麻豆| 欧美成人直播| 国产极品一区| 激情综合五月| 美腿丝袜亚洲色图| 国产精品一线| 亚洲日本在线视频观看| 日韩在线视频网站| 日本特黄久久久高潮| 久艹在线播放| 视频一区欧美精品| 一区二区三区高清在线| 久久综合九色综合97婷婷女人| 中文字幕无码毛片免费看| 国产日韩欧美一区在线| 欧美在线se| 免费人成在线观看| 黄色网址在线免费播放| 99久久精品一区| 精品视频高潮| 欧美二区不卡| 日韩中文字幕在线视频| 欧美a一级片| 日韩av电影在线播放| 欧美另类在线播放| 在线观看视频黄色| 自拍偷拍视频亚洲| 久久麻豆视频| www污网站在线观看| 91精品人妻一区二区三区果冻| 欧美三级精品| gogogogo高清视频在线| 天天伊人狠狠| 日韩人妻无码精品久久久不卡| 欧美剧在线免费观看网站| 国产精品免费成人| 亚洲高清在线不卡| 国产视频精品网| 国产黄大片在线观看| 在线观看亚洲精品| 中文字幕一区在线| 亚洲人成小说网站色在线| 无码小电影在线观看网站免费| 免费羞羞视频网站| 午夜激情小视频| 国产精品老女人视频| 免费99精品国产自在在线| 九色porny视频在线观看| 亚洲激情第一区|