用python代码编写象棋界面,棋盘覆盖问题

编写象棋界面

import turtle
t=turtle.Pen()
t.speed(100)
def angle(x,y):
    t.penup()
    t.goto(x+3,y+3)
    t.pendown()
    t.setheading(0)
    t.forward(5)
    t.goto(x+3,y+3)
    t.left(90)
    t.forward(5)
    t.penup()
    t.goto(x+3,y-3)
    t.pendown()
    t.setheading(0)
    t.forward(5)
    t.goto(x+3,y-3)
    t.left(90)
    t.forward(-5)
    t.penup()
    t.goto(x-3,y+3)
    t.pendown()
    t.setheading(0)
    t.forward(-5)
    t.goto(x-3,y+3)
    t.left(90)
    t.forward(5)
    t.penup()
    t.goto(x-3,y-3)
    t.pendown()
    t.setheading(0)
    t.forward(-5)
    t.goto(x-3,y-3)
    t.left(90)
    t.forward(-5)
def v(x,y):
    t.penup()
    t.goto(x+3,y+3)
    t.pendown()
    t.setheading(0)
    t.forward(5)
    t.goto(x+3,y+3)
    t.left(90)
    t.forward(5)
    t.penup()
    t.goto(x+3,y-3)
    t.pendown()
    t.setheading(0)
    t.forward(5)
    t.goto(x+3,y-3)
    t.left(90)
    t.forward(-5)
    t.penup()
def a(x,y):
    t.penup()
    t.goto(x-3,y+3)
    t.pendown()
    t.setheading(0)
    t.forward(-5)
    t.goto(x-3,y+3)
    t.left(90)
    t.forward(5)
    t.penup()
    t.goto(x-3,y-3)
    t.pendown()
    t.setheading(0)
    t.forward(-5)
    t.goto(x-3,y-3)
    t.left(90)
    t.forward(-5)
#1.绘制所有横线
t.penup()
t.goto(-80,90)
t.pendown()
for i in range(1,6,1):
    t.forward(160)
    t.penup()
    t.right(90)
    t.forward(20)
    t.right(90)
    t.pendown()
    t.forward(160)
    t.penup()
    t.left(90)
    t.forward(20)
    t.left(90)
    t.pendown()
#2.绘制所有竖线
t.left(90)
t.penup()
t.forward(20)
t.pendown()
for i in range(1,5,1):
    t.forward(80)
    t.penup()
    t.forward(20)
    t.pendown()
    t.forward(80)
    t.right(90)
    t.forward(20)
    t.right(90)
    t.forward(80)
    t.penup()
    t.forward(20)
    t.pendown()
    t.forward(80)
    t.left(90)
    t.forward(20)
    t.left(90)
t.forward(180)
t.left(90)
t.forward(160)
t.left(90)
t.forward(180)
#3.绘制斜线
t.left(90)
t.forward(60)
t.left(45)
t.forward(40*1.414)
t.left(45)
t.forward(-40)
t.left(45)
t.forward(40*1.414)
t.penup()
t.goto(-20,90)
t.pendown()
t.right(180)
t.forward(40*1.414)
t.right(45)
t.forward(-40)
t.right(45)
t.forward(40*1.414)
#4.绘制炮和兵的位置
angle(60,50)
angle(-60,50)
angle(60,-50)
angle(-60,-50)
angle(40,30)
angle(-40,30)
angle(40,-30)
angle(-40,-30)
angle(0,30)
angle(0,-30)

a(80,30)
a(80,-30)
v(-80,-30)
v(-80,30)
#5.绘制外围线   绘制一个长方形,设置笔的粗细
t.penup()
t.goto(-90,-100)
t.pendown()
t.pensize(10)
t.forward(200)
t.right(90)
t.forward(180)
t.right(90)
t.forward(200)
t.right(90)
t.forward(180)
t.right(90)

棋盘覆盖问题

在2^k*2^k个方格组成的棋盘中,有一个方格被占用,用下图的4种L型骨牌覆盖所有棋盘上的其余所有方格,不能重叠。

代码如下:

def chess(tr,tc,pr,pc,size):
global mark
global table
mark+=1
count=mark
if size==1:
return
half=size//2
if pr<tr+half and pc<tc+half:
chess(tr,tc,pr,pc,half)
else:
table[tr+half-1][tc+half-1]=count
chess(tr,tc,tr+half-1,tc+half-1,half)
if pr<tr+half and pc>=tc+half:
chess(tr,tc+half,pr,pc,half)
else:
table[tr+half-1][tc+half]=count
chess(tr,tc+half,tr+half-1,tc+half,half)
if pr>=tr+half and pc<tc+half:
chess(tr+half,tc,pr,pc,half)
else:
table[tr+half][tc+half-1]=count
chess(tr+half,tc,tr+half,tc+half-1,half)
if pr>=tr+half and pc>=tc+half:
chess(tr+half,tc+half,pr,pc,half)
else:
table[tr+half][tc+half]=count
chess(tr+half,tc+half,tr+half,tc+half,half)

def show(table):
n=len(table)
for i in range(n):
for j in range(n):
print(table[i][j],end=‘    ‘)
print(‘‘)

mark=0
n=8
table=[[-1 for x in range(n)] for y in range(n)]
chess(0,0,2,2,n)
show(table)

n是棋盘宽度,必须是2^k,本例中n=8,特殊格子在(2,2)位置,如下图所示:

采用分治法每次把棋盘分成4份,如果特殊格子在这个小棋盘中则继续分成4份,如果不在这个小棋盘中就把该小棋盘中靠近中央的那个格子置位,表示L型骨牌的1/3占据此处,每一次递归都会遍历查询4个小棋盘,三个不含有特殊格子的棋盘置位的3个格子正好在大棋盘中央构成一个完整的L型骨牌,依次类推,找到全部覆盖方法。运行结果如下:

原文地址:https://www.cnblogs.com/daofaziran/p/10083120.html

时间: 2024-10-10 02:21:13

用python代码编写象棋界面,棋盘覆盖问题的相关文章

150+行Python代码实现带界面的数独游戏

150行代码实现图形化数独游戏 Github地址,欢迎各位大佬们fork.star啥的,感谢: 今天闲着没事干,以前做过html+js版的数独,这次做个python版本的,界面由pygame完成,数独生成由递归算法实现,由shuffle保证每次游戏都是不一样的情况,have fun: 功能列表: 图形化的数独游戏: python实现,依赖pygame库: 随机生成游戏,每次运行都不一样: 数字填入后的正确性判断以及颜色提示: 显示剩余需填入的空格,已经操作的次数: 难度可选,通过修改需要填入的空

150+行Python代码实现带界面的数独游戏!益智烧脑了解一下!

150行代码实现图形化数独游戏 Github地址 ,欢迎各位大佬们fork.star啥的,感谢: 今天闲着没事干,以前做过html+js版的数独,这次做个python版本的,界面由pygame完成,数独生成由递归算法实现,由shuffle保证每次游戏都是不一样的情况,have fun: 功能列表: 图形化的数独游戏: python实现,依赖pygame库: 随机生成游戏,每次运行都不一样: 数字填入后的正确性判断以及颜色提示: 显示剩余需填入的空格,已经操作的次数: 难度可选,通过修改需要填入的

Python代码编写规范,你真的会吗?

前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:yangjiajia123456  最近两年的工作都是和运维相关,有时运维人员也会写一些python程序,但基本上都没有遵循相应的代码规范,一向粗暴,能用就行,既不考虑可读性也不考虑可维护性,作为一个开发人员有时候看他们写代码就很不舒服,今天就谈谈python写代码时的一些规范.如果你刚学python.不久遇到问题多,建议可以来小编的Python交流.裙 :一久武其而

Python代码编写规范

编码: a)     如无特殊情况,文件一律使用UTF-8编码 b)     如无需特殊情况,文件头部必须加入#-*-coding:utf-8-*- 缩进 a)     统一使用4个空格进行缩进 引号 a)     自然语言使用双引号"-.",正则表达式使用原生的双引号r"" b)     机器标识使用单引号'' c)      文档字符串(docstring)使用三个双引号"""-""" 空行 a)   

python代码 构建验证码

1.python代码编写 (随机验证码): 1 #coding: utf-8 2 3 import Image, ImageDraw, ImageFont, ImageFilter 4 import string, random 5 6 fontPath = "/home/itcast/ace/media/" 7 8 # 获得随机四个字母 9 def getRandomChar(): 10 return [random.choice(string.letters) for _ in r

关于 JavaFX ——我对通过代码写 UI界面的层级式分类方法

前言:在我的另一篇文章“我对 Java 标志符的命名方法”中有提到:对于返回控件的方法我是使用类似:W_borderPane() 的方式编写的. 现在我提出一种通过代码编写 UI 界面的层级式分类方法: 示例代码: // 根容器 private static BorderPane W_borderPaneBasis(){ // 创建 BorderPane _borderPaneBasis = new BorderPane(); // #自我定义 _borderPaneBasis.setBackg

棋盘覆盖问题&amp;循环赛日程表问题

---恢复内容开始--- 简单的分治,曾经看了好久想了好久也不会的随着时间变成最简单的题,由于刘汝佳书上说的不多,网上找到的又总是一个湖南OJ上的题(看都不愿意看)所以我还是仅说一下思想吧. 棋盘覆盖问题: 我觉得核心问题是在找不到特殊方格是假设了3个方格做特殊方格使分治继续. 循环赛日程表相对就脑残多了,关键是找到规律,然后分治问题到只有2*2的表格,(已经打好了),然后一点点按照规律打印其他小单位. 由于这题找到了原题,(并且很简单)我就把自己代码复制一下,棋盘覆盖问题是在网上找的,可以用来

Python——类代码编写细节

类代码编写细节 继续学习类.方法和继承. ================================================================================ class语句 以下是class语句的一般形式: class <name>(superclass,...): data = value def method(self,...): self.member = value 在class语句内,任何赋值语句都会产生类属性,而且还有特殊名称方法重载运

编写高质量Python代码的59个有效方法

作者Brett Slatkin是 Google公司高级软件工程师.他是Google消费者调查项目的工程主管及联合创始人,曾从事Google App Engine的Python基础架构工作,并利用Python来管理众多的Google服务器.Slatkin也是PubSubHubbub协议的联合创始人,还用Python为Google实现了针对该协议的系统.他拥有哥伦比亚大学计算机工程专业学士学位. 精彩书评 "Slatkin所写的这本书,其每个条目(item)都是一项独立的教程,并包含它自己的源代码.