#define MOVE_TIME_A 50 #define MOVE_TIME_B 70 #define MOVE_TIME_C 50 #define play_a 220 #define play_h 247 #define play_c 264 #define play_d 293 #define play_e 330 #define play_f 352 #define play_g 396 #define play_a1 440 int gotime; void fahrelinks() { OnFwd(OUT_A); while (!SensorValueBool(1)); Off(OUT_A); } void fahrerechts() { OnRev(OUT_A); while (!SensorValueBool(0)); Off(OUT_A); } sub SetzeFeld1() { OnFwd(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); fahrelinks(); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnRev(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); OnRev(OUT_A); Wait(gotime); Off(OUT_A); } sub SetzeFeld2() { OnFwd(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnRev(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); } sub SetzeFeld3() { OnFwd(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); fahrerechts(); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnRev(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); OnFwd(OUT_A); Wait(gotime); Off(OUT_A); } sub SetzeFeld4() { fahrelinks(); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnRev(OUT_A); Wait(gotime); Off(OUT_A); } void SetzeFeld5() { OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); } sub SetzeFeld6() { fahrerechts(); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnFwd(OUT_A); Wait(gotime); Off(OUT_A); } sub SetzeFeld7() { OnRev(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); fahrelinks(); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnFwd(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); OnRev(OUT_A); Wait(gotime); Off(OUT_A); } sub SetzeFeld8() { OnRev(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnFwd(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); } sub SetzeFeld9() { OnRev(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); fahrerechts(); OnFwd(OUT_C); while(SensorValue(2)>-16); Off(OUT_C); ClearSensor(SENSOR_3); OnFwd(OUT_B); Wait(MOVE_TIME_B); Off(OUT_B); OnFwd(OUT_A); Wait(gotime); Off(OUT_A); } task main() { //Initialisierung der Sensoren SetSensor(SENSOR_3,SENSOR_ROTATION); SetSensorType(SENSOR_3,SENSOR_TYPE_ROTATION); SetSensorMode(SENSOR_3,SENSOR_MODE_ROTATION); SetSensor(SENSOR_1,SENSOR_TOUCH); SetSensorType(SENSOR_1,SENSOR_TYPE_TOUCH); SetSensorMode(SENSOR_1,SENSOR_MODE_BOOL); SetSensor(SENSOR_2,SENSOR_TOUCH); SetSensorType(SENSOR_2,SENSOR_TYPE_TOUCH); SetSensorMode(SENSOR_2,SENSOR_MODE_BOOL); //SetPower(OUT_C,9); int Spielende=0,maxich_feld=0; OnFwd(OUT_A); while (!SensorValueBool(1)); Off(OUT_A); OnRev(OUT_A); ClearTimer(0); while (!SensorValueBool(0)); gotime=FastTimer(0); Off(OUT_A); gotime/=2; gotime-=5; OnFwd(OUT_A); Wait(gotime); Off(OUT_A); int spalte,zeile,temp; int feld[9]; feld[0]=0; feld[1]=0; feld[2]=0; feld[3]=0; feld[4]=0; feld[5]=0; feld[6]=0; feld[7]=0; feld[8]=0; feld[9]=0; int meine[8]; int deine[8]; //0..2 Zeile 3..5 Spalte 6,7 Diag meine[0]=0; meine[1]=0; meine[2]=0; meine[3]=0; meine[4]=0; meine[5]=0; meine[6]=0; meine[7]=0; deine[0]=0; deine[1]=0; deine[2]=0; deine[3]=0; deine[4]=0; deine[5]=0; deine[6]=0; deine[7]=0; int maxich=0,maxer=0,maxer_feld; int gesetzteSteine=0; while (Spielende==0) { ClearMessage(); until (Message() != 0); zeile=Message(); SetUserDisplay(zeile,0); ClearMessage(); until (Message() != 0); spalte=Message(); SetUserDisplay(spalte,0); ClearMessage(); temp=zeile*3+spalte-3; // SelectDisplay(DISPLAY_WATCH); if (feld[temp-1]==0) { feld[temp-1]=1; gesetzteSteine+=1; switch(temp) { case 1: { SetzeFeld1(); deine[0]+=1; deine[3]+=1; deine[6]+=1; break; } case 2: { SetzeFeld2(); deine[0]+=1; deine[4]+=1; break; } case 3: { SetzeFeld3(); deine[0]+=1; deine[5]+=1; deine[7]+=1; break; } case 4: { SetzeFeld4(); deine[1]+=1; deine[3]+=1; break; } case 5: { SetzeFeld5(); deine[1]+=1; deine[4]+=1; deine[6]+=1; deine[7]+=1; break; } case 6: { SetzeFeld6(); deine[1]+=1; deine[5]+=1; break; } case 7: { SetzeFeld7(); deine[2]+=1; deine[3]+=1; deine[7]+=1; break; } case 8: { SetzeFeld8(); deine[2]+=1; deine[4]+=1; break; } case 9: { SetzeFeld9(); deine[2]+=1; deine[5]+=1; deine[6]+=1; break; } } maxer=0; for (temp=0;temp<8;temp++) { if (maxer0) { int tmp2=10; while (tmp2==10) { for (temp=0;temp<8;temp++) { if (maxich==meine[temp]) { switch (temp) { case 0: { if (feld[0]==0) tmp2=0; if (feld[1]==0) tmp2=1; if (feld[2]==0) tmp2=2; break; } case 1: { if (feld[3]==0) tmp2=3; if (feld[4]==0) tmp2=4; if (feld[5]==0) tmp2=5; break; } case 2: { if (feld[6]==0) tmp2=6; if (feld[7]==0) tmp2=7; if (feld[8]==0) tmp2=8; break; } case 3: { if (feld[0]==0) tmp2=0; if (feld[3]==0) tmp2=3; if (feld[6]==0) tmp2=6; break; } case 4: { if (feld[1]==0) tmp2=1; if (feld[4]==0) tmp2=4; if (feld[7]==0) tmp2=7; break; } case 5: { if (feld[2]==0) tmp2=2; if (feld[5]==0) tmp2=5; if (feld[8]==0) tmp2=8; break; } case 6: { if (feld[0]==0) tmp2=0; if (feld[4]==0) tmp2=4; if (feld[8]==0) tmp2=8; break; } case 7: { if (feld[2]==0) tmp2=2; if (feld[4]==0) tmp2=4; if (feld[6]==0) tmp2=6; break; } } } } maxich-=1; } feld[tmp2]=2; gesetzteSteine+=1; switch(tmp2) { case 0: { SetzeFeld1(); meine[0]+=1; meine[3]+=1; meine[6]+=1; break; } case 1: { SetzeFeld2(); meine[0]+=1; meine[4]+=1; break; } case 2: { SetzeFeld3(); meine[0]+=1; meine[5]+=1; meine[7]+=1; break; } case 3: { SetzeFeld4(); meine[1]+=1; meine[3]+=1; break; } case 4: { SetzeFeld5(); meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } case 5: { SetzeFeld6(); meine[1]+=1; meine[5]+=1; break; } case 6: { SetzeFeld7(); meine[2]+=1; meine[3]+=1; meine[7]+=1; break; } case 7: { SetzeFeld8(); meine[2]+=1; meine[4]+=1; break; } case 8: { SetzeFeld9(); meine[2]+=1; meine[5]+=1; meine[6]+=1; break; } } }else { if (feld[0]==0) { feld[0]=2; gesetzteSteine+=1; SetzeFeld1(); meine[0]+=1; meine[3]+=1; meine[6]+=1; }else { int tmp2=10; for (temp=0;temp<8;temp++) { if (meine[temp]==0) if(deine[temp]==0) tmp2=temp; } if (tmp2<10) { gesetzteSteine+=1; switch(tmp2) { case 0: { SetzeFeld1(); feld[0]=2; meine[0]+=1; meine[3]+=1; meine[6]+=1; break; } case 1: { SetzeFeld5(); feld[4]=2; meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } case 2: { SetzeFeld9(); feld[8]=2; meine[2]+=1; meine[5]+=1; meine[6]+=1; break; } case 3: { SetzeFeld7(); feld[6]=2; meine[2]+=1; meine[3]+=1; meine[7]+=1; break; } case 4: { SetzeFeld5(); feld[4]=2; meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } case 5: { SetzeFeld3(); feld[2]=2; meine[0]+=1; meine[5]+=1; meine[7]+=1; break; } case 6: { SetzeFeld5(); feld[4]=2; meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } case 7: { SetzeFeld5(); feld[4]=2; meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } } }else { tmp2=0; for (temp=0;temp<9;temp++) { if (feld[temp]==0) tmp2=temp; } feld[tmp2]=2; gesetzteSteine+=1; switch(tmp2) { case 0: { SetzeFeld1(); meine[0]+=1; meine[3]+=1; meine[6]+=1; break; } case 1: { SetzeFeld2(); meine[0]+=1; meine[4]+=1; break; } case 2: { SetzeFeld3(); meine[0]+=1; meine[5]+=1; meine[7]+=1; break; } case 3: { SetzeFeld4(); meine[1]+=1; meine[3]+=1; break; } case 4: { SetzeFeld5(); meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } case 5: { SetzeFeld6(); meine[1]+=1; meine[5]+=1; break; } case 6: { SetzeFeld7(); meine[2]+=1; meine[3]+=1; meine[7]+=1; break; } case 7: { SetzeFeld8(); meine[2]+=1; meine[4]+=1; break; } case 8: { SetzeFeld9(); meine[2]+=1; meine[5]+=1; meine[6]+=1; break; } } } } } } } else { if (maxer==3) { Spielende=1; }else { switch (maxer_feld) { case 0: { if (feld[0]==0) temp=0; if (feld[1]==0) temp=1; if (feld[2]==0) temp=2; break; } case 1: { if (feld[3]==0) temp=3; if (feld[4]==0) temp=4; if (feld[5]==0) temp=5; break; } case 2: { if (feld[6]==0) temp=6; if (feld[7]==0) temp=7; if (feld[8]==0) temp=8; break; } case 3: { if (feld[0]==0) temp=0; if (feld[3]==0) temp=3; if (feld[6]==0) temp=6; break; } case 4: { if (feld[1]==0) temp=1; if (feld[4]==0) temp=4; if (feld[7]==0) temp=7; break; } case 5: { if (feld[2]==0) temp=2; if (feld[5]==0) temp=5; if (feld[8]==0) temp=8; break; } case 6: { if (feld[0]==0) temp=0; if (feld[4]==0) temp=4; if (feld[8]==0) temp=8; break; } case 7: { if (feld[2]==0) temp=2; if (feld[4]==0) temp=4; if (feld[6]==0) temp=6; break; } } feld[temp]=2; gesetzteSteine+=1; switch(temp) { case 0: { SetzeFeld1(); meine[0]+=1; meine[3]+=1; meine[6]+=1; break; } case 1: { SetzeFeld2(); meine[0]+=1; meine[4]+=1; break; } case 2: { SetzeFeld3(); meine[0]+=1; meine[5]+=1; meine[7]+=1; break; } case 3: { SetzeFeld4(); meine[1]+=1; meine[3]+=1; break; } case 4: { SetzeFeld5(); meine[1]+=1; meine[4]+=1; meine[6]+=1; meine[7]+=1; break; } case 5: { SetzeFeld6(); meine[1]+=1; meine[5]+=1; break; } case 6: { SetzeFeld7(); meine[2]+=1; meine[3]+=1; meine[7]+=1; break; } case 7: { SetzeFeld8(); meine[2]+=1; meine[4]+=1; break; } case 8: { SetzeFeld9(); meine[2]+=1; meine[5]+=1; meine[6]+=1; break; } } } } } }else { Spielende=3; } } maxich=0; for (temp=0;temp<8;temp++) { if (maxich