Exemple #1
0
void Game::draw() const
{
	drawEnvironment(this);

	drawGameField(false);
	sgoBall.drawGameBall();

	switch (mGameState) {
	case STATE_MENU:
		break;
	case STATE_COUNTDOWN:
		glPushMatrix();
		{
			const Vector3 x = rotateVector(Vector3(1.0f, 0.0f, 0.0f));
			const Vector3 y = rotateVector(Vector3(0.0f, 1.0f, 0.0f));
			const Vector3 z = rotateVector(Vector3(0.0f, 0.0f, 1.0f));

			const Vector3& pos = sgoBall.pos();

			Matrix m;

			m[0][0] = x.x;
			m[0][1] = x.y;
			m[0][2] = x.z;
			m[0][3] = 0.0f;

			m[1][0] = y.x;
			m[1][1] = y.y;
			m[1][2] = y.z;
			m[1][3] = 0.0f;

			m[2][0] = z.x;
			m[2][1] = z.y;
			m[2][2] = z.z;
			m[2][3] = 0.0f;

			m[3][0] = pos.x;
			m[3][1] = pos.y;
			m[3][2] = pos.z;
			m[3][3] = 1.0f;

			glMultMatrixf((GLfloat*) m);

			drawRingStrip(100, mCounter / COUNTDOWN_TIME, mTextureRing);
		}
		glPopMatrix();
		break;
	default:
		break;
	}
}
void try_to_make_move_ai(int player)
{
    lock_gameField();

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (gameField[i][j] == EMPTY && previous_player_move != player) {
                previous_player_move = player;
                gameField[i][j] = player; // ставим в массиве нолик
                drawGameField(i, j);      // отрисовываем интерфейс заново
                unlock_gameField();
                return;
            }
        }
    }

    is_finished_game = winGame(gamePlay(gameField));

    unlock_gameField();
}
int try_to_make_move(int rowField, int colField, int player)
{    
    lock_gameField();

    if (gameField[rowField][colField] == EMPTY && previous_player_move != player) {
        previous_player_move = player;
        gameField[rowField][colField] = player; // ставим в массиве нолик
        drawGameField(rowField, colField);   // отрисовываем интерфейс заново
       
        // проверяем на выигрышную ситуацию (другой клиент проерит в своей потоке)
        is_finished_game = winGame(gamePlay(gameField));

    } else if (gameField[rowField][colField] != EMPTY){
        mi_writeMessage("This place is taken!");
    } else if (previous_player_move == player) {
        mi_writeMessage("CROSS move!");
    }

    unlock_gameField();

    return 0;
}
// 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;
}
Exemple #5
0
void Game::drawBallReflection() const
{
	drawEnvironment(this);
	drawGameField(true);
}
Exemple #6
0
void Game::drawWaterReflection() const
{
	drawGameField(false);
	sgoBall.drawGameBall();
}