Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<conio.h>
- #include<stdlib.h>
- #include <windows.h>
- int board[10] = {2,2,2,2,2,2,2,2,2,2};
- int turn = 1,flag = 0;
- int player,comp;
- void menu();
- void go(int n);
- void start_game();
- void check_draw();
- void draw_board();
- void player_first();
- void put_X_O(char ch,int pos);
- COORD coord={0,0}; // this is global variable
- //center of axis is set to the top left cornor of the screen
- void gotoxy(int x,int y)
- {
- coord.X=x;
- coord.Y=y;
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
- }
- void main()
- {
- system("cls");
- menu();
- getch();
- }
- void menu()
- {
- int choice;
- system("cls");
- printf("\n--------MENU--------");
- printf("\n1 : Play with X");
- printf("\n2 : Play with O");
- printf("\n3 : Exit");
- printf("\nEnter your choice:>");
- scanf("%d",&choice);
- turn = 1;
- switch (choice)
- {
- case 1:
- player = 1;
- comp = 0;
- player_first();
- break;
- case 2:
- player = 0;
- comp = 1;
- start_game();
- break;
- case 3:
- exit(1);
- default:
- menu();
- }
- }
- int make2()
- {
- if(board[5] == 2)
- return 5;
- if(board[2] == 2)
- return 2;
- if(board[4] == 2)
- return 4;
- if(board[6] == 2)
- return 6;
- if(board[8] == 2)
- return 8;
- return 0;
- }
- int make4()
- {
- if(board[1] == 2)
- return 1;
- if(board[3] == 2)
- return 3;
- if(board[7] == 2)
- return 7;
- if(board[9] == 2)
- return 9;
- return 0;
- }
- int posswin(int p)
- {
- // p==1 then X p==0 then O
- int i;
- int check_val,pos;
- if(p == 1)
- check_val = 18;
- else
- check_val = 50;
- i = 1;
- while(i<=9)//row check
- {
- if(board[i] * board[i+1] * board[i+2] == check_val)
- {
- if(board[i] == 2)
- return i;
- if(board[i+1] == 2)
- return i+1;
- if(board[i+2] == 2)
- return i+2;
- }
- i+=3;
- }
- i = 1;
- while(i<=3)//column check
- {
- if(board[i] * board[i+3] * board[i+6] == check_val)
- {
- if(board[i] == 2)
- return i;
- if(board[i+3] == 2)
- return i+3;
- if(board[i+6] == 2)
- return i+6;
- }
- i++;
- }
- if(board[1] * board[5] * board[9] == check_val)
- {
- if(board[1] == 2)
- return 1;
- if(board[5] == 2)
- return 5;
- if(board[9] == 2)
- return 9;
- }
- if(board[3] * board[5] * board[7] == check_val)
- {
- if(board[3] == 2)
- return 3;
- if(board[5] == 2)
- return 5;
- if(board[7] == 2)
- return 7;
- }
- return 0;
- }
- void go(int n)
- {
- if(turn % 2)
- board[n] = 3;
- else
- board[n] = 5;
- turn++;
- }
- void player_first()
- {
- int pos;
- check_draw();
- draw_board();
- gotoxy(30,18);
- printf("Your Turn :> ");
- scanf("%d",&pos);
- if(board[pos] != 2)
- player_first();
- if(pos == posswin(player))
- {
- go(pos);
- draw_board();
- gotoxy(30,20);
- //textcolor(128+RED);
- printf("Player Wins");
- getch();
- exit(0);
- }
- go(pos);
- draw_board();
- start_game();
- }
- void start_game()
- {
- // p==1 then X p==0 then O
- if(posswin(comp))
- {
- go(posswin(comp));
- flag = 1;
- }
- else
- if(posswin(player))
- go(posswin(player));
- else
- if(make2())
- go(make2());
- else
- go(make4());
- draw_board();
- if(flag)
- {
- gotoxy(30,20);
- //textcolor(128+RED);
- printf("Computer wins");
- getch();
- }
- else
- player_first();
- }
- void check_draw()
- {
- if(turn > 9)
- {
- gotoxy(30,20);
- //textcolor(128+RED);
- printf("Game Draw");
- getch();
- exit(0);
- }
- }
- void draw_board()
- {
- int j;
- for(j=9;j<17;j++)
- {
- gotoxy(35,j);
- printf("| |");
- }
- gotoxy(28,11);
- printf("-----------------------");
- gotoxy(28,14);
- printf("-----------------------");
- for(j=1;j<10;j++)
- {
- if(board[j] == 3)
- put_X_O('X',j);
- else
- if(board[j] == 5)
- put_X_O('O',j);
- }
- }
- void put_X_O(char ch,int pos)
- {
- int m;
- int x = 31, y = 10;
- m = pos;
- if(m > 3)
- {
- while(m > 3)
- {
- y += 3;
- m -= 3;
- }
- }
- if(pos % 3 == 0)
- x += 16;
- else
- {
- pos %= 3;
- pos--;
- while(pos)
- {
- x+=8;
- pos--;
- }
- }
- gotoxy(x,y);
- printf("%c",ch);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement