运用简单纯真图形化编程对象Scratch(农人过河)_农民_剧本
14.9.2 解题思路
① 仿照农夫过河问题,首先要对每个角色的位置进行描述,我们可以利用“0”和“1”对“农夫”、“羊”、“狼”、“菜”四个角色进行位置描述。个中,“0”表示未过河,“1”表示已过河;
当农夫的位置= 0时,表示农夫未过河;当农夫的位置 = 1时,表示农夫已过河;
当狼的位置= 0时,表示狼未过河;当狼的位置 = 1时,表示狼已过河;
当羊的位置= 0时,表示羊未过河;当羊的位置 = 1时,表示羊已过河;
当菜的位置= 0时,表示菜未过河;当菜的位置 = 1时,表示菜已过河;
② 农夫过河问题可以转化为(农夫,狼,羊,菜)位置安全状态判断问题,即由初始状态的(0,0,0,0),探求一种全部由安全状态构成的状态序列,转化为目标状态的(1,1,1,1)。个中,(0,0,0,0)表示农夫、狼、羊、菜都未过河,(1,1,1,1)表示农夫、狼、羊、菜都已过河;
③ (农夫,狼,羊,菜)共有
种状态,即:0000,0001,0010,0011,0100,0101,0110,0111,1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111;要在这些状态中找到从初始状态0000到目标状态1111的安全序列;
④ 当农夫不在场时,狼会吃羊,羊会吃菜,因此,0111,0011,0110,1000,1001,1100,1110为不屈安状态;此时,安全状态只有0000,0001,0010,0100,0101,1010,1011,1101,1111;
⑤ 狼、羊、菜不能自行过河,必须由农夫送过河,并且每次只能送一件,根据此条件,可以从安全状态里找到从0000到1111的可行状态序列有两个,即:
(0,0,0,0)->(1,0,1,0)->(0,0,1,0)->(1,0,1,1)->(0,0,0,1)->(1,1,0,1)->(0,1,0,1)->(1,1,1,1)
(0,0,0,0)->(1,0,1,0)->(0,0,1,0)->(1,1,1,0)->(0,1,0,0)->(1,1,0,1)->(0,1,0,1)->(1,1,1,1)
⑥ 第一个状态序列表示的意思为:
都未过河(0,0,0,0)->农夫带羊过河(1,0,1,0)->农夫单独返回(0,0,1,0)->农夫带菜过河(1,0,1,1)->农夫带羊返回(0,0,0,1)->农夫带狼过河(1,1,0,1)->农夫单独返回(0,1,0,1)->农夫带羊过河(1,1,1,1);
⑦ 第二个状态序列表示的意思为:
都未过河(0,0,0,0)->农夫带羊过河(1,0,1,0)->农夫单独返回(0,0,1,0)->农夫带狼过河(1,1,1,0)->农夫带羊返回(0,1,0,0)->农夫带白菜过河(1,1,0,1)->农夫单独返回(0,1,0,1)->农夫带羊过河(1,1,1,1);
14.9.3 实践操作14.9.3.1 设置背景/角色请在Scratch中新增农夫、狼、羊、菜角色,并为角色添加背景,调度角色和背景的尺寸,终极效果如下图所示。(实验所须要的素材,请查看附件“农夫过河/实验素材”文件夹)
14.9.3.2 定义变量
为了便于脚本的阅读和理解,我们可以将农夫、狼、羊、菜的位置状态进行定义,详细的定义的变量有:
变量值为“0”或“1”,“0”表示未过河,“1”表示已过河。
14.9.3.3 编写脚本背景脚本背景紧张实现“农夫过河”作品变量初始化、播放背景音乐和四个角色安全状态的判断,详细脚本如下:
判断农夫、狼、羊和菜是否处于安全状态的判断脚本如下:
“农夫”角色脚本
“农夫”角色的初始化脚本如下:
“农夫”单独过河脚本如下:
“农夫”带一物品过河脚本如下:
“狼”角色脚本
“狼”角色的初始化脚本如下:
“狼”过河脚本如下:
“狼”吃“羊”的脚本如下:
“羊”角色脚本
“羊”角色的初始化脚本如下:
“羊”过河脚本如下:
“羊”吃“菜”的脚本如下:
“菜”角色脚本
“菜”角色的初始化脚本如下:
“菜”过河脚本如下:
“成功提示”角色脚本
当“农夫过河”问题解答完毕并精确时,提示成功信息,如果失落败,结束解答。
初始化“成功提示”角色的脚本如下:
农夫、狼、羊、菜都到成功到达河对岸,提示成功的脚本如下:
14.9.4 作品展示
***加载中...
14.9.5探究创造“农夫过河”作品的解题思路是自己思考办理的,请读者考虑是否可以自己定义一个可以办理“农夫过河”问题的积木,实现自动办理呢?“农夫过河”为人工智能根本实例之一,通过后续人工智能知识点的学习,可以有很多种解题思路,如广度遍历、深度遍历、状态机、堆栈等方法。本文系作者个人观点,不代表本站立场,转载请注明出处!