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

  • 时间:
  • 浏览:30

Python真现棋盘笼盖图形界里,供各人参考,详细内容以下

1、处理计划战枢纽代码

东西: python tkinter库

成绩描写:

  正在1个2^k×2^k个圆格构成的棋盘中,如有1个圆格取其他圆格差别,则称该圆格为1特别圆格,且称该棋盘为1个特别棋盘.明显特别圆格正在棋盘上呈现的地位有4^k种情况.因此对任何k≥0,有4^k种差别的特别棋盘。
  正在棋盘笼盖成绩中,要用下图中 4 中差别形状的 L 型骨牌笼盖1个给定的特别棋牌上除特别圆格之外的一切圆格,且任何 2 个 L 型骨牌没有得堆叠笼盖。易知,正在任何1个 2^k × 2^k 的棋盘中,用到的 L 型骨牌个数恰为 (4^k⑴)/3 。


处理办法:递回取分治法

  用分治战略,能够设想解棋查问题的1个简便的算法。
  当 k>0 时,将 2^k * 2^k 棋盘朋分为 4 个 2^(k⑴) * 2^(k⑴) 子棋盘;
  特别圆格必位于 4 个较小子棋盘之1中,其他 3 个子棋盘中无特别圆格。为了将那 3 个无特别圆格的子棋盘转化为特别棋盘,我们能够用1个 L 型骨牌笼盖那 3 个较小的棋盘的会合处,以下图所示,那 3 个子棋盘上被 L 型骨牌笼盖的圆格便成为该棋盘上的特别圆格,从而将本成绩化为 4 个较小范围的棋盘笼盖成绩。递回的利用这类朋分,曲至棋盘简化为 1x1 棋盘。

算法枢纽代码

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=tc+s):
  chessBoard(tr,tc+s,dr,dc,s)
 else:
  board[tr+s⑴,tc+s]=t
  chessBoard(tr,tc+s,tr+s⑴,tc+s,s)
 #the lower left corner
 if (dr>=tr+s and dc=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()

2、数据测试

特别圆格坐标为(1,1),棋盘巨细为(2^2*2^2)


特别圆格坐标为(2,2),棋盘巨细为(2^3*2^3)

 

完全代码下载链接面那里

以上便是本文的全数内容,期望对各人的进修有所帮忙,也期望各人多多撑持剧本之家。