斯坦福卡雷尔机器人的作业1-2

 

 

第一个是捡报纸,无难度

 

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();
	}
		
}
		
		

	


不知是因为CSDN更新还是什么原因,居然发现之前这文章只写了一半,坑死爹了


你可能感兴趣的:(Java)