• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python基于tkinter制作图形界面的2048游戏

    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:

    变量:

    其余只是标志变量。

    功能:

    2.game:

    此类没有很多变量,只有一些布尔变量指示游戏状态。

    功能:

    方法:

    如果任何一个单元格值都达到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 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法
    下一篇:python使用timeit时间模块
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python基于tkinter制作图形界面的2048游戏 python,基于,tkinter,制作,图形,