roboforum.ru

Технический форум по робототехнике.

MINDSTORMS - крестики-нолики

MINDSTORMS - крестики-нолики

aka13 » 07 мар 2011, 11:13

Всем привет,
наконец-то я зарегистрировался.
Теперь я готов поделится с вами своими идеями - для начала робот играющий в крестики-нолики.


Алгоритм программы заключается в том, чтобы в первую очередь не дать выиграть человеку, и лишь потом пытаться выиграть самому. Игровое поле выводится на экран, с указанием чей ход и кто выиграл.
A вот нескомпилированный код:
Код: Выделить всёРазвернуть
int b;
int turn;
int win;
int which_turn;  // 2 = bot
int finish;
int redraw;
int player_marker;

int n1;         //n1 n2 n3
int n2;         //n4 n5 n6
int n3;         //n7 n8 n9
int n4;         // game fields
int n5;         // 1 - owned by player, 2 - owned by bot
int n6;
int n7;
int n8;
int n9;


// you'll need 1.sound files "! Backup.rso","round_draw.rso","Laughing 02.rso","Game Over.rso"
//             2.pictures "field.ric" ,"rturn1","rturn2","rturn3","rturn4"




sub drop_1()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,160);
b += 160;
RotateMotor(OUT_A, 10, -35);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, 35);
RotateMotor(OUT_B,40,-b);
}

sub drop_2()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,140);
b += 140;
RotateMotor(OUT_A, 10, -90);
Wait(10);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, 90);
RotateMotor(OUT_B,40,-b);
}

sub drop_3()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,160);
b += 160;
RotateMotor(OUT_A, 10, -125);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, 125);
RotateMotor(OUT_B,40,-b);
}

sub drop_4()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,140);
b += 140;
Wait(10);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_B,40,-b);
}

sub drop_5()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_B,40,-b);
}

sub drop_6()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,140);
b += 140;
RotateMotor(OUT_A, 10, 180);
Wait(10);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, 180);
RotateMotor(OUT_B,40,-b);
}

sub drop_7()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,160);
b += 160;
RotateMotor(OUT_A, 10, 55);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, -55);
RotateMotor(OUT_B,40,-b);
}

sub drop_8()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,140);
b += 140;
RotateMotor(OUT_A, 10, 90);
Wait(10);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, -90);
RotateMotor(OUT_B,40,-b);
}

sub drop_9()
{
SetSensor(IN_4, SENSOR_TOUCH);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,160);
b += 160;
RotateMotor(OUT_A, 10, 145);
RotateMotor(OUT_C, 40, 360);
RotateMotor(OUT_A, 10, -145);
RotateMotor(OUT_B,40,-b);
}



sub bot_turn()
{
turn = 0;
/*trying to win*/

if(n1 == 2 && n2 == 2 && n3 == 0 && turn == 0)
{
drop_3();
n3 = 2;
turn = 1;
}

if(n1 == 2 && n2 == 0 && n3 == 2 && turn == 0)
{
drop_2();
n2 = 2;
turn = 1;
}

if(n1 == 0 && n2 == 2 && n3 == 2 && turn == 0)
{
drop_1();
n1 = 2;
turn = 1;
}



if(n4 == 2 && n5 == 2 && n6 == 0 && turn == 0)
{
drop_6();
n6 = 2;
turn = 1;
}

if(n4 == 2 && n5 == 0 && n6 == 2 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n4 == 0 && n5 == 2 && n6 == 2 && turn == 0)
{
drop_4();
n4 = 2;
turn = 1;
}



if(n7 == 2 && n8 == 2 && n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}

if(n7 == 2 && n8 == 0 && n9 == 2 && turn == 0)
{
drop_8();
n8 = 2;
turn = 1;
}

if(n7 == 0 && n8 == 2 && n9 == 2 && turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}



if(n1 == 2 && n4 == 2 && n7 == 0 && turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}

if(n1 == 2 && n4 == 0 && n7 == 2 && turn == 0)
{
drop_4();
n4 = 2;
turn = 1;
}

if(n1 == 0 && n4 == 2 && n7 == 2 && turn == 0)
{
drop_1();
n1 = 2;
turn = 1;
}



if(n2 == 2 && n5 == 2 && n8 == 0 && turn == 0)
{
drop_8();
n8 = 2;
turn = 1;
}

if(n2 == 2 && n5 == 0 && n8 == 2 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n2 == 0 && n5 == 2 && n8 == 2 && turn == 0)
{
drop_2();
n2 = 2;
turn = 1;
}



if(n3 == 2 && n6 == 2 && n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}

if(n3 == 2 && n6 == 0 && n9 == 2 && turn == 0)
{
drop_6();
n6 = 2;
turn = 1;
}

if(n3 == 0 && n6 == 2 && n9 == 2 && turn == 0)
{
drop_3();
n3 = 2;
turn = 1;
}



if(n1 == 2 && n5 == 2 && n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}

if(n1 == 2 && n5 == 0 && n9 == 2 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n1 == 0 && n5 == 2 && n9 == 2 && turn == 0)
{
drop_1();
n1 = 2;
turn = 1;
}



if(n3 == 2 && n5 == 2 && n7 == 0&& turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}

if(n3 == 2 && n5 == 0 && n7 == 2&& turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n3 == 0 && n5 == 2 && n7 == 2&& turn == 0)
{
drop_3();
n3 = 2;
turn = 1;
}

/* preventing player from winning*/
if(n1 == 1 && n2 == 1 && n3 == 0 && turn == 0)
{
drop_3();
n3 = 2;
turn = 1;
}

if(n1 == 1 && n2 == 0 && n3 == 1 && turn == 0)
{
drop_2();
n2 = 2;
turn = 1;
}

if(n1 == 0 && n2 == 1 && n3 == 1 && turn == 0)
{
drop_1();
n1 = 2;
turn = 1;
}



if(n4 == 1 && n5 == 1 && n6 == 0 && turn == 0)
{
drop_6();
n6 = 2;
turn = 1;
}

if(n4 == 1 && n5 == 0 && n6 == 1 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n4 == 0 && n5 == 1 && n6 == 1 && turn == 0)
{
drop_4();
n4 = 2;
turn = 1;

}



if(n7 == 1 && n8 == 1 && n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}

if(n7 == 1 && n8 == 0 && n9 == 1 && turn == 0)
{
drop_8();
n8 = 2;
turn = 1;
}

if(n7 == 0 && n8 == 1 && n9 == 1 && turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}



if(n1 == 1 && n4 == 1 && n7 == 0 && turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}

if(n1 == 1 && n4 == 0 && n7 == 1 && turn == 0)
{
drop_4();
n4 = 2;
turn = 1;
}

if(n1 == 0 && n4 == 1 && n7 == 1 && turn == 0)
{
drop_1();
n1 = 2;
turn = 1;
}



if(n2 == 1 && n5 == 1 && n8 == 0 && turn == 0)
{
drop_8();
n8 = 2;
turn = 1;
}

if(n2 == 1 && n5 == 0 && n8 == 1 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n2 == 0 && n5 == 1 && n8 == 1 && turn == 0)
{
drop_2();
n2 = 2;
turn = 1;
}



if(n3 == 1 && n6 == 1 && n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}

if(n3 == 1 && n6 == 0 && n9 == 1 && turn == 0)
{
drop_6();
n6 = 2;
turn = 1;
}

if(n3 == 0 && n6 == 1 && n9 == 1 && turn == 0)
{
drop_9();
n3 = 2;
turn = 1;
}



if(n1 == 1 && n5 == 1 && n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}

if(n1 == 1 && n5 == 0 && n9 == 1 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n1 == 0 && n5 == 1 && n9 == 1 && turn == 0)
{
drop_9();
n1 = 2;
turn = 1;
}



if(n3 == 1 && n5 == 1 && n7 == 0 && turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}

if(n3 == 1 && n5 == 0 && n7 == 1 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}

if(n3 == 0 && n5 == 1 && n7 == 1 && turn == 0)
{
drop_3();
n3 = 2;
turn = 1;
}







/* if there aren't any of listed combinations*/





if(n5 == 0 && turn == 0)
{
drop_5();
n5 = 2;
turn = 1;
}



if(n1 == 0 && turn == 0)
{
drop_1();
n1 = 2;
turn = 1;
}

if(n3 == 0 && turn == 0)
{
drop_3();
n3 = 2;
turn = 1;
}

if(n7 == 0 && turn == 0)
{
drop_7();
n7 = 2;
turn = 1;
}

if(n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}




if(n2 == 0 && turn == 0)
{
drop_2();
n2 = 2;
turn = 1;
}

if(n4 == 0 && turn == 0)
{
drop_4();
n4 = 2;
turn = 1;
}

if(n6 == 0 && turn == 0)
{
drop_6();
n6 = 2;
turn = 1;
}

if(n9 == 0 && turn == 0)
{
drop_9();
n9 = 2;
turn = 1;
}


turn = 0;
}





sub scan()
{
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,200);
b += 200;
if(SENSOR_3 >= player_marker)
{
n5 = 1;
redraw = 1;
}                                         //5
RotateMotor(OUT_B,40,130);
b += 130;
if(SENSOR_3 >= player_marker)
{
n4 = 1;
redraw = 1;
}                                         //4
RotateMotor(OUT_A, 10, -35);
RotateMotor(OUT_B,20,40);
b += 40;
if(SENSOR_3 >= player_marker)
{
n1 = 1;
redraw = 1;
}                                          //1
RotateMotor(OUT_A, 10, -45);
RotateMotor(OUT_B,20,-40);
b -= 40;
if(SENSOR_3 >= player_marker)
{
n2 = 1;
redraw = 1;
}                                          //2
RotateMotor(OUT_A, 10, -45);
RotateMotor(OUT_B,20,40);
b += 40;
if(SENSOR_3 >= player_marker)
{
n3 = 1;
redraw = 1;
}                                          //3
RotateMotor(OUT_A, 10, -45);
RotateMotor(OUT_B,20,-40);
b -= 40;
if(SENSOR_3 >= player_marker)
{
n6 = 1;
redraw = 1;
}                                          //6
RotateMotor(OUT_A, 10, -45);
RotateMotor(OUT_B,20,40);
b += 40;
if(SENSOR_3 >= player_marker)
{
n9 = 1;
redraw = 1;
}                                          //9
RotateMotor(OUT_A, 10, -45);
RotateMotor(OUT_B,20,-40);
b -= 40;
if(SENSOR_3 >= player_marker)
{
n8 = 1;
redraw = 1;
}                                          //8
RotateMotor(OUT_A, 10, -45);
RotateMotor(OUT_B,20,40);
b += 40;
if(SENSOR_3 >= player_marker)
{
n7 = 1;
redraw = 1;
}                                          //7



RotateMotor(OUT_A, 10, -55);// reset marker
RotateMotor(OUT_B,40,-b); //done
}




sub win_check()
{
if(n1 == 2 && n2 == 2 && n3 == 2)                    //bot
{
win = 2;
}

if(n4 == 2 && n5 == 2 && n6 == 2)
{
win = 2;
}

if(n7 == 2 && n8 == 2 && n9 == 2)
{
win = 2;
}

if(n1 == 2 && n4 == 2 && n7 == 2)
{
win = 2;
}

if(n2 == 2 && n5 == 2 && n8 == 2)
{
win = 2;
}

if(n3 == 2 && n6 == 2 && n9 == 2)
{
win = 2;
}

if(n1 == 2 && n5 == 2 && n9 == 2)
{
win = 2;
}

if(n3 == 2 && n5 == 2 && n7 == 2)
{
win = 2;
}





if(n1 == 1 && n2 == 1 && n3 == 1)          //player
{
win = 1;
}

if(n4 == 1 && n5 == 1 && n6 == 1)
{
win = 1;
}

if(n7 == 1 && n8 == 1 && n9 == 1)
{
win = 1;
}

if(n1 == 1 && n4 == 1 && n7 == 1)
{
win = 1;
}

if(n2 == 1 && n5 == 1 && n8 == 1)
{
win = 1;
}

if(n3 == 1 && n6 == 1 && n9 == 1)
{
win = 1;
}

if(n1 == 1 && n5 == 1 && n9 == 1)
{
win = 1;
}

if(n3 == 1 && n5 == 1 && n7 == 1)
{
win = 1;
}
}




sub win_animation()
{




if(n1 == 2 && n2 == 2 && n3 == 2)                    //bot
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(24,49,29,44);    // x right-center  2
LineOut(24,44,29,49);

LineOut(24,59,29,54);    // x right-up      1
LineOut(24,54,29,59);

LineOut(24,39,29,34);    // x right-down    3
LineOut(24,34,29,39);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n4 == 2 && n5 == 2 && n6 == 2)
{
win = 2;
  while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(14,49,19,44);    // x center        5
LineOut(14,44,19,49);

LineOut(14,59,19,54);    // x center-up     4
LineOut(14,54,19,59);

LineOut(14,39,19,34);    // x center-down   6
LineOut(14,34,19,39);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}





if(n7 == 2 && n8 == 2 && n9 == 2)
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(4,49,9,44);    // x left-center     8
LineOut(4,44,9,49);

LineOut(4,59,9,54);    // x left-up         7
LineOut(4,54,9,59);

LineOut(4,39,9,34);    // x left-down       9
LineOut(4,34,9,39);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}






if(n1 == 2 && n4 == 2 && n7 == 2)
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(24,59,29,54);    // x right-up      1
LineOut(24,54,29,59);
LineOut(14,59,19,54);    // x center-up     4
LineOut(14,54,19,59);
LineOut(4,59,9,54);    // x left-up         7
LineOut(4,54,9,59);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n2 == 2 && n5 == 2 && n8 == 2)
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(24,49,29,44);    // x right-center  2
LineOut(24,44,29,49);
LineOut(14,49,19,44);    // x center        5
LineOut(14,44,19,49);
LineOut(4,49,9,44);    // x left-center     8
LineOut(4,44,9,49);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n3 == 2 && n6 == 2 && n9 == 2)
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(24,39,29,34);    // x right-down    3
LineOut(24,34,29,39);
LineOut(14,39,19,34);    // x center-down   6
LineOut(14,34,19,39);
LineOut(4,39,9,34);    // x left-down       9
LineOut(4,34,9,39);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n1 == 2 && n5 == 2 && n9 == 2)
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(24,59,29,54);    // x right-up      1
LineOut(24,54,29,59);
LineOut(14,49,19,44);    // x center        5
LineOut(14,44,19,49);
LineOut(4,39,9,34);    // x left-down       9
LineOut(4,34,9,39);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}

if(n3 == 2 && n5 == 2 && n7 == 2)
{
win = 2;
while(ButtonState(BTNCENTER) == 0)
{
TextOut(2,7,"Robot wins!");
LineOut(24,39,29,34);    // x right-down    3
LineOut(24,34,29,39);
LineOut(14,49,19,44);    // x center        5
LineOut(14,44,19,49);
LineOut(4,59,9,54);    // x left-up         7
LineOut(4,54,9,59);
Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}








if(n1 == 1 && n2 == 1 && n3 == 1)          //player
{
win = 1;
TextOut(2,7,"Player wins!");
  while(ButtonState(BTNCENTER) == 0)
{
  RectOut(24,44,5,5);    // brick right-center     2
RectOut(25,45,4,4);
RectOut(26,46,3,3);
RectOut(27,47,2,2);
PointOut(28,48);

RectOut(24,54,5,5);    // brick right-up         1
RectOut(25,55,4,4);
RectOut(26,56,3,3);
RectOut(27,57,2,2);
PointOut(28,58);

RectOut(24,34,5,5);    // brick right-down       3
RectOut(25,35,4,4);
RectOut(26,36,3,3);
RectOut(27,37,2,2);
PointOut(28,38);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}

}




if(n4 == 1 && n5 == 1 && n6 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{
RectOut(14,44,5,5);    // brick center           5
RectOut(15,45,4,4);
RectOut(16,46,3,3);
RectOut(17,47,2,2);
PointOut(18,48);

RectOut(14,54,5,5);    // brick center-up        4
RectOut(15,55,4,4);
RectOut(16,56,3,3);
RectOut(17,57,2,2);
PointOut(18,58);

RectOut(14,34,5,5);    // brick center-down      6
RectOut(15,35,4,4);
RectOut(16,36,3,3);
RectOut(17,37,2,2);
PointOut(18,38);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n7 == 1 && n8 == 1 && n9 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{
RectOut(4,44,5,5);    // brick left-center       8
RectOut(5,45,4,4);
RectOut(6,46,3,3);
RectOut(7,47,2,2);
PointOut(8,48);

RectOut(4,54,5,5);    // brick left-up           7
RectOut(5,55,4,4);
RectOut(6,56,3,3);
RectOut(7,57,2,2);
PointOut(8,58);

RectOut(4,34,5,5);    // brick left-down         9
RectOut(5,35,4,4);
RectOut(6,36,3,3);
RectOut(7,37,2,2);
PointOut(8,38);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n1 == 1 && n4 == 1 && n7 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{
RectOut(24,54,5,5);    // brick right-up         1
RectOut(25,55,4,4);
RectOut(26,56,3,3);
RectOut(27,57,2,2);
PointOut(28,58);

RectOut(14,54,5,5);    // brick center-up        4
RectOut(15,55,4,4);
RectOut(16,56,3,3);
RectOut(17,57,2,2);
PointOut(18,58);

RectOut(4,54,5,5);    // brick left-up           7
RectOut(5,55,4,4);
RectOut(6,56,3,3);
RectOut(7,57,2,2);
PointOut(8,58);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n2 == 1 && n5 == 1 && n8 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{
RectOut(24,44,5,5);    // brick right-center     2
RectOut(25,45,4,4);
RectOut(26,46,3,3);
RectOut(27,47,2,2);
PointOut(28,48);

RectOut(14,44,5,5);    // brick center           5
RectOut(15,45,4,4);
RectOut(16,46,3,3);
RectOut(17,47,2,2);
PointOut(18,48);

RectOut(4,44,5,5);    // brick left-center       8
RectOut(5,45,4,4);
RectOut(6,46,3,3);
RectOut(7,47,2,2);
PointOut(8,48);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n3 == 1 && n6 == 1 && n9 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{

RectOut(24,34,5,5);    // brick right-down       3
RectOut(25,35,4,4);
RectOut(26,36,3,3);
RectOut(27,37,2,2);
PointOut(28,38);

RectOut(14,34,5,5);    // brick center-down      6
RectOut(15,35,4,4);
RectOut(16,36,3,3);
RectOut(17,37,2,2);
PointOut(18,38);

RectOut(4,34,5,5);    // brick left-down         9
RectOut(5,35,4,4);
RectOut(6,36,3,3);
RectOut(7,37,2,2);
PointOut(8,38);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n1 == 1 && n5 == 1 && n9 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{
RectOut(24,54,5,5);    // brick right-up         1
RectOut(25,55,4,4);
RectOut(26,56,3,3);
RectOut(27,57,2,2);
PointOut(28,58);

RectOut(14,44,5,5);    // brick center           5
RectOut(15,45,4,4);
RectOut(16,46,3,3);
RectOut(17,47,2,2);
PointOut(18,48);

RectOut(4,34,5,5);    // brick left-down         9
RectOut(5,35,4,4);
RectOut(6,36,3,3);
RectOut(7,37,2,2);
PointOut(8,38);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}




if(n3 == 1 && n5 == 1 && n7 == 1)
{
win = 1;
TextOut(2,7,"Player wins!");
while(ButtonState(BTNCENTER) == 0)
{
RectOut(24,34,5,5);    // brick right-down       3
RectOut(25,35,4,4);
RectOut(26,36,3,3);
RectOut(27,37,2,2);
PointOut(28,38);

RectOut(14,44,5,5);    // brick center           5
RectOut(15,45,4,4);
RectOut(16,46,3,3);
RectOut(17,47,2,2);
PointOut(18,48);

RectOut(4,54,5,5);    // brick left-up           7
RectOut(5,55,4,4);
RectOut(6,56,3,3);
RectOut(7,57,2,2);
PointOut(8,58);

Wait(500);
ClearScreen();
GraphicOut(-67,31,"field.ric");
Wait(500);
}
}
}















                                 /*tasks*/


















task display_scores()
{
  GraphicOut(-67,31,"field.ric");;
while(win == 0)
{
redraw = 0;
  GraphicOut(-67,31,"field.ric");
if(n1 == 1)
{
  RectOut(24,54,5,5);    // brick right-up
  RectOut(25,55,4,4);
  RectOut(26,56,3,3);
  RectOut(27,57,2,2);
  PointOut(28,58);
}
if(n1 == 2)
{
  LineOut(24,59,29,54);    // x right-up
  LineOut(24,54,29,59);
}


if(n2 == 1)
{
  RectOut(24,44,5,5);    // brick right-center
  RectOut(25,45,4,4);
  RectOut(26,46,3,3);
  RectOut(27,47,2,2);
  PointOut(28,48);
}

if(n2 == 2)
{
  LineOut(24,49,29,44);    // x right-center
  LineOut(24,44,29,49);
}


if(n3 == 1)
{
  RectOut(24,34,5,5);    // brick right-down
  RectOut(25,35,4,4);
  RectOut(26,36,3,3);
  RectOut(27,37,2,2);
  PointOut(28,38);
}

if(n3 == 2)
{
  LineOut(24,39,29,34);    // x right-down
  LineOut(24,34,29,39);
}


if(n4 == 1)
{
  RectOut(14,54,5,5);    // brick center-up
  RectOut(15,55,4,4);
  RectOut(16,56,3,3);
  RectOut(17,57,2,2);
  PointOut(18,58);
}

if(n4 == 2)
{
  LineOut(14,59,19,54);    // x center-up
  LineOut(14,54,19,59);
}


if(n5 == 1)
{
  RectOut(14,44,5,5);    // brick center
  RectOut(15,45,4,4);
  RectOut(16,46,3,3);
  RectOut(17,47,2,2);
  PointOut(18,48);
}

if(n5 == 2)
{
  LineOut(14,49,19,44);    // x center
  LineOut(14,44,19,49);
}


if(n6 == 1)
{
  RectOut(14,34,5,5);    // brick center-down
  RectOut(15,35,4,4);
  RectOut(16,36,3,3);
  RectOut(17,37,2,2);
  PointOut(18,38);
}

if(n6 == 2)
{
  LineOut(14,39,19,34);    // x center-down
  LineOut(14,34,19,39);
}


if(n7 == 1)
{
  RectOut(4,54,5,5);    // brick left-up
  RectOut(5,55,4,4);
  RectOut(6,56,3,3);
  RectOut(7,57,2,2);
  PointOut(8,58);
}

if(n7 == 2)
{
  LineOut(4,59,9,54);    // x left-up
  LineOut(4,54,9,59);
}


if(n8 == 1)
{
  RectOut(4,44,5,5);    // brick left-center
  RectOut(5,45,4,4);
  RectOut(6,46,3,3);
  RectOut(7,47,2,2);
  PointOut(8,48);
}

if(n8 == 2)
{
  LineOut(4,49,9,44);    // x left-center
  LineOut(4,44,9,49);
}


if(n9 == 1)
{
  RectOut(4,34,5,5);    // brick left-down
  RectOut(5,35,4,4);
  RectOut(6,36,3,3);
  RectOut(7,37,2,2);
  PointOut(8,38);
}

if(n9 == 2)
{
  LineOut(4,39,9,34);    // x left-down
  LineOut(4,34,9,39);
}
while(redraw == 0)
}








  GraphicOut(-67,31,"field.ric");
if(n1 == 1)
{
  RectOut(24,54,5,5);    // brick right-up
  RectOut(25,55,4,4);
  RectOut(26,56,3,3);
  RectOut(27,57,2,2);
  PointOut(28,58);
}
if(n1 == 2)
{
  LineOut(24,59,29,54);    // x right-up
  LineOut(24,54,29,59);
}


if(n2 == 1)
{
  RectOut(24,44,5,5);    // brick right-center
  RectOut(25,45,4,4);
  RectOut(26,46,3,3);
  RectOut(27,47,2,2);
  PointOut(28,48);
}

if(n2 == 2)
{
  LineOut(24,49,29,44);    // x right-center
  LineOut(24,44,29,49);
}


if(n3 == 1)
{
  RectOut(24,34,5,5);    // brick right-down
  RectOut(25,35,4,4);
  RectOut(26,36,3,3);
  RectOut(27,37,2,2);
  PointOut(28,38);
}

if(n3 == 2)
{
  LineOut(24,39,29,34);    // x right-down
  LineOut(24,34,29,39);
}


if(n4 == 1)
{
  RectOut(14,54,5,5);    // brick center-up
  RectOut(15,55,4,4);
  RectOut(16,56,3,3);
  RectOut(17,57,2,2);
  PointOut(18,58);
}

if(n4 == 2)
{
  LineOut(14,59,19,54);    // x center-up
  LineOut(14,54,19,59);
}


if(n5 == 1)
{
  RectOut(14,44,5,5);    // brick center
  RectOut(15,45,4,4);
  RectOut(16,46,3,3);
  RectOut(17,47,2,2);
  PointOut(18,48);
}

if(n5 == 2)
{
  LineOut(14,49,19,44);    // x center
  LineOut(14,44,19,49);
}


if(n6 == 1)
{
  RectOut(14,34,5,5);    // brick center-down
  RectOut(15,35,4,4);
  RectOut(16,36,3,3);
  RectOut(17,37,2,2);
  PointOut(18,38);
}

if(n6 == 2)
{
  LineOut(14,39,19,34);    // x center-down
  LineOut(14,34,19,39);
}


if(n7 == 1)
{
  RectOut(4,54,5,5);    // brick left-up
  RectOut(5,55,4,4);
  RectOut(6,56,3,3);
  RectOut(7,57,2,2);
  PointOut(8,58);
}

if(n7 == 2)
{
  LineOut(4,59,9,54);    // x left-up
  LineOut(4,54,9,59);
}


if(n8 == 1)
{
  RectOut(4,44,5,5);    // brick left-center
  RectOut(5,45,4,4);
  RectOut(6,46,3,3);
  RectOut(7,47,2,2);
  PointOut(8,48);
}

if(n8 == 2)
{
  LineOut(4,49,9,44);    // x left-center
  LineOut(4,44,9,49);
}


if(n9 == 1)
{
  RectOut(4,34,5,5);    // brick left-down
  RectOut(5,35,4,4);
  RectOut(6,36,3,3);
  RectOut(7,37,2,2);
  PointOut(8,38);
}

if(n9 == 2)
{
  LineOut(4,39,9,34);    // x left-down
  LineOut(4,34,9,39);
}
}

task display_turn()
{
while(win == 0 && finish == 0)
{
  while(which_turn == 1)
  {
   TextOut(2,7,"Your turn");
   while(which_turn == 1);
   ClearScreen();
   redraw = 1;
  }
  while(which_turn == 2 && finish == 0)
  {
   TextOut(2,7,"Robots turn");
   TextOut(60,LCD_LINE5,"Please");
TextOut(65,LCD_LINE6,"wait");
while(which_turn == 2)
{
GraphicOut(70,40,"rturn1.ric");
Wait(700);
GraphicOut(70,40,"rturn2.ric");
Wait(700);
GraphicOut(70,40,"rturn3.ric");
Wait(700);
GraphicOut(70,40,"rturn4.ric");
Wait(700);
}
   ClearScreen();
   redraw = 1;
  }
}
}


task game()
{
Wait(1000);
/* 1st turn */

if(win == 0)
{

which_turn = 1;
while(ButtonState(BTNCENTER) == 0);
which_turn = 2;
scan();
redraw = 1;
win_check();
if(win == 0)
{
  bot_turn();
  redraw = 1;
}
win_check();
}


/* 2nd turn */

if(win == 0)
{
which_turn = 1;
while(ButtonState(BTNCENTER) == 0);
which_turn = 2;
scan();
redraw = 1;
win_check();
if(win == 0)
{
  bot_turn();
  redraw = 1;
}
win_check();
}


/* 3rd turn */

if(win == 0)
{
which_turn = 1;
while(ButtonState(BTNCENTER) == 0);
which_turn = 2;
scan();
redraw = 1;
win_check();
if(win == 0)
{
  bot_turn();
  redraw = 1;
}
win_check();
}


/* 4th turn */

if(win == 0)
{
which_turn = 1;
while(ButtonState(BTNCENTER) == 0);
which_turn = 2;
scan();
redraw = 1;
win_check();
if(win == 0)
{
  bot_turn();
  redraw = 1;
}
win_check();
}


/* 5ft turn */
if(win == 0)
{
which_turn = 1;
while(ButtonState(BTNCENTER) == 0);
which_turn = 2;
scan();
redraw = 1;
win_check();
finish = 1;
ClearScreen();
}
if(win == 0)
{
  StopTask(display_turn);
  ClearScreen();
  redraw = 1;
  TextOut(2,7,"Draw");
  PlayFile("round_draw.rso");
  while(ButtonState(BTNCENTER) == 0);
}
if(win == 1)
{
  StopTask(display_turn);
  ClearScreen();
  redraw = 1;
  win_animation();
}
if(win == 2)
{
  StopTask(display_turn);
  ClearScreen();
  redraw = 1;
  win_animation();
  PlayFile("Laughing 02.rso");
}
PlayFile("Game Over.rso");
finish = 1;
while(ButtonState(BTNCENTER) == 0);
Wait(1000);
StopAllTasks();
}



task please_wait()
{
while(which_turn == 2);
  TextOut(60,LCD_LINE5,"Please");
TextOut(65,LCD_LINE6,"wait");
while(which_turn == 2)
{
GraphicOut(70,40,"rturn1.ric");
Wait(700);
GraphicOut(70,40,"rturn2.ric");
Wait(700);
GraphicOut(70,40,"rturn3.ric");
Wait(700);
GraphicOut(70,40,"rturn4.ric");
Wait(700);
}
ClearScreen();
redraw = 1;
}

task main()
{
SetSensorType(IN_3, IN_TYPE_LIGHT_ACTIVE);
SetSensorMode(IN_3, IN_MODE_PCTFULLSCALE);
SetSensor(IN_4, SENSOR_TOUCH);             // sensors
ClearScreen();

repeat(5)
{
TextOut(2,LCD_LINE1,"_");
Wait(300);
ClearScreen();
Wait(300);
}

TextOut(2,LCD_LINE1, "Loading software...");
TextOut(2,LCD_LINE2,".");
Wait(200);
TextOut(2,LCD_LINE2,"..");
Wait(200);
TextOut(2,LCD_LINE2,"...");
Wait(200);
TextOut(2,LCD_LINE2,"...");
Wait(200);
TextOut(2,LCD_LINE2,"....");
Wait(200);
TextOut(2,LCD_LINE2,".....");
Wait(200);
TextOut(2,LCD_LINE2,"......");
Wait(200);
TextOut(2,LCD_LINE2,".......");
Wait(200);
TextOut(2,LCD_LINE2,"........");
Wait(200);
TextOut(2,LCD_LINE2,".........");
Wait(200);
TextOut(2,LCD_LINE2,"..........");
Wait(200);
TextOut(2,LCD_LINE2,"...........");
Wait(200);
TextOut(2,LCD_LINE2,"............");
Wait(200);
TextOut(2,LCD_LINE2,".............");
Wait(200);
TextOut(2,LCD_LINE2,"..............");
Wait(200);
TextOut(2,LCD_LINE2,"...............");
Wait(200);
TextOut(2,LCD_LINE2,"................");
TextOut(40,LCD_LINE4, "Done");
PlayFile("! Backup.rso");
Wait(1500);
ClearScreen();

repeat(5)
{
TextOut(2,LCD_LINE1,"_");
Wait(300);
ClearScreen();
Wait(300);
}

TextOut(2,LCD_LINE1,"Checking files");
TextOut(2,LCD_LINE2, "on C:/");
Wait(2000);
ClearScreen();



TextOut(2,LCD_LINE2, "Calibration:");
TextOut(2,LCD_LINE3, "place a marker");
TextOut(2,LCD_LINE4, "in the middle");
TextOut(2,LCD_LINE5, "and press OK");
while(ButtonState(BTNCENTER) == 0);
OnRev(OUT_B, 40);
while(SENSOR_4 == 0);
Off(OUT_B);
b = MotorRotationCount(OUT_B);
RotateMotor(OUT_B,40,200);
b += 200;
player_marker = SENSOR_3;
player_marker -= 7;
RotateMotor(OUT_B,40,-b);
ClearScreen();
TextOut(2,LCD_LINE2, "Remove marker.");
while(ButtonState(BTNCENTER) == 0);
ClearScreen();

TextOut(2,LCD_LINE1,"Load aka13's ");
TextOut(2,LCD_LINE2,"Tic Tac Toe  ");
TextOut(2,LCD_LINE3,"player? ");
TextOut(35,LCD_LINE8, "ENTER");

while(ButtonState(BTNCENTER) == 0);



repeat(4)
{
  ClearScreen();
  TextOut(35,LCD_LINE7,"Loading");
   GraphicOut(-67,31,"field.ric");
  RectOut(24,34,5,5);    // brick right-down
  RectOut(25,35,4,4);
  RectOut(26,36,3,3);
  RectOut(27,37,2,2);
  PointOut(28,38);
  Wait(200);
  RectOut(14,34,5,5);    // brick center-down
  RectOut(15,35,4,4);
  RectOut(16,36,3,3);
  RectOut(17,37,2,2);
  PointOut(18,38);
  Wait(200);
  RectOut(4,34,5,5);    // brick left-down
  RectOut(5,35,4,4);
  RectOut(6,36,3,3);
  RectOut(7,37,2,2);
  PointOut(8,38);
  Wait(200);
  RectOut(4,44,5,5);    // brick left-center
  RectOut(5,45,4,4);
  RectOut(6,46,3,3);
  RectOut(7,47,2,2);
  PointOut(8,48);
  Wait(200);
  RectOut(4,54,5,5);    // brick left-up
  RectOut(5,55,4,4);
  RectOut(6,56,3,3);
  RectOut(7,57,2,2);
  PointOut(8,58);
  Wait(200);
  RectOut(14,54,5,5);    // brick center-up
  RectOut(15,55,4,4);
  RectOut(16,56,3,3);
  RectOut(17,57,2,2);
  PointOut(18,58);
  Wait(200);
  RectOut(24,54,5,5);    // brick right-up
  RectOut(25,55,4,4);
  RectOut(26,56,3,3);
  RectOut(27,57,2,2);
  PointOut(28,58);
  Wait(200);
  RectOut(24,44,5,5);    // brick right-center
  RectOut(25,45,4,4);
  RectOut(26,46,3,3);
  RectOut(27,47,2,2);
  PointOut(28,48);
  Wait(200);
  RectOut(14,44,5,5);    // brick center
  RectOut(15,45,4,4);
  RectOut(16,46,3,3);
  RectOut(17,47,2,2);
  PointOut(18,48);
  Wait(200);
}
  ClearScreen();

  while(ButtonState(BTNCENTER) == 0)
{
TextOut(20,LCD_LINE2,"Press Enter");
TextOut(20,LCD_LINE3,"to start");
Wait(300);
ClearScreen();
Wait(300);
}
while(ButtonState(BTNCENTER) == 0)

Precedes(game,display_scores,display_turn,please_wait);

}


Инструкции для постройки есть, если кому интересно, могу дать.

P.S. И если несложно, поставьте на ютубе оценку)

Re: MINDSTORMS - крестики-нолики

Scorpio » 07 мар 2011, 17:36

Эх, до чего-ж я люблю роботов для настольных игр! Тем более оригинальной конструкции и с качественным видео!
Сам когда-то крестики-нолики ваял.
Пошел на ютуб ставить оценку...

Re: MINDSTORMS - крестики-нолики

aka13 » 07 мар 2011, 17:40

Если есть NXT - айда в раздел Лего! Я там ещё много чего публиковать буду!

Re: MINDSTORMS - крестики-нолики

SkyStorm » 08 мар 2011, 14:30

Прикольно! Мне понравилось! Оригинально и толково сделано!

Re: MINDSTORMS - крестики-нолики

noonv » 09 мар 2011, 01:10

круто! отличная работа!

Re: MINDSTORMS - крестики-нолики

galex1981 » 17 мар 2011, 11:59

Действительно отличная работа!!!


Rambler\'s Top100 Mail.ru counter