2011a
受け取る†
#define R OUT_C
#define L OUT_A
#define SLIDE OUT_B
#define RL SENSOR_1
#define LL SENSOR_3
#define NINETY 10
#define isWhite >40
#define isBlack <40
#define ANGLE 10
#define GOAL 350
void go_straight(){
OnFwd (R+L);
}
void go_straight_s(){
OnFwd (R+L);
Off (R+L);
Wait (1);
}
void go_back(){
OnRev (R+L);
}
void go_back_s(){
OnRev (R+L);
Off(R+L);
Wait(1);
}
void tr(){
OnFwd (L);
OnRev (R);
Off (R+L);
Wait (1);
}
void tl(){
OnFwd (R);
OnRev (L);
Off (R+L);
Wait (1);
}
void stop_moving(){
Off (R+L);
Wait (100);
}
void out(){
OnFwd (SLIDE);
Wait (50);
Off (SLIDE);
}
void set_in(){
OnRev (SLIDE);
Wait (50);
Off (SLIDE);
}
task main (){
SetSensor (RL, SENSOR_LIGHT);
SetSensor (LL, SENSOR_LIGHT);
int blackline = 0;
while (1){
go_straight_s();
if (blackline >= 2) break;
if (RL isBlack && LL isBlack){
PlaySound (SOUND_CLICK);
blackline++;
while (RL isBlack || LL isBlack) go_straight_s();
}
}
stop_moving();
PlaySound (SOUND_CLICK);
OnRev(R+L);
Wait(20);
Off (R+L);
OnFwd(R);
OnRev(L);
Wait(20);
Off (R+L);
while (1){
if (RL isBlack && LL isBlack) break;
if (RL isWhite && LL isWhite) {
go_back();
} else if (RL isBlack && LL isWhite) {
tl();
} else if (RL isWhite && LL isBlack) {
tr();
}
}
PlaySound(SOUND_UP);
while (1){
stop_moving();
SendMessage (1);
SendMessage (1);
go_straight();
Wait(10);
Off (R+L);
OnRev(L);
Wait(50);
Off (R+L);
go_straight();
Wait(15);
Off (R+L);
stop_moving();
Wait (500);
OnFwd(L);
OnRev(R);
Wait(20);
Off (R+L);
go_straight();
Wait (GOAL);
stop_moving();
out();
set_in();
go_back();
Wait (GOAL);
tl();
Wait (ANGLE);
Wait (ANGLE);
stop_moving();
}
}
押す方†
#define R OUT_C
#define L OUT_A
#define RL SENSOR_3
#define LL SENSOR_1
#define isBlack <40
#define isWhite >=40
#define NINETY 17
#define BALL 20
void go_straight(){
OnFwd (R+L);
}
void go_straight_s(){
OnFwd (R+L);
Off (R+L);
Wait (2);
}
void tr(){
OnFwd (L);
OnRev (R);
}
void tr_s(){
OnFwd (L);
Off (R+L);
}
void tl(){
OnFwd (R);
OnRev (L);
}
void tl_s(){
OnFwd (R);
Off (R+L);
}
void stop_moving(){
Off (R+L);
Wait (100);
}
task main (){
SetSensor (RL, SENSOR_LIGHT);
SetSensor (LL, SENSOR_LIGHT);
int blackline = 0;
while (1){
go_straight();
if (blackline >= 2) break;
if (RL isBlack && LL isBlack){
PlaySound (SOUND_CLICK);
blackline++;
while (RL isBlack || LL isBlack) go_straight();
}
}
stop_moving();
// turn left
while (1){
if (LL isBlack) break;
tl_s();
}
stop_moving();
// should be on the line, so trace it
while (1){
if (RL isBlack && LL isBlack) {
while (RL isBlack && LL isBlack) go_straight();
break;
}
else if (RL isWhite && LL isWhite) go_straight();
else if (RL isBlack && LL isWhite) tr_s();
else if (RL isWhite && LL isBlack) tl_s();
}
stop_moving();
// should be at the end of the line
/*while (1){
if (LL isBlack) break;
tl();
}*/
tl();
Wait (NINETY);
stop_moving();
// ready
while (1){
if (Message() == 1){
Wait (300);
go_straight();
Wait (BALL);
Off(R+L);
}
ClearMessage();
}
go_straight();
//Wait (300);
Off(R+L);
}