积木游戏
搭积木游戏
编写一个搭积木游戏的程序。有一个 1130 的积木拼盘以及四类积木,每类积木的数量都
不受限制。这四类积木分别是:等腰直角三角形、正方形、长方形、等腰梯形,等腰直角三
角形的腰长为 1,正方形的边长为 1,长方形的边长分别是 1、3,等腰梯形的上、下底边和
高分别是 1、3、1。游戏规则如下:
1、 积木拼盘直立,底边长度为 11,高为 30。每次开始新游戏时,积木拼盘中为空
2、 游戏开始后,玩家每次随机取一个积木放置在拼盘顶端的正中,积木的方向是随机的、
且符合下列规则:
a) 等腰...
搭积木游戏
编写一个搭积木游戏的程序。有一个 1130 的积木拼盘以及四类积木,每类积木的数量都
不受限制。这四类积木分别是:等腰直角三角形、正方形、长方形、等腰梯形,等腰直角三
角形的腰长为 1,正方形的边长为 1,长方形的边长分别是 1、3,等腰梯形的上、下底边和
高分别是 1、3、1。游戏规则如下:
1、 积木拼盘直立,底边长度为 11,高为 30。每次开始新游戏时,积木拼盘中为空
2、 游戏开始后,玩家每次随机取一个积木放置在拼盘顶端的正中,积木的方向是随机的、
且符合下列规则:
a) 等腰三角形的一条腰必须水平
b) 正方形、长方形的边必须水平或者垂直
c) 等腰梯形的上、下底边必须水平或者垂直
3、 在每个时间步上玩家可以执行下列一个操作,若操作执行后积木与其他积木互相覆盖、
或者积木的外接矩形越过拼盘边界,则操作为不可执行操作
a) 将积木左移 1个位置,该操作不可执行时尝试执行缺省操作
b) 将积木右移 1个位置,该操作不可执行时尝试执行缺省操作
c) 以积木外接矩形的中心为圆心,顺时针旋转 90度,该操作不可执行时尝试执行缺
省操作
d) 以积木外接矩形的中心为圆心,逆时针旋转 90度,该操作不可执行时尝试执行缺
省操作
e) 缺省操作:将积木下移 1个位置。玩家未指定操作时尝试执行该操作。
4、 若在一个时间步上的任何操作都不可执行操作时,玩家则继续随机取下一个积木
5、 当拼盘中连续 N(N>0)行全部被积木覆盖、且这 N行的边界没有穿越任何积木的外接矩形
时,则从拼盘中取出这 N行积木,并将位于这 N行之上的其他积木分别下移 N个位置。
考虑其中子问题——三角形的状态表示和变换
1、 三角形的状态表示法一:三个定点的位置坐标
2、 三角形的状态表示法二
a) 外接矩形所在位置(X Y)
b) 直角定点所在的位置
3、 三角形的状态表示法三
a) 外接矩形所在位置(X Y)
b) 长度为 4的 bool型数组:1100、0110、0011、1001
4、 三角形的状态表示法四
a) 外接矩形所在垂直位置 Y
b) 长度为 44的 bool型数组,每个四个元素为一组表示拼盘的一个水平位置。三角形
所在位置对应的四个元素构成为 1100、0110、0011、或者 1001,其他元素全 0。
5、 变换
a) 左移、右移
b) 顺时针旋转、逆时针旋转
c) 下落
选用不同的状态表示数据结构,则需要不同的状态变换算法。这几个状态表示方法之间又是
可以互相转换的。
因此:程序 = 数据结构 + 算法
1、 表示三角形状态的数据结构变化了,必定引起其状态变化算法的变化
2、 三角形状态的表示法变化了,只对其他积木类型的下落操作有影响,涉及到三角形与其
他类型积木是否存在互相覆盖的可能
从软件开发的角度,最后将能够一目了然的看出来:用来表示三角形状态的数据结构、改变
三角形状态的算法、存储三角形状态的变量。可以采取的手段
1、 命名上,使用相同的前缀
2、 代码编排上,写在程序中的邻近区域
面向对象的编程语言与过程式编程语言的差别:面向对象的编程语言从语法上支持程序员描
述子问题、子问题状态的数据结构、子问题状态的变换算法、子问题的状态变量
小问题:令 a是个长度为 44的 bool型数组,每个四个元素为一组表示拼盘的一个水平位置,
最左边的水平位置对应 a[0]~a[3],依此类推各水平位置对应的四个元素。三角形所在位置对
应的四个元素构成为 1100、0110、0011、或者 1001,其他元素全 0。请写一个 bool 函数
move2right(),实现三角形的右移操作,
函数耗时最少。假设 bool函数 down()实现了尝
试执行缺省操作。
1 2
4 3
1
2 4
3
1 2 4 3
本文档为【积木游戏】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。