python自带tkinter库实现棋盘覆盖图形界面


Posted in Python onJuly 17, 2019

python实现棋盘覆盖图形界面,供大家参考,具体内容如下

一、解决方案和关键代码

工具: python tkinter库

问题描述:

  在一个2^k×2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘.显然特殊方格在棋盘上出现的位置有4^k种情形.因而对任何k≥0,有4^k种不同的特殊棋盘。
  在棋盘覆盖问题中,要用下图中 4 中不同形态的 L 型骨牌覆盖一个给定的特殊棋牌上除特殊方格以外的所有方格,且任何 2 个 L 型骨牌不得重叠覆盖。易知,在任何一个 2^k × 2^k 的棋盘中,用到的 L 型骨牌个数恰为 (4^k-1)/3 。

python自带tkinter库实现棋盘覆盖图形界面

解决方法:递归与分治法

  用分治策略,可以设计解棋盘问题的一个简捷的算法。
  当 k>0 时,将 2^k * 2^k 棋盘分割为 4 个 2^(k-1) * 2^(k-1) 子棋盘;
  特殊方格必位于 4 个较小子棋盘之一中,其余 3 个子棋盘中无特殊方格。为了将这 3 个无特殊方格的子棋盘转化为特殊棋盘,我们可以用一个 L 型骨牌覆盖这 3 个较小的棋盘的汇合处,如下图所示,这 3 个子棋盘上被 L 型骨牌覆盖的方格就成为该棋盘上的特殊方格,从而将原问题化为 4 个较小规模的棋盘覆盖问题。递归的使用这种分割,直至棋盘简化为 1x1 棋盘。

python自带tkinter库实现棋盘覆盖图形界面

算法关键代码

def chessBoard(tr,tc,dr,dc,size):
 global tile
 global board
 if (size==1):
  return 0
 tile+=1
 t=tile
 s=size//2
 #the upper left corner
 if (dr<tr+s and dc<tc+s):
  chessBoard(tr,tc,dr,dc,s)
 else:
  board[tr+s-1,tc+s-1]=t
  chessBoard(tr,tc,tr+s-1,tc+s-1,s)
 #the upper right corner
 if (dr<tr+s and dc>=tc+s):
  chessBoard(tr,tc+s,dr,dc,s)
 else:
  board[tr+s-1,tc+s]=t
  chessBoard(tr,tc+s,tr+s-1,tc+s,s)
 #the lower left corner
 if (dr>=tr+s and dc<tc+s):
  chessBoard(tr+s,tc,dr,dc,s)
 else:
  board[tr+s,tc+s-1]=t
  chessBoard(tr+s,tc,tr+s,tc+s-1,s)
 #the lower right corner
 if (dr>=tr+s and dc>=tc+s):
  chessBoard(tr+s,tc+s,dr,dc,s)
 else:
  board[tr+s,tc+s]=t
  chessBoard(tr+s,tc+s,tr+s,tc+s,s)

画棋盘关键代码:

def drawboard(canvas1,board,colors,startx=50,starty=50,cellwidth=50):
 width=2*startx+len(board)*cellwidth
 height=2*starty+len(board)*cellwidth
 canvas1.config(width=width,height=height)#布置画布
 for i in range(len(board)):
  for j in range(len(board)):
   index=board[i][j]
   if index== 0:    
    color='white'#特殊方格显示为白色
   else:
    color=colors[6*index]#为了间隔开颜色
   cellx=startx+i*50
  celly=starty+j*50  
  canvas1.create_rectangle(cellx,celly,cellx+cellwidth,celly+cellwidth,fill=color,outline="black")#画方格
 canvas1.update()

二、数据测试

特殊方格坐标为(1,1),棋盘大小为(2^2*2^2)

python自带tkinter库实现棋盘覆盖图形界面

特殊方格坐标为(2,2),棋盘大小为(2^3*2^3)

 python自带tkinter库实现棋盘覆盖图形界面

完整代码下载链接点这里

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3中常用的处理时间和实现定时任务的方法的介绍
Apr 07 Python
Python的Tornado框架异步编程入门实例
Apr 24 Python
python中字符串类型json操作的注意事项
May 02 Python
pandas DataFrame 删除重复的行的实现方法
Jan 29 Python
python使用phoenixdb操作hbase的方法示例
Feb 28 Python
python编写简单端口扫描器
Sep 04 Python
详解python破解zip文件密码的方法
Jan 13 Python
安装完Python包然后找不到模块的解决步骤
Feb 13 Python
Python ini文件常用操作方法解析
Apr 26 Python
python如何求圆的面积
Jul 01 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 Python
Python3中PyQt5简单实现文件打开及保存
Jun 10 Python
python递归法解决棋盘分割问题
Jul 17 #Python
Django-Model数据库操作(增删改查、连表结构)详解
Jul 17 #Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 #Python
python递归法实现简易连连看小游戏
Mar 25 #Python
django2笔记之路由path语法的实现
Jul 17 #Python
Django之创建引擎索引报错及解决详解
Jul 17 #Python
python实现连连看辅助之图像识别延伸
Jul 17 #Python
You might like
十天学会php之第二天
2006/10/09 PHP
基于mysql的论坛(3)
2006/10/09 PHP
php单件模式结合命令链模式使用说明
2008/09/07 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
Apache PHP MySql安装配置图文教程
2016/08/27 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
用Javascript来生成ftp脚本的小例子
2013/07/03 Javascript
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
学习使用AngularJS文件上传控件
2016/02/16 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
微信小程序自定义带价格显示日历效果
2018/12/29 Javascript
jQuery实现根据身份证号获取生日、年龄、性别等信息的方法
2019/01/09 jQuery
vuejs+element UI table表格中实现禁用部分复选框的方法
2019/09/20 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
python实现划词翻译
2020/04/23 Python
利用CSS3实现单选框动画特效示例代码
2016/09/26 HTML / CSS
深入了解canvas在移动端绘制模糊的问题解决
2019/04/30 HTML / CSS
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
什么是静态路由,其特点是什么?什么是动态路由,其特点是什么?
2013/07/26 面试题
书法培训心得体会
2014/01/05 职场文书
高中生物教学反思
2014/02/05 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
公务员培的训心得体会
2014/09/01 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS