作业3:Karel创建棋盘


你的任务是让Karel在一个空的世界中创建一个蜂鸣器的棋盘图案,如下所示。(Karel 的最终位置和它在运行结束时面对的最终方向无关紧要)。

Karel创建棋盘 Karel创建棋盘

世界说明如下:

Karel初始状态:第一行第一列的角落,面向东方;

逐步求精法

逐步求精法是一种将复杂问题分解为简单子问题、逐步细化解决方案的编程思想。

步骤1.先写出高层次的伪代码或主流程;
步骤2.把每一步拆解成更小的、易于实现的函数;
步骤3.每次只关注一个小目标,逐步完善细节;
步骤4.不断测试和调整,逐步让程序变得完整且健壮;

分析

1.类型0:奇数行从开始放置beeper;
2.类型1:偶数行开始不放置beeper,同行下一个角落放置;
3.铺奇数行的函数,可以在铺偶数行时直接复用;

应用

步骤1.先写主流程:比如“铺满一行 → 换行 → 重复”;
步骤2.再分别实现“铺满奇数行”“铺满偶数行”等子函数;
步骤3.每实现一个小目标就测试,确保每一步都正确;

建议:不要“之”字形(No Zig-Zag)

1.你可能会觉得像现实中走路那样,先从左到右铺一行,再从右到左铺下一行(之字形/Zig-Zag)很自然。但在代码实现中,这种之字形方案其实是个大坑!;
2.如果用之字形,每种行(类型0和类型1)的前置/后置条件都不一样,方向也相反,导致代码很难统一和复用;
3.更好的做法是:每一行都用同一个方向(比如都从左到右),就像课堂讲解的例子那样;
🚀这样,铺两种行的函数的前置/后置条件就能保持一致,代码结构会非常清晰、易于维护。

⏳开始你的编程之旅吧!

🔥逐步求精法🔥
🔥边开发边迭代测试🔥

你的代码要保证其通用性,点击Change World ▼ 选择40×40地图,确认你的代码也适用。

下面讨论一些情况的示例。奇数大小的棋盘很棘手,您应该确保您的程序在 5x3 世界中生成以下模式:

Karel创建棋盘

考虑单行或单列的世界1×8和8×1,这个问题很难:尝试使用分解来简化你的解决方案。

1.你能检查单行或单列吗?
2.你能让行/列适用于不同的宽度/高度?
3.一旦你完成了一行/列,你能让 Karel 填充两行吗?
4.你能让 Karel 填充三行吗?
5.你能让 Karel 填充所有行吗?
🚀分阶段逐步开发程序有助于将其分解为更简单的部分,并且是解决困难编程问题的明智策略

📝再次开始你的编程之旅吧!🎯确保您的程序在Change World ▼以下所有世界中成功运行。

🔥逐步求精法🔥
🔥边开发边迭代测试🔥