int winGame(int winner) { if (winner == EMPTY) { return 0; } mt_setstdcolor(); mt_clrscr(); mt_setbgcolor(clBlack); mt_setfgcolor(clGreen); mt_gotoXY(15, 17); switch(winner) { case ZERO: write(1, "WON ZEROS", 9); return 1; case CROSS: write(1, "WON CROSSES", 11); return 1; case DRAW: write(1, "PLAYED IN DRAW!", 15); return 1; default: return 0; } return 0; }
void draw_main_menu_field(int row) { int tty; /* хранит номер дескриптора */ tty = open("/dev/tty", O_RDWR); /* открытие файла терминала в режиме чтение/запись */ if (tty == -1) { /* проверка на открытие */ fprintf(stderr, "\nmi_drawMainInterface()\n: Can not open tty\n"); close(tty); return; } if (row == 0) { mt_setfgcolor(clYellow); bc_box(2, 3, 5, 42); mt_gotoXY(4, 6); write(tty, " SINGLEPLAYER ", 14); mt_setfgcolor(clGreen); bc_box(7, 3, 5, 42); bc_box(12, 3, 5, 42); mt_gotoXY(9, 6); write(tty, " MULTIPLAYER ", 13); mt_gotoXY(14, 6); write(tty, " EXIT ", 6); } else if (row == 1) { mt_setfgcolor(clYellow); bc_box(7, 3, 5, 42); mt_gotoXY(9, 6); write(tty, " MULTIPLAYER ", 13); mt_setfgcolor(clGreen); bc_box(2, 3, 5, 42); bc_box(12, 3, 5, 42); mt_gotoXY(4, 6); write(tty, " SINGLEPLAYER ", 14); mt_gotoXY(14, 6); write(tty, " EXIT ", 6); } else { mt_setfgcolor(clYellow); bc_box(12, 3, 5, 42); mt_gotoXY(14, 6); write(tty, " EXIT ", 6); mt_setfgcolor(clGreen); bc_box(2, 3, 5, 42); bc_box(7, 3, 5, 42); mt_gotoXY(4, 6); write(tty, " SINGLEPLAYER ", 14); mt_gotoXY(9, 6); write(tty, " MULTIPLAYER ", 13); } }
int menu_session() { int key; int run_flag = -1; int rowField = 1; // Draw main part of interface draw_main_menu(); // Save terminal settings, change mode, hide cursor rk_mytermsave(); rk_mytermregime(0, 0, 1, 0, 1); mt_setcursor(0); // Setup color palete mt_setbgcolor(clBlack); mt_setfgcolor(clGreen); while (rk_readkey(&key) == 0 && key != K_ESC) { switch (key) { case K_UP: if (rowField != 0) { rowField--; draw_main_menu_field(rowField); } break; case K_DOWN: if (rowField != 2) { rowField++; draw_main_menu_field(rowField); } break; case K_ENTER: if (rowField == 0) { run_flag = 0; } else if (rowField == 1) { run_flag = 1; } else { run_flag = 2; } break; } if (key == K_ENTER) { break; } } rk_mytermrestore(); mt_setcursor(1); mt_setstdcolor(); mt_gotoXY(39, 1); mt_clrscr(); return run_flag; }
void print_keys(int x, int y) { mt_gotoXY(x, y); printf("l - load"); mt_gotoXY(x, y + 1); printf("s - save"); mt_gotoXY(x, y + 2); printf("r - run"); mt_gotoXY(x, y + 3); printf("t - step"); mt_gotoXY(x, y + 4); printf("i - reset"); mt_gotoXY(x, y + 5); printf("F5 - accumulator"); mt_gotoXY(x, y + 6); printf("F6 - instructionCounter"); }
// main single player game routine int single_game_session() { int key; int chPlayer = ZERO; pthread_t ai_player; int rowField = 0; int colField = 0; char msgChat[250] = ""; int len; // Draw main part of interface mi_drawMainInterface(); drawGameField(0, 0); // Save terminal settings, change mode, hide cursor rk_mytermsave(); rk_mytermregime(0, 0, 1, 0, 1); mt_setcursor(0); // Setup color palete mt_setbgcolor(clBlack); mt_setfgcolor(clGreen); int unused; pthread_create(&ai_player, 0, ctlAiInteraction, (void*)&unused); int whoWin; char msgSign[250]; if (chPlayer == 1) { mi_writeMessage("You are playing ZEROS"); } else if (chPlayer == 2) { mi_writeMessage("You are playing CROSSES"); } while (is_finished_game == 0 && rk_readkey(&key) == 0 && key != K_ESC) { switch (key) { case K_R: // not supproted break; case K_T: // not supproted break; case K_UP: if (rowField != 0) { rowField--; drawGameField(rowField, colField); } break; case K_DOWN: if (rowField < 2) { rowField++; drawGameField(rowField, colField); } break; case K_LEFT: if (colField != 0) { colField--; drawGameField(rowField, colField); } break; case K_RIGHT: if (colField < 2) { colField++; drawGameField(rowField, colField); } break; case K_ENTER: break; case K_F5: // place ZERO try_to_make_move(rowField, colField, chPlayer); break; case K_F6: // place CROSS try_to_make_move(rowField, colField, chPlayer); break; } } pthread_cancel(ai_player); rk_mytermrestore(); mt_setcursor(1); mt_setstdcolor(); mt_gotoXY(39, 1); return 0; }