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

本文介绍两个Karel编程挑战:捡报纸任务与修复支撑柱任务。捡报纸任务简单直接,而修复支撑柱则需要编写更复杂的代码来适应不同高度的柱子,并确保所有空缺处都被正确填充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

第一个是捡报纸,无难度

 

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

	


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


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值