### 作业一:机器人卡雷尔
#### 一、作业背景及要求
这份作业来源于《斯坦福大学开放课程:编程方法》的讲义#7,是该课程的一部分实践任务。作业的目标是通过控制一个名为“卡雷尔”的虚拟机器人来完成一系列任务。卡雷尔是一个二维世界中的机器人,只能执行简单的动作,如前进、转向和拾取/放下物品。通过这些基础操作,学生将学习如何编写程序来解决问题。
#### 二、作业环境设置
作业提供了四个具体的问题,并附带了一个工程框架,可以在CS106课程网站的Assignment1板块找到。学生需要首先按照讲义#6的方法下载这个工程框架,使用Eclipse编写卡雷尔程序,并根据题目要求编辑代码文件。在整个过程中,学生需要不断进行“编写—调试—除错”,直到程序能够正确运行。
#### 三、作业题目详解
**习题一:**
- **任务描述**:假设卡雷尔位于一个中央正方形区域内,初始位置在房间的西北角。任务是让卡雷尔移动到房间门口取回报纸(用灰色菱形图案表示),然后再返回初始位置。
- **实现思路**:这个任务相对简单,主要是为了让学生熟悉卡雷尔的基本操作。可以通过编写三个私有方法来完成任务:`moveToNewspaper()`用于移动到报纸的位置;`pickUpNewspaper()`用于捡起报纸;`returnToStart()`用于回到初始位置。
**习题二:**
- **任务描述**:卡雷尔的任务是在斯坦福大方院内修复因地震损坏的支撑拱门。这些拱门由灰色菱形图案代表。需要确保所有缺失的部分都被补充完整。
- **实现思路**:这个问题需要考虑多个条件,包括支撑柱的间隔、高度以及是否存在已有的石头等。可以采用循环结构来逐个检查每个位置,并根据规则判断是否需要放置石头。此外,还需要编写一个方法来判断当前位置是否需要放置石头以及如何放置。
**习题三:**
- **任务描述**:在这个任务中,卡雷尔需要将一个空白矩形变成一个跳棋板。需要保证程序能够在不同尺寸的棋盘上正确运行。
- **实现思路**:这个任务的关键在于理解棋盘的布局规律。可以通过分析奇数和偶数行的差异来设计算法。例如,可以使用嵌套循环来遍历每一行和每一列,并根据当前行列的位置决定是否放置灰色方块。
**习题四:**
- **任务描述**:最后一个问题要求卡雷尔在第一行的中央放置一个灰色方块。需要注意的是,程序执行结束后界面上应当只有一个灰色方块,并且位于第一行的中间位置。
- **实现思路**:为了完成这个任务,首先需要确定第一行的中央位置。可以通过计算来获取中间的位置坐标。接下来,可以让卡雷尔向前移动到这个位置,并放置一个方块。在放置之前,可能需要先清理掉其他多余的方块。
#### 四、总结
这些作业不仅考验学生的编程技巧,还锻炼了解决实际问题的能力。通过解决这些问题,学生可以更好地理解如何将理论知识应用到实践中,同时也能培养出良好的编程习惯和调试技能。希望学生们能够通过这些练习,进一步提高自己的编程水平。