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;
}
Пример #4
0
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;
}