pyhon写华容道

# coding:utf-8 #"""
#============================================================
作者:@张学恒#============================================================
"""
from random import *    #导入随机数模块
from tkinter import *   #导入图形化用户界面模块
step_number = 0     #设置步数的变量,初始值为0
difficulty = int(input('请输入数字华容道列数(3/4/5):'))
def Button_Click_1(x,y):      #按钮点击事件函数"""声明空白按钮行列号和步数的变量为全局变量"""global row_of_spaceglobal col_of_spaceglobal step_number"""判断判断点击按钮旁是否为空白按钮,是则交换位置"""if abs(x-row_of_space) + abs(y-col_of_space) == 1:step_number += 1    #将步数赋值label_step_number['text'] = '步数:' + str(step_number)  #将步数变量导入label控件"""交换按钮位置"""buttons[row_of_space,col_of_space]['text'] = buttons[x,y]['text']buttons[x,y]['text']  = ' 'row_of_space = xcol_of_space = yn = 0for row in range(3):for col in range(3):"""对比所有按钮序列是否正确,不正确则跳出函数"""if buttons[row,col]['text'] != numbers[n]:returnn += 1"""所有按钮判断完毕赢得游戏胜利"""label_welcomes['text'] = '你赢了'def Button_Click_2(x,y):      #按钮点击事件函数"""声明空白按钮行列号和步数的变量为全局变量"""global row_of_spaceglobal col_of_spaceglobal step_number"""判断判断点击按钮旁是否为空白按钮,是则交换位置"""if abs(x-row_of_space) + abs(y-col_of_space) == 1:step_number += 1    #将步数赋值label_step_number['text'] = '步数:' + str(step_number)  #将步数变量导入label控件"""交换按钮位置"""buttons[row_of_space,col_of_space]['text'] = buttons[x,y]['text']buttons[x,y]['text']  = ' 'row_of_space = xcol_of_space = yn = 0for row in range(4):for col in range(4):"""对比所有按钮序列是否正确,不正确则跳出函数"""if buttons[row,col]['text'] != numbers[n]:returnn += 1"""所有按钮判断完毕赢得游戏胜利"""label_welcomes['text'] = '你赢了'def Button_Click_3(x,y):      #按钮点击事件函数"""声明空白按钮行列号和步数的变量为全局变量"""global row_of_spaceglobal col_of_spaceglobal step_number"""判断判断点击按钮旁是否为空白按钮,是则交换位置"""if abs(x-row_of_space) + abs(y-col_of_space) == 1:step_number += 1    #将步数赋值label_step_number['text'] = '步数:' + str(step_number)  #将步数变量导入label控件"""交换按钮位置"""buttons[row_of_space,col_of_space]['text'] = buttons[x,y]['text']buttons[x,y]['text']  = ' 'row_of_space = xcol_of_space = yn = 0for row in range(5):for col in range(5):"""对比所有按钮序列是否正确,不正确则跳出函数"""if buttons[row,col]['text'] != numbers[n]:returnn += 1"""所有按钮判断完毕赢得游戏胜利"""label_welcomes['text'] = '你赢了'"""创建华容道游戏窗口"""
root = Tk()                      #创建图形化用户界面实例
root.title('数字华容道')         #设置窗口标题
root.geometry("400x400")    #将窗口大小设为高400宽400
root.configure(bg = 'black') #将窗口背景设为黑色
root.resizable(width = False,height = False)    #设置窗口为不可拉伸
"""设置欢迎语的label控件"""
label_welcomes = Label(root,text = '欢迎来到数字华容道',bg = 'black',fg = 'red',font = ("Arial",13))    #设置label控件的属性
label_welcomes.place(x = 20,y = 10,width = 250,height = 40)  #设置label控件位置
"""设置显示操作方式的label控件"""
label_operation = Label(root,text = '单击数字',bg = 'black',fg = 'white',font = ("Arial",10))
label_operation.place(x = 3,y = 40,width = 50,height = 30)
label_operation_2 = Label(root,text = '移动方块',bg = 'black',fg = 'white',font = ("Arial",10))
label_operation_2.place(x = 3,y = 60,width = 50,height = 30)
"""设置显示步数的label控件"""
label_step_number = Label(root,text = '步数:' + str(step_number),bg = 'black',fg = 'yellow',font = ("Arial",10))
label_step_number.place(x = 3,y = 20,width = 50,height = 30)if difficulty == 3:root.attributes("-topmost", True)row_of_space = 0    #存放空白按钮的行号col_of_space = 0    #存放空白按钮的列号buttons = {}      #存放数字按钮的数组numbers = ['1','2','3','4','5','6','7','8',' '] #所有数字文本的列表shuffle(numbers)     #打乱数字列表中的数字顺序"""制造数字华容道方阵"""for row in range(3):for col in range(3):"""创建数字按钮,并将行列号传入该按钮的点击事件函数"""button = Button(root,command = lambda x = row,y = col:Button_Click_1(x,y),bg = 'black',fg = 'green',font = ("Arial",35))buttons[row,col] = button   #将按钮导入数组button['text'] = numbers.pop()    #设置按钮上的文本button.place(x = 60 + col * 60,y = 60 + row * 60,width = 50,height = 50)    #设置数字按钮大小if button['text'] == ' ':        #判断是否为空白按钮,如果是,则记录到空白按钮行列号变量row_of_space = rowcol_of_space = colnumbers = ['1','2','3','4','5','6','7','8',' ']   #还原数字列表root.mainloop() #显示窗口
elif difficulty == 4:root.attributes("-topmost", True)row_of_space = 0    #存放空白按钮的行号col_of_space = 0    #存放空白按钮的列号buttons = {}      #存放数字按钮的数组numbers = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15',' '] #所有数字文本的列表shuffle(numbers)     #打乱数字列表中的数字顺序"""制造数字华容道方阵"""for row in range(4):for col in range(4):"""创建数字按钮,并将行列号传入该按钮的点击事件函数"""button = Button(root,command = lambda x = row,y = col:Button_Click_2(x,y),bg = 'black',fg = 'green',font = ("Arial",35))buttons[row,col] = button   #将按钮导入数组button['text'] = numbers.pop()    #设置按钮上的文本button.place(x = 60 + col * 60,y = 60 + row * 60,width = 50,height = 50)    #设置数字按钮大小if button['text'] == ' ':        #判断是否为空白按钮,如果是,则记录到空白按钮行列号变量row_of_space = rowcol_of_space = colnumbers = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15',' ']   #还原数字列表root.mainloop() #显示窗口
elif difficulty == 5:root.attributes("-topmost", True)row_of_space = 0    #存放空白按钮的行号col_of_space = 0    #存放空白按钮的列号buttons = {}      #存放数字按钮的数组numbers = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24',' '] #所有数字文本的列表shuffle(numbers)     #打乱数字列表中的数字顺序for row in range(5):for col in range(5):"""创建数字按钮,并将行列号传入该按钮的点击事件函数"""button = Button(root,command = lambda x = row,y = col:Button_Click_3(x,y),bg = 'black',fg = 'green',font = ("Arial",35))buttons[row,col] = button   #将按钮导入数组button['text'] = numbers.pop()    #设置按钮上的文本button.place(x = 60 + col * 60,y = 60 + row * 60,width = 50,height = 50)    #设置数字按钮大小if button['text'] == ' ':        #判断是否为空白按钮,如果是,则记录到空白按钮行列号变量row_of_space = rowcol_of_space = colnumbers = ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24',' ']   #还原数字列表root.mainloop() #显示窗口
else:print('未完成此类关卡')

在玩华容道的时候,总会遇见这样的情况

如何才能把这个4和8换个位子?才能让我的第一行顺序正确。相信不少玩家会遇到这样的情况,我刚开始接触时,总想着3 6 8 4这四个格子的交换,但是!这种想法恰恰限制住了我的思路,经过更多的尝试,我发现了不能只局限在2x2的格子中,还要进行更多的思考,3x3如何?

当然,我们不太可能会动9 5 10这三个格子,因为和我们要把4往上面调整没有太大的关系,甚至是逆着来,反而会把4往下调整。所以,我决定动一动这六个格子。

由于游戏机制也很友好,一次只能移动一个格子,所以我决定先下移2

随后我们左移3

左移8

左移8之后,我发现4、6、8这三个格子移动后,刚好可以把4放上面并且6、8下移。

这样看来,移动多一点数字,是为了更好的结果!(有点像魔方,可能一面魔方只差一个颜色没有转换齐全,我们反而要移动很多次,期间原本8个相同的颜色会变得五颜六色,但这是为了更好得到更好的结果,即9色全齐!)

4上移

6右移

8下移

3右移

2上移

这样我们就得到了1 2 3 4 第一行全齐的结果!

欢迎小伙伴们补充更多的解题方法!虽然我现在还不能把数字完全拼齐,但大家的智慧是无限的!

【python】小游戏华容道-如何把一个三角调到自己想要的顺序相关推荐

  1. python简单小游戏代码_一个简单的python小游戏---七彩同心圆

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...

  2. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  3. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

  4. 用pygame做一个简单的python小游戏---生命游戏

    用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...

  5. python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏---七彩同心圆 用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便 ...

  6. 关于python小游戏的毕业论文_使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  7. python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  8. python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)

    手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...

  9. Python小游戏,练手一定得试试,看似简单练习确实很实用

    前言 大家好,我是辣条 记得很久之前有发布过这么一篇: 30个Python小游戏,上班摸鱼我能玩一天[内附源码]不能说是爆火,只能说是口口相传了.不过终究还是有不少刚开始接触Python的人还是一脸蒙 ...

最新文章

  1. 2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest
  2. 听易中天品三国---看孔融,杨修之死
  3. 【BZOJ1500】[NOI2005]维修数列 Splay
  4. LIMIT M,N分页性能优化方案
  5. CodeForces 297A Parity Game (脑补题)
  6. emoji隐藏表情_MacBook 7大隐藏功能曝光!强大到逆天!
  7. MATLAB文件操作及读txt文件(fopen,fseek,fread,fclose)
  8. 【路径规划】基于matlab GUI改进的迪杰斯特拉算法路径规划【含Matlab源码 1031期】
  9. 《手把手教你学DSP-基于TMS320F28335》书中的错误
  10. python同构数_怎么用python判断一个数是否是同构数?
  11. NeoKylin7配置DM8数据库实例
  12. go如何实现图片拼接,文字书写
  13. 衣服尺码自定义排序sql
  14. KubeEdge+Fabedge集成环境搭建教程
  15. 基于Matlab 实现螺旋线 轨迹曲线绘制
  16. 互联网医院网络安全等保建设方案
  17. 微信公众号点歌台php,【php】微信公众平台接口开发--点歌
  18. 我的世界如何增加小游戏服务器,我的世界服务器小游戏怎么玩 骨灰玩家手把手教学...
  19. html实现开心消消乐小游戏
  20. 机器人课程比普通学科的优势

热门文章

  1. c++编写更高效的股票系统
  2. SearchEngin_Censys
  3. 【社区图书馆】启迪后人——GPT 与读书的奇妙之旅
  4. CentOS 安装卸载rpm软件
  5. 分享30个非常实用的游戏和应用源码
  6. [Transformer]Efficient Training of Visual Transformers with Small Datasets
  7. 编译型语言和脚本型语言的区别
  8. 大话设计模式之爱你一万年:第一章 设计模式基本概念:3.设计模式的六大原则
  9. Hibernate中的级联一对多关系
  10. 紫光集团发布公有云战略 掘金企业级业务