iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么在python中使用tkinter制作一个2048游戏
  • 104
分享到

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

2023-06-14 10:06:01 104人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

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

怎么在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游戏的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网Python频道,感谢各位的阅读!

--结束END--

本文标题: 怎么在python中使用tkinter制作一个2048游戏

本文链接: https://www.lsjlt.com/news/270009.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 怎么在python中使用tkinter制作一个2048游戏
    怎么在python中使用tkinter制作一个2048游戏?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。创建main.py代码:from tkinter i...
    99+
    2023-06-14
  • python基于tkinter制作图形界面的2048游戏
    目录2048游戏输出项目先决条件 创建main.py 解释:1.Board:2.game:总结 2048游戏输出 项目先决条件 前提条件如下: 1. Python 2. Tkin...
    99+
    2024-04-02
  • 怎么在python中使用tkinter实现一个扫雷游戏
    怎么在python中使用tkinter实现一个扫雷游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现代码# 导入所需库from tkin...
    99+
    2023-06-15
  • 基于JS制作一个简易的2048游戏
    效果图 实现代码 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-T...
    99+
    2024-04-02
  • 怎么用Matlab制作一款3D版2048小游戏
    这篇文章主要介绍了怎么用Matlab制作一款3D版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Matlab制作一款3D版2048小游戏文章都会有所收获,下面我们一起来看看吧。效果:完整代码...
    99+
    2023-06-29
  • 怎么用Python+Pygame制作简易版2048小游戏
    这篇文章主要介绍了怎么用Python+Pygame制作简易版2048小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用Python+Pygame制作简易版2048小游戏文章都会有所收获,下面我们一起来看...
    99+
    2023-06-29
  • 怎么在Python中使用Tkinter制作一个翻译软件
    本篇文章为大家展示了怎么在Python中使用Tkinter制作一个翻译软件,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和...
    99+
    2023-06-06
  • 使用python怎么制作一个猜数字游戏
    本篇文章给大家分享的是有关使用python怎么制作一个猜数字游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的...
    99+
    2023-06-14
  • 使用JavaScript编写一个2048小游戏
    今天就跟大家聊聊有关使用JavaScript编写一个2048小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 使用Java编写一个2048小游戏
    本文章向大家介绍使用Java编写一个2048小游戏的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页...
    99+
    2023-06-06
  • 利用Matlab制作一款3D版2048小游戏
    其实逻辑和2维版本完全一样,就不进行详细解说了,直接看效果: 效果: 目前界面还不咋好看,期待大家的优化 还是键盘↑↓←→操作嗷 完整代...
    99+
    2024-04-02
  • 使用Java怎么制作一个24点游戏
    本篇文章给大家分享的是有关使用Java怎么制作一个24点游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、常见游戏规则从扑克中每次取出4张牌。使用加减乘除,第一个能得出24...
    99+
    2023-06-15
  • 怎么在python中利用tkinter制作一个倒计时工具
    怎么在python中利用tkinter制作一个倒计时工具?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python的五大特点是什么python的五大特点:1.简...
    99+
    2023-06-14
  • 使用CocosCreator怎么制作一个微信小游戏
    使用CocosCreator怎么制作一个微信小游戏?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、在微信公众平台下载微信开发者工具 地址: http...
    99+
    2023-06-14
  • 怎么用Python实现2048小游戏
    这篇文章主要介绍怎么用Python实现2048小游戏,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、开发环境Python版本:3.6.4相关模块:pygame模块;以及一些Python自带的模块。二、环境搭建安装P...
    99+
    2023-06-15
  • 使用python怎么制作一个俄罗斯方块小游戏
    这期内容当中小编将会给大家带来有关使用python怎么制作一个俄罗斯方块小游戏,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth...
    99+
    2023-06-14
  • 怎样用Python制作一个贪吃蛇游戏
    一,首先我们可以使用Python的tkinter函数库来生成一个窗口 代码如下: import tkinter as tk //导入tkinter函数库win = tk.Tk() //创建一个窗口win.title("Python Snak...
    99+
    2023-09-25
    游戏 python
  • 使用Java怎么制作一个坦克大战游戏
    这篇文章给大家介绍使用Java怎么制作一个坦克大战游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。package tankwar;import java.awt.Color;import ...
    99+
    2023-05-30
    java
  • 使用C语言怎么制作一个扫雷游戏
    本篇文章给大家分享的是有关使用C语言怎么制作一个扫雷游戏,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C语言是什么C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底...
    99+
    2023-06-14
  • 使用vbs怎么制作一个数字益智游戏
    今天就跟大家聊聊有关使用vbs怎么制作一个数字益智游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 选择操作: 游戏开始时会提示选择注册, 登录, 退出三种选项,注册: 注册成功会...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作