Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <windows.h>
- typedef enum {false, true } bool;
- char square[10] = { 'o', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
- int checkwin();
- void board();
- int main()
- {
- int PVPOneWins = 0, PVPTwoWins = 0,PVEOneWins= 0, AIWins = 0;
- char GameType;
- do
- {
- printf("Choose the game session type:\n 1 for pvp\n 2 for pve\n 3 for stats\n 4 for exit");
- int player = 1, choice;
- int i;
- char stop = '1';
- char mark;
- GameType = getch();
- //OCHEN MNOGO BUKAV RADI PVP
- if ( GameType == '1')
- //OCHEN MNOGO BUKAV RADI PVP
- //choice = getch();
- while ( stop != '0')
- {
- do
- {
- COORD crd = {70, 20};
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- GetConsoleScreenBufferInfo(hStdOut, &csbi);
- if ((csbi.srWindow.Right - csbi.srWindow.Left) != 70 || (csbi.srWindow.Bottom - csbi.srWindow.Top) !=20)
- {
- HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD crd = {70, 20};
- SMALL_RECT src = {0, 0, crd.X-1, crd.Y-1};
- SetConsoleWindowInfo(out_handle, true, &src);
- SetConsoleScreenBufferSize(out_handle, crd);
- }
- board();
- printf("PVP MODE IS ON\nTo stop the game press '0' and any key\n");
- player = (player % 2) ? 1 : 2;
- printf("Player %d, enter a number: ", player);
- choice = getch();
- mark = (player == 1) ? 'X' : 'O';
- if (choice == '0')
- {
- stop = '0';
- break;
- }
- if (choice == '1' && square[1] == '1')
- square[1] = mark;
- else if (choice == '2' && square[2] == '2')
- square[2] = mark;
- else if (choice == '3' && square[3] == '3')
- square[3] = mark;
- else if (choice == '4' && square[4] == '4')
- square[4] = mark;
- else if (choice == '5' && square[5] == '5')
- square[5] = mark;
- else if (choice == '6' && square[6] == '6')
- square[6] = mark;
- else if (choice == '7' && square[7] == '7')
- square[7] = mark;
- else if (choice == '8' && square[8] == '8')
- square[8] = mark;
- else if (choice == '9' && square[9] == '9')
- square[9] = mark;
- else
- {
- printf("Invalid move ");
- player--;
- getch();
- }
- i = checkwin();
- player++;
- }
- while (i == - 1);
- //PROVERKA KTO WIN
- if (i == 1)
- {
- board();
- if( player %2 == 1)
- PVPTwoWins++;
- else
- PVPOneWins++;
- printf("==>\aPlayer %d win\n Press any key to continue\n ", --player);
- }
- if (i == 0)
- {
- board();
- printf("==>\aGame draw");
- }
- //CHISTKA
- getch();
- for (i = 0; i != 10; i++)//PEREPISIVAYU MASSIV
- {
- square[i] = i +'0';
- }
- system("cls");
- }
- //OCHEN MNOGO BUKAV RADI PVE
- if (GameType == '2')
- //OCHEN MNOGO BUKAV RADI PVE
- while( stop != '0')
- {
- do
- {
- COORD crd = {70, 20};
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
- GetConsoleScreenBufferInfo(hStdOut, &csbi);
- if ((csbi.srWindow.Right - csbi.srWindow.Left) != 70 || (csbi.srWindow.Bottom - csbi.srWindow.Top) !=20)
- {
- HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD crd = {70, 20};
- SMALL_RECT src = {0, 0, crd.X-1, crd.Y-1};
- SetConsoleWindowInfo(out_handle, true, &src);
- SetConsoleScreenBufferSize(out_handle, crd);
- }
- board();
- printf("PVE MODE IS ON\nTo stop the game press '0' and any key\n");
- player = (player % 2) ? 1 : 2;
- printf("Player %d, enter a number: ", player);
- if (player == 1 )
- {
- choice = getch();
- }
- else
- choice = (rand()%9) +1 + '0';
- mark = (player == 1) ? 'X' : 'O';
- if (choice == '0')
- {
- stop = '0';
- break;
- }
- if (choice == '1' && square[1] == '1')
- square[1] = mark;
- else if (choice == '2' && square[2] == '2')
- square[2] = mark;
- else if (choice == '3' && square[3] == '3')
- square[3] = mark;
- else if (choice == '4' && square[4] == '4')
- square[4] = mark;
- else if (choice == '5' && square[5] == '5')
- square[5] = mark;
- else if (choice == '6' && square[6] == '6')
- square[6] = mark;
- else if (choice == '7' && square[7] == '7')
- square[7] = mark;
- else if (choice == '8' && square[8] == '8')
- square[8] = mark;
- else if (choice == '9' && square[9] == '9')
- square[9] = mark;
- else
- {
- printf("AI made a mistake- ");
- choice = (rand()%9) +1 + '0';
- player--;
- //getch();
- }
- i = checkwin();
- player++;
- }
- while (i == - 1);
- //PROVERKA KTO WIN
- if (i == 1)
- {
- board();
- if ( player %2 == 1)
- {
- AIWins++;
- }
- else
- {
- PVEOneWins++;
- }
- printf("==>\aPlayer %d win Press any key to continue\n ", --player);
- }
- if (i == 0)
- {
- board();
- printf("==>\aGame draw");
- }
- //CHISTKA
- getch();
- for (i = 0; i != 10; i++)//PEREPISIVAYU MASSIV
- {
- square[i] = i +'0';
- }
- system("cls");
- }
- if (GameType == '3')
- {
- printf("\nPVP_1:%d\n", PVPOneWins);
- printf("PVP_2:%d\n", PVPTwoWins);
- printf("PVE:%d\n", PVEOneWins);
- printf("AI:%d\n", AIWins);
- }
- //VIHOD
- if( GameType == '4')
- {
- system("cls");
- break;
- }
- }
- while (1==1);
- return 0;
- }
- /*********************************************
- FUNCTION TO RETURN GAME STATUS
- 1 FOR GAME IS OVER WITH RESULT
- -1 FOR GAME IS IN PROGRESS
- O GAME IS OVER AND NO RESULT
- **********************************************/
- int checkwin()
- {
- if (square[1] == square[2] && square[2] == square[3])
- return 1;
- else if (square[4] == square[5] && square[5] == square[6])
- return 1;
- else if (square[7] == square[8] && square[8] == square[9])
- return 1;
- else if (square[1] == square[4] && square[4] == square[7])
- return 1;
- else if (square[2] == square[5] && square[5] == square[8])
- return 1;
- else if (square[3] == square[6] && square[6] == square[9])
- return 1;
- else if (square[1] == square[5] && square[5] == square[9])
- return 1;
- else if (square[3] == square[5] && square[5] == square[7])
- return 1;
- else if (square[1] != '1' && square[2] != '2' && square[3] != '3' &&
- square[4] != '4' && square[5] != '5' && square[6] != '6' && square[7]
- != '7' && square[8] != '8' && square[9] != '9')
- return 0;
- else
- return - 1;
- }
- /*******************************************************************
- FUNCTION TO DRAW BOARD OF TIC TAC TOE WITH PLAYERS MARK
- ********************************************************************/
- void board()
- {
- system("cls");
- HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD crd = {70, 20};
- SMALL_RECT src = {0, 0, crd.X-1, crd.Y-1};
- SetConsoleWindowInfo(out_handle, true, &src);
- SetConsoleScreenBufferSize(out_handle, crd);
- printf("\n\n\tTic Tac Toe\n\n");
- printf("Player 1 (X) - Player 2 (O)\n\n\n");
- printf(" | | \n");
- printf(" %c | %c | %c \n", square[1], square[2], square[3]);
- printf("_____|_____|_____\n");
- printf(" | | \n");
- printf(" %c | %c | %c \n", square[4], square[5], square[6]);
- printf("_____|_____|_____\n");
- printf(" | | \n");
- /* HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE);
- COORD crd = {100, 50};
- SMALL_RECT src = {0, 0, crd.X-1, crd.Y-1};
- //SetConsoleWindowInfo(out_handle, true, &src);
- SetConsoleScreenBufferSize(out_handle, crd);
- */
- printf(" %c | %c | %c \n", square[7], square[8], square[9]);
- printf(" | | \n\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement