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(); } }
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); }