第一个是捡报纸,无难度
code:
import stanford.karel.*;
public class CollectNewspaperKarel extends SuperKarel {
public void run() {
turnRight();
move();
turnLeft();
move();
move();
move();
pickBeeper();
}
}
第二个是修柱子,有以下规则:
卡雷尔被雇去修复1989 年大地震对斯坦福大方院造成的损坏。补全支撑拱门石头(当然还
是用菱形方块表示),如下图所示:
你编写的程序应当能解决如上情况,但凡是满足本题基本规则的情况都应该能解决,规则见
题末。本题文件夹中有各种不同情况的界面,你的程序应当能在这些界面中正确运行。
卡雷尔完工后,所有空缺应当被菱形填满,效果图如下:
卡雷尔需遵循如下规则:
卡雷尔的初始位置位于第一列、第一行,面向东,携带无限的支撑石(灰色方块);
每隔三列有一个支撑柱,分别位于第一、五、九和十三列,依此类推;
最后一个支撑柱右侧紧贴一堵墙,本题中,墙壁紧贴第十三列右侧,但无论有多少组支
撑柱,你的程序都应该能正确运行;
每组支撑柱顶端为墙体,但卡雷尔不知道每个支撑住是否只有5 块石头,也不知道是
否所有的支撑柱都等高。
有些支撑柱中的石头并未完全缺损,你的程序不能在已有石头的位置再次置放。
code:
import stanford.karel.*;
public class StoneMasonKarel extends SuperKarel {
public void run(){
fixAndBack();
while(rightIsBlocked()){
if(frontIsClear()){
moveFourSteps();
fixAndBack();
}
}
}
/* 修复一整根柱子并返回
* 前置条件:处于一根柱子底部,面向东
* 后置条件:同上
*/
public void fixAndBack(){
turnLeft();
fixLine();
moveBack();
turnLeft();
}
/* 修复一根柱子面向北
* 前置条件:柱子底部,面向北
* 后置条件:柱子顶部,面向北
*/
public void fixLine(){
while(frontIsClear()){
if(noBeepersPresent()){
putBeeper();
}
move();
}
if(noBeepersPresent()){
putBeeper();
}
}
/* 回到柱子底部
* 前置条件:位于柱子顶端面向北
* 后置条件:位于柱子低端面向南
*/
public void moveBack(){
turnAround();
while(frontIsClear()){
move();
}
}
// 移动四步
public void moveFourSteps(){
move();
move();
move();
move();
}
}
不知是因为优快云更新还是什么原因,居然发现之前这文章只写了一半,坑死爹了