Esempio n. 1
0
void TPuzzleView::handleEvent(TEvent& event) {
    TView::handleEvent(event);

    if (solved && (event.what & (evKeyboard | evMouse))) {
        scramble();
        clearEvent(event);
    }

    if (event.what == evMouseDown) {
        moveTile(event.mouse.where);
        clearEvent(event);
        winCheck();
    } else if (event.what == evKeyDown) {
        moveKey(event.keyDown.keyCode);
        clearEvent(event);
        winCheck();
    }
}
Esempio n. 2
0
int startTheGame()
{
    char choice[3], ch;
    int index, easyIndex, hardIndex;
    int position;
    int isFirstTurn;
    int i, j;
    int isWin;
    int playerEasyWinScore = 0;
    int playerEasyLostScore = 0;
    int playerEasyTieScore = 0;
    int playerHardWinScore = 0;
    int playerHardLostScore = 0;
    int playerHardTieScore = 0;
    int gameplay;   // 0 - Easy gameplay, 1 - Hard gameplay
    int isSavedEasy, isSavedHard;
    char easy[3][3], hard[3][3];
    FILE *userFile = fopen(FILEPATH, "r");

    if(userFile == NULL)
    {
        createUserDataFile();
        userFile = fopen(FILEPATH, "r");
    }

    fscanf(userFile, "%d", &gameplay);
    fscanf(userFile, "%d %d %d", &playerEasyWinScore, &playerEasyLostScore, &playerEasyTieScore);
    fscanf(userFile, "%d %d %d", &playerHardWinScore, &playerHardLostScore, &playerHardTieScore);
    fscanf(userFile, "%d %d", &isSavedEasy, &isSavedHard);

    // Check for any saved game
    if(isSavedEasy)
    {
        fscanf(userFile, "%d", &easyIndex);
        for(i = 0; i < 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                ch = getc(userFile);
                if(ch != '\n')
                    easy[i][j] = ch;
                ch = getc(userFile);
                if(ch != '\n')
                    easy[i][j] = ch;
            }
        }
    }

    if(isSavedHard)
    {
        fscanf(userFile, "%d", &hardIndex);
        for(i = 0; i < 3; i++)
        {
            for(j = 0; j < 3; j++)
            {
                ch = getc(userFile);
                if(ch != '\n')
                    hard[i][j] = ch;
                ch = getc(userFile);
                if(ch != '\n')
                    hard[i][j] = ch;
            }
        }
    }

    fclose(userFile);

    if( (gameplay && isSavedHard) || (!gameplay && isSavedEasy) )
    {
        system("cls");
        printf("You have a saved game.\n");
        printf("1. Continue\n");
        printf("2. New Game\n");
        printf("New Game will overwrite the saved game of current gameplay.\n");
        printf("Enter your choice:(Default - Continue) ");
        fgets(choice, sizeof(choice), stdin);

        if(gameplay)
        {
            isSavedHard = 0;
            userFile = fopen(FILEPATH, "r+");
            fprintf(userFile, "%d\n", gameplay);
            fprintf(userFile, "%d %d %d\n", playerEasyWinScore, playerEasyLostScore, playerEasyTieScore);
            fprintf(userFile, "%d %d %d\n", playerHardWinScore, playerHardLostScore, playerHardTieScore);
            fprintf(userFile, "%d %d\n", isSavedEasy, isSavedHard);
            if(isSavedEasy)
            {
                fprintf(userFile, "%d\n", easyIndex);
                for(i = 0; i < 3; i++)
                    for(j = 0; j < 3; j++)
                        fprintf(userFile, "%c\n", easy[i][j]);
            }
            fclose(userFile);
        }
        else
        {
            isSavedEasy = 0;
            userFile = fopen(FILEPATH, "r+");
            fprintf(userFile, "%d\n", gameplay);
            fprintf(userFile, "%d %d %d\n", playerEasyWinScore, playerEasyLostScore, playerEasyTieScore);
            fprintf(userFile, "%d %d %d\n", playerHardWinScore, playerHardLostScore, playerHardTieScore);
            fprintf(userFile, "%d %d\n", isSavedEasy, isSavedHard);
            if(isSavedHard)
            {
                fprintf(userFile, "%d\n", hardIndex);
                for(i = 0; i < 3; i++)
                    for(j = 0; j < 3; j++)
                        fprintf(userFile, "%c\n", hard[i][j]);
            }
            fclose(userFile);
        }

        if( (atoi(choice)) == 2)
        {
            initializeBoard();
            index = 0;
        }
        else
        {
            if(gameplay && isSavedHard)
            {
                index = hardIndex;
                for(i = 0; i < 3; i++)
                    for(j = 0; j < 3; j++)
                        base[i][j] = hard[i][j];
            }
            else
            {
                index = easyIndex;
                for(i = 0; i < 3; i++)
                    for(j = 0; j < 3; j++)
                        base[i][j] = easy[i][j];
            }
        }
    }
    else
    {
        initializeBoard();
        index = 0;
    }

    // Start the game
    for(isFirstTurn = 1; index < 9; index++)
    {
        if(index % 2 == 0)
        {
            while(1)
            {
                system("cls");
                displayTheBoard();

                if (!isFirstTurn)
                {
                    printf("AI move: %d\n", position);
                }
                else
                {
                    isFirstTurn = 0;
                }

                printf("Enter the position at which you want to put X: (0: Menu) ");
                fgets(choice, sizeof(choice), stdin);

                position = atoi(choice);

                switch(position)
                {
                    case 0:
                        system("cls");
                        printf("\nDo you want to save and quit? (Default - Resume)\n");
                        printf("1. Resume\n2. Save and Quit\n3. Quit without saving\n\n");
                        printf("Enter your choice: ");
                        fgets(choice, sizeof(choice), stdin);

                        switch(atoi(choice))
                        {
                            case 1:
                                continue;
                                break;
                            case 2:
                                if(gameplay)
                                    isSavedHard = 1;
                                else
                                    isSavedEasy = 1;

                                userFile = fopen(FILEPATH, "r+");
                                fprintf(userFile, "%d\n", gameplay);
                                fprintf(userFile, "%d %d %d\n", playerEasyWinScore, playerEasyLostScore, playerEasyTieScore);
                                fprintf(userFile, "%d %d %d\n", playerHardWinScore, playerHardLostScore, playerHardTieScore);
                                fprintf(userFile, "%d %d\n", isSavedEasy, isSavedHard);

                                if(gameplay)
                                {
                                    if(isSavedEasy == 1)
                                    {
                                        fprintf(userFile, "%d\n", easyIndex);
                                        for(i = 0; i < 3; i++)
                                            for(j = 0; j < 3; j++)
                                                fprintf(userFile, "%c\n",easy[i][j]);
                                    }
                                    fprintf(userFile, "%d\n", index);
                                    for(i = 0; i < 3; i++)
                                        for(j = 0; j < 3; j++)
                                            fprintf(userFile, "%c\n",base[i][j]);
                                }
                                else
                                {
                                    fprintf(userFile, "%d\n", index);
                                    for(i = 0; i < 3; i++)
                                        for(j = 0; j < 3; j++)
                                            fprintf(userFile, "%c\n",base[i][j]);
                                    if(isSavedHard == 1)
                                    {
                                        fprintf(userFile, "%d\n", hardIndex);
                                        for(i = 0; i < 3; i++)
                                            for(j = 0; j < 3; j++)
                                                fprintf(userFile, "%c\n",hard[i][j]);
                                    }
                                }
                                fclose(userFile);
                                return(0);
                                break;
                            case 3:
                                return(0);
                                break;
                            default:
                                continue;
                        }
                        break;
                    case 1:
                    //Fall through
                    case 2:
                    //Fall through
                    case 3:
                    //Fall through
                    case 4:
                    //Fall through
                    case 5:
                    //Fall through
                    case 6:
                    //Fall through
                    case 7:
                    //Fall through
                    case 8:
                    //Fall through
                    case 9:
                        if(checkThePlace(position))
                            break;
                        else
                        {
                            printf("\nERROR:Position is not available.\n");
                            printf("Try again.\n\n");
                            system("pause");
                            continue;
                        }
                        break;
                    default:
                        printf("\nERROR:Position is not valid.\n");
                        printf("Try again.\n\n");
                        system("pause");
                        continue;
                }
                break;
            }
            playerMove(position, 'X');  // User's move
        }
        else
        {
            position = getThePosition();
            playerMove(position, 'O');  // AI's move
        }

        system("cls");
        displayTheBoard();

        isWin = winCheck();     // Check the win conditions

        if(isWin)
        {
            if(index % 2 == 0)  // User wins
            {
                printf("               == You won ==\n\n");
                if(gameplay)
                    playerHardWinScore++;
                else
                    playerEasyWinScore++;
            }
            else    // AI wins
            {
                printf("               = You lost! =\n\n");
                if(gameplay)
                    playerHardLostScore++;
                else
                    playerEasyLostScore++;
            }
            break;
        }
    }

    if(!isWin)
    {
        printf("               ==== TIE ====\n\n");
        if(gameplay)
            playerHardTieScore++;
        else
            playerEasyTieScore++;
    }

    userFile = fopen(FILEPATH, "r+");
    fprintf(userFile, "%d\n", gameplay);
    fprintf(userFile, "%d %d %d\n", playerEasyWinScore, playerEasyLostScore, playerEasyTieScore);
    fprintf(userFile, "%d %d %d\n", playerHardWinScore, playerHardLostScore, playerHardTieScore);
    fclose(userFile);

    printf("\nEnter 1 to retry, or press any other key to go to Main Menu: ");
    fgets(choice, sizeof(choice), stdin);
    if(atoi(choice) == 1)
        startTheGame();
    return(0);
}