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 相关文章推荐
Python单链表简单实现代码
Apr 27 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
基于pandas将类别属性转化为数值属性的方法
Jul 25 Python
对Pandas MultiIndex(多重索引)详解
Nov 16 Python
详解Python中pandas的安装操作说明(傻瓜版)
Apr 08 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
Pycharm修改python路径过程图解
May 22 Python
python高级特性简介
Aug 13 Python
Django ModelForm组件原理及用法详解
Oct 12 Python
最新pycharm安装教程
Nov 18 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
解决中英文字符串长度问题函数
2007/01/16 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
jquery+php实现搜索框自动提示
2014/11/28 Javascript
详解AngularJS的通信机制
2015/06/18 Javascript
JavaScript采用递归算法计算阶乘实例
2015/08/04 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
js实现把图片的绝对路径转为base64字符串、blob对象再上传
2016/12/29 Javascript
JS得到当前时间的方法示例
2017/03/24 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
微信小程序 自定义消息提示框
2017/08/06 Javascript
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
前端如何实现动画过渡效果
2021/02/05 Javascript
python django 实现验证码的功能实例代码
2017/05/18 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
python去掉空白行的多种实现代码
2018/03/19 Python
python最长回文串算法
2018/06/04 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
Gretna Green中文官网:苏格兰格林小镇
2019/10/16 全球购物
2015年综治宣传月活动总结
2015/03/25 职场文书
致运动员赞词
2015/07/22 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
七个非常实用的Python工具包总结
2021/06/15 Python