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 相关文章推荐
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
详解PyTorch手写数字识别(MNIST数据集)
Aug 16 Python
Django获取应用下的所有models的例子
Aug 30 Python
python读取Excel表格文件的方法
Sep 02 Python
python实现拼图小游戏
Feb 22 Python
Pycharm中切换pytorch的环境和配置的教程详解
Mar 13 Python
Python参数传递机制传值和传引用原理详解
May 22 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
pyqt5 textEdit、lineEdit操作的示例代码
Aug 12 Python
如何用python插入独创性声明
Mar 31 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 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
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
WordPress开发中的get_post_custom()函数使用解析
2016/01/04 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
JavaScript 编程引入命名空间的方法与代码
2007/08/13 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
AngularJS入门教程之 XMLHttpRequest实例讲解
2016/07/27 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
基于AngularJS实现表单验证功能
2017/07/28 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
js删除对象/数组中null、undefined、空对象及空数组方法示例
2018/11/14 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
[02:15]2015国际邀请赛选手档案IG.Ferrari 430
2015/07/30 DOTA
Python实现的简单万年历例子分享
2014/04/25 Python
Python算法应用实战之队列详解
2017/02/04 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Django REST为文件属性输出完整URL的方法
2017/12/18 Python
200 行python 代码实现 2048 游戏
2018/01/12 Python
python3中数组逆序输出方法
2020/12/01 Python
西班牙英格列斯百货英国官网:El Corte Inglés英国
2017/10/30 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
.net开发工程师面试题
2014/02/25 面试题
成品仓管员岗位职责
2013/12/11 职场文书
献爱心捐款倡议书
2014/05/14 职场文书
反腐倡廉警示教育活动心得体会
2014/09/04 职场文书
四风问题对照检查材料思想汇报
2014/10/07 职场文书
工作简报怎么写
2015/07/21 职场文书
环保建议书范文
2015/09/14 职场文书
利用Python网络爬虫爬取各大音乐评论的代码
2021/04/13 Python
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server