A. 卡雷尔机器人 Karel编程问题 谢谢各位大侠

习题三

/*
* File: CheckerboardKarel.java
* ----------------------------
* When you finish writing it, the CheckerboardKarel class should draw
* a checkerboard using beepers, as described in Assignment 1. You
* should make sure that your program works for all of the sample
* worlds supplied in the starter folder.
*/
import stanford.karel.*;
/*
* Name:
* Section Leader:
*/
public class CheckerboardKarel extends SuperKarel {
public void run()
{
putOneLine();
while(leftIsClear())//面朝东,左手方向为空,则爬上右边的墙
{
upEast();
putOneLine();
if(rightIsClear())//面朝西,右手方向为空,则爬上左边的墙
{
upWest();
putOneLine();
}else //否则,即遇天花板时,转到正位
{
turnAround();
}
}
}

private void putOneLine()
{
while(frontIsClear())
{
if(beepersPresent())//如果当前位置有beeper,则向前
{
move();
}else //否则,向前并放一个beeper
{
move();
putBeeper();
}
}
}

//爬墙时,先判断当前位置是否有beeper,再确定下一行第一个位置是否放置beeper
private void upEast()
{
turnLeft();
if(beepersPresent())
{
move();
}else
{
move();
putBeeper();
}
turnLeft();
}
private void upWest()
{
turnRight();
if(beepersPresent())
{
move();
}else
{
move();
putBeeper();
}
turnRight();
}
}

习题四


1. import stanford.karel.*;
2.
3. public class MidpointFindingKarel extends SuperKarel {
4.
5. public void run(){
6. if(frontIsBlocked()){
7. putBeeper();
8. }else{
9. findMidpoint();
10. checkEvenLandPutR(); //若为偶数长度可以选择放在左边或者右边
11. }
12. }
13.
14.
15. public void findMidpoint(){
16. while(noBeepersPresent()){
17. putTwoBeepers();
18. back();
19. pickBeeper();
20. if(noBeepersPresent()){
21. putBeeper();
22. move();
23. }
24. }
25.
26. }
27.
28. //放2个Beeper,同时清除上一轮的标记Beeper
29. public void putTwoBeepers(){
30. turnAround();
31. if(frontIsClear()){
32. move();
33. pickBeeper();
34. turnAround();
35. move();
36. putBeeper();
37. }else{
38. turnAround();
39. putBeeper();
40. }
41. move();
42. while(frontIsClear() && noBeepersPresent()){
43. move();
44. }
45. //因Beeper而停下的情况
46. if(beepersPresent()){
47. pickBeeper();
48. turnAround();
49. move();
50. putBeeper();
51. turnAround();
52. }else{
53. putBeeper(); //第一轮面对墙的情况
54. }
55.
56. }
57.
58. //回去
59. public void back(){
60. turnAround();
61. move();
62. while(noBeepersPresent() && frontIsClear()){
63. move();
64. }
65. if(frontIsBlocked() && noBeepersPresent()){
66. turnAround();
67. while(noBeepersPresent()){
68. move();
69. }
70. }
71. turnAround();
72. }
73.
74. //检测长度是否为偶数的地图,若是则将方块置于右边
75. public void checkEvenLandPutR(){
76. if(facingEast()){
77. turnAround();
78. }
79. move();
80. if(beepersPresent()){
81. pickBeeper();
82. }
83. turnAround();
84. move();
85. }
86.
87. //检测长度是否为偶数的地图,若是则将方块置于左边
88. public void checkEvenLandPutL(){
89. if(facingEast()){
90. turnAround();
91. }
92. move();
93. if(beepersPresent()){
94. turnAround();
95. move();
96. pickBeeper();
97. turnAround();
98. move();
99. }else{
100. turnAround();
101. move();
102. }
103 }
104.
105. }
差不多就酱紫?