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 相关文章推荐
unittest+coverage单元测试代码覆盖操作实例详解
Apr 04 Python
python3模块smtplib实现发送邮件功能
May 22 Python
面向初学者的Python编辑器Mu
Oct 08 Python
Python lambda表达式用法实例分析
Dec 25 Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
Python对接支付宝支付自实现功能
Oct 10 Python
Pyqt5 关于流式布局和滚动条的综合使用示例代码
Mar 24 Python
Python OpenCV实现测量图片物体宽度
May 27 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
python求解汉诺塔游戏
Jul 09 Python
Python之京东商品秒杀的实现示例
Jan 06 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
DC动画电影《黑暗正义联盟》曝预告 5月5日上线数字平台
2020/04/09 欧美动漫
PHP屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
2014/11/14 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
JS多物体实现缓冲运动效果示例
2016/12/20 Javascript
js获取浏览器和屏幕的各种宽度高度
2017/02/22 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
vue-cli常用设置总结
2018/02/24 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
python实现聚类算法原理
2018/02/12 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
python kafka 多线程消费者&amp;手动提交实例
2019/12/21 Python
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
关于礼仪的演讲稿
2014/01/04 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
社区工作者演讲稿
2014/05/23 职场文书
英语系本科生求职信
2014/07/15 职场文书
生产操作工岗位职责
2014/09/16 职场文书
运动会表扬稿
2015/01/16 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
分享python函数常见关键字
2022/04/26 Python