// These states wait for a timeout before moving on to the next action: case STATE_HUMAN_TO_MOVE_DRAW_DECLINED: Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, " SORRY, BUT I THINK\x80"); Print_Str_d (MESSAGE_Y-10, -120, " I'LL KEEP PLAYING...\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_HUMAN_MUST_TAKE_ANOTHER_TIMEOUT: Fadein_text(); Print_Str_d (MESSAGE_Y-10, -120, " TAKE ANOTHER PIECE!\x80"); Dim_Board(); // OR... Print_Str_d (MESSAGE_Y-10, -120, " MULTIPLE JUMP!\x80"); ? // For now, the human could cheat and move any of his pieces. // However the one that just took an opponent piece is pre-selected // so with luck it won't occur to them before I've had a chance to // fix it! (Note there is currently a problem with the pre-selected // piece being disallowed. You have to unselect and reselect it.) // TO DO: should that MODIF < 12 test from above appear here somewhere? if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_CHUCKLE_TIMEOUT: // "He-He! I am going to win!!" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, " HEH HEH HEH!\x80"); Print_Str_d (MESSAGE_Y-10, -120, " I AM GOING TO WIN!\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_OTHER_PLAYER_STARTS_ON_DRAW: Fadein_text(); Print_Str_d (MESSAGE_Y+0, -120, " I ACCEPT A DRAW!\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_OTHER_PLAYER_STARTS; return; case STATE_OTHER_PLAYER_STARTS: Fadein_text(); if (First_player_was == HUMAN) { Print_Str_d (MESSAGE_Y+0, -120, " I PLAY FIRST THIS TIME\x80"); } else { Print_Str_d (MESSAGE_Y+0, -120, "YOUR TURN TO PLAY FIRST\x80"); } Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_OTHER_PLAYER_STARTS_NOW; return; case STATE_YOU_HAVE_NO_PIECE_ON_TIMEOUT: // "You do not have a piece on square " Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, "YOU HAVE NO PIECE ON\x80"); Print_Str_d (MESSAGE_Y+10, 108, &REPLY (1)); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_FROM_SQUARE_NOT_EXIST_TIMEOUT: // The square ?? does not exist!" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, " NO SUCH SQUARE AS\x80"); Print_Str_d (MESSAGE_Y+10, 108, &REPLY (1)); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_TO_SQUARE_NOT_EXIST_TIMEOUT: // You cannot move to square ??; it does not exist!" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, " NO SUCH SQUARE AS\x80"); Print_Str_d (MESSAGE_Y+10, 108, &REPLY (4)); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_TO_SQUARE_OCCUPIED_TIMEOUT: // "You cannot move to square ??; it is already occupied!" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, " OCCUPIED SQUARE\x80"); REPLY(6) = 0x80; // REPLY 4:5 SHOULD BE THE DEST SQUARE Print_Str_d (MESSAGE_Y+10, 80, &REPLY (4)); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; return; case STATE_YOU_MUST_TAKE_TIMEOUT: // "You MUST take the piece that I am offering you" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, "YOU MUST TAKE THE PIECE\x80"); Print_Str_d (MESSAGE_Y-10, -120, " I AM OFFERING YOU\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; // WON'T WORK WITH MULTIPLE TAKES return; case STATE_NOT_CROWNED_TIMEOUT: // "You cannot move that piece backwards!" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -128, "YOU CANNOT MOVE BACKWARDS\x80"); Print_Str_d (MESSAGE_Y-10, -128, " WITHOUT A CROWN\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; // WON'T WORK WITH MULTIPLE TAKES return; case STATE_NO_SUCH_MOVE_TIMEOUT: // "That move does not exist in my rule book!" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, "THAT MOVE DOES NOT EXIST\x80"); Print_Str_d (MESSAGE_Y-10, -120, " IN MY RULE BOOK!\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; // WON'T WORK WITH MULTIPLE TAKES return; case STATE_NOT_JUMPING_MY_PIECE_TIMEOUT: // "You cannot do that. You are not jumping one of my pieces" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, "THAT IS NOT A JUMP OVER\x80"); Print_Str_d (MESSAGE_Y-10, -120, " ONE OF MY PIECES!\x80"); Dim_Board(); if (--STATE_TIMEOUT == 0) STATE = STATE_HUMAN_TO_MOVE; // MAY NEED A DIFFERENT TARGET TO RESUME HUMAN'S PLAY? return; // These states wait for the user to press a button: case STATE_NO_PIECES_LEFT_STOP: // "I have no pieces left so I suppose you have won" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, " I HAVE NO PIECES LEFT\x80"); Print_Str_d (MESSAGE_Y-10, -120, " SO I GUESS YOU WIN!\x80"); Print_Str_d (MESSAGE_Y-40, -120, " PRESS ANY BUTTON\x80"); Print_Str_d (MESSAGE_Y-60, -120, " FOR ANOTHER GAME\x80"); Dim_Board(); if ((buttons_pressed()&15) != 0) STATE = STATE_OTHER_PLAYER_STARTS; return; case STATE_I_CANNOT_MOVE_STOP: // "I cannot move any of my pieces so you win" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -128, "I CANNOT MOVE ANY PIECES\x80"); Print_Str_d (MESSAGE_Y-10, -128, " SO YOU WIN!\x80"); Print_Str_d (MESSAGE_Y-40, -120, " PRESS ANY BUTTON\x80"); Print_Str_d (MESSAGE_Y-60, -120, " FOR ANOTHER GAME\x80"); Dim_Board(); if ((buttons_pressed()&15) != 0) STATE = STATE_OTHER_PLAYER_STARTS; return; case STATE_I_RESIGN_STOP: // "I resign" Fadein_text(); Print_Str_d (MESSAGE_Y+0, -120 , " I RESIGN!\x80"); Print_Str_d (MESSAGE_Y-40, -120, " PRESS ANY BUTTON\x80"); Print_Str_d (MESSAGE_Y-60, -120, " FOR ANOTHER GAME\x80"); Dim_Board(); if ((buttons_pressed()&15) != 0) STATE = STATE_OTHER_PLAYER_STARTS; return; case STATE_YOU_CANNOT_MOVE_STOP: // "You cannot move any of your pieces so I win" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, "YOU CANNOT MOVE ANY PIECES\x80"); Print_Str_d (MESSAGE_Y-10, -120, " SO I WIN!\x80"); Print_Str_d (MESSAGE_Y-40, -120, " PRESS ANY BUTTON\x80"); Print_Str_d (MESSAGE_Y-60, -120, " FOR ANOTHER GAME\x80"); Dim_Board(); if ((buttons_pressed()&15) != 0) STATE = STATE_OTHER_PLAYER_STARTS; return; case STATE_YOU_HAVE_NO_PIECES_STOP: // "You have no pieces left so I win" Fadein_text(); Print_Str_d (MESSAGE_Y+10, -120, "YOU HAVE NO PIECES LEFT\x80"); Print_Str_d (MESSAGE_Y-10, -120, " SO I WIN!\x80"); Print_Str_d (MESSAGE_Y-40, -120, " PRESS ANY BUTTON\x80"); Print_Str_d (MESSAGE_Y-60, -120, " FOR ANOTHER GAME\x80"); Dim_Board(); if ((buttons_pressed()&15) != 0) STATE = STATE_OTHER_PLAYER_STARTS; return;