我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么在python中使用tkinter制作一个2048游戏

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么在python中使用tkinter制作一个2048游戏

怎么在python中使用tkinter制作一个2048游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创建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(指示矩阵的值受前两个函数影响),那么我们需要再次压缩网格。

  • 对于上移,我们将进行移调,然后向左轻扫,然后再次进行移调以返回原始顺序。

  • 向下移动与向上移动相同,但是我们需要反转矩阵。

  • 同样,向右与向左+向后移动相同。

  • 每次操作后,我们需要检查游戏状态,如果所有单元都被占用,我们甚至不能合并任何两个单元,即没有动作可以改变矩阵的状态,则游戏结束了。

看完上述内容,你们掌握怎么在python中使用tkinter制作一个2048游戏的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么在python中使用tkinter制作一个2048游戏

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在python中使用tkinter制作一个2048游戏

怎么在python中使用tkinter制作一个2048游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建main.py代码:from tkinter import *fro
2023-06-14

怎么在python中使用tkinter实现一个扫雷游戏

怎么在python中使用tkinter实现一个扫雷游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现代码# 导入所需库from tkinter import
2023-06-15

怎么用Matlab制作一款3D版2048小游戏

这篇文章主要介绍了怎么用Matlab制作一款3D版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Matlab制作一款3D版2048小游戏文章都会有所收获,下面我们一起来看看吧。效果:完整代码
2023-06-29

怎么用Python+Pygame制作简易版2048小游戏

这篇文章主要介绍了怎么用Python+Pygame制作简易版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python+Pygame制作简易版2048小游戏文章都会有所收获,下面我们一起来看
2023-06-29

怎么在Python中使用Tkinter制作一个翻译软件

本篇文章为大家展示了怎么在Python中使用Tkinter制作一个翻译软件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和
2023-06-06

使用python怎么制作一个猜数字游戏

本篇文章给大家分享的是有关使用python怎么制作一个猜数字游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的
2023-06-14

使用Java怎么制作一个24点游戏

本篇文章给大家分享的是有关使用Java怎么制作一个24点游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24
2023-06-15

使用CocosCreator怎么制作一个微信小游戏

使用CocosCreator怎么制作一个微信小游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、在微信公众平台下载微信开发者工具 地址: https://m
2023-06-14

怎么在python中利用tkinter制作一个倒计时工具

怎么在python中利用tkinter制作一个倒计时工具?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python的五大特点是什么python的五大特点:1.简
2023-06-14

使用python怎么制作一个俄罗斯方块小游戏

这期内容当中小编将会给大家带来有关使用python怎么制作一个俄罗斯方块小游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth
2023-06-14

使用vbs怎么制作一个数字益智游戏

今天就跟大家聊聊有关使用vbs怎么制作一个数字益智游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1. 选择操作: 游戏开始时会提示选择注册, 登录, 退出三种选项,2.注册: 注
2023-06-08

使用C语言怎么制作一个扫雷游戏

本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底
2023-06-14

使用Java怎么制作一个坦克大战游戏

这篇文章给大家介绍使用Java怎么制作一个坦克大战游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。package tankwar;import java.awt.Color;import java.awt.Font;
2023-05-30

使用C/C++怎么制作一个推箱子小游戏

使用C/C++怎么制作一个推箱子小游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。运行示例:以下为完整代码:#include #in
2023-06-15

怎么用PyQt5制作一个猜数字小游戏

今天小编给大家分享一下怎么用PyQt5制作一个猜数字小游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。开始之前,直接来看一
2023-06-29

怎么用Python+Tkinter制作在线个性签名工具

今天小编给大家分享一下怎么用Python+Tkinter制作在线个性签名工具的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。思
2023-06-29

怎么在java中使用swing实现一个扫雷游戏

这篇文章给大家介绍怎么在java中使用swing实现一个扫雷游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。版本1:package awtDemo;import java.awt.event.ActionEvent;
2023-05-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录