Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* #include */
- #include <iostream>
- #include <string>
- using namespace std;
- #include <windows.h>
- #include <cstdlib>
- #include <ctime>
- #include <conio.h>
- char gameboard[10],key;
- short score1,score2,gamemode;
- string name1,name2;
- HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
- CONSOLE_CURSOR_INFO CursorInfo;
- struct Color
- {
- Color(unsigned short c): cul(c) {}
- Color() {}
- unsigned short cul;
- };
- ostream& operator<< (ostream& os,Color c)
- {
- SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c.cul);
- return os;
- }
- Color colarray[9];
- const Color NC=7;
- const Color RED=12;
- const Color GREEN=10;
- const Color GOLD=6;
- const Color GREENBK=10+(8<<4);
- const Color REDBK=12+(8<<4);
- void clearscreen()
- {
- COORD home;home.X=0;home.Y=0;DWORD Written;
- FillConsoleOutputCharacter(hOut,(TCHAR)' ',(80*300),home,&Written);
- FillConsoleOutputAttribute(hOut,7,(80*300),home,&Written);
- SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),home);
- SetConsoleTextAttribute(hOut,7);
- }
- void wait()
- {
- INPUT_RECORD InputRecord;
- DWORD Writtten;
- HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);
- while(true)
- {
- ReadConsoleInputA(hStdIn,&InputRecord,1,&Writtten);
- if(InputRecord.EventType==KEY_EVENT&&InputRecord.Event.KeyEvent.bKeyDown) break;
- }
- }
- void AiMove()
- {
- srand(time(0));
- do{
- key=rand()%9;
- }while(gameboard[key]=='X'||gameboard[key]=='0');
- key+=49;
- if(gameboard[0]=='0'&&gameboard[1]=='0'&&gameboard[2]=='3') key='3';
- if(gameboard[1]=='0'&&gameboard[2]=='0'&&gameboard[0]=='1') key='1';
- if(gameboard[0]=='0'&&gameboard[2]=='0'&&gameboard[1]=='2') key='2';
- if(gameboard[3]=='0'&&gameboard[4]=='0'&&gameboard[5]=='6') key='6';
- if(gameboard[4]=='0'&&gameboard[5]=='0'&&gameboard[3]=='4') key='4';
- if(gameboard[3]=='0'&&gameboard[5]=='0'&&gameboard[4]=='5') key='5';
- if(gameboard[6]=='0'&&gameboard[7]=='0'&&gameboard[8]=='9') key='9';
- if(gameboard[7]=='0'&&gameboard[8]=='0'&&gameboard[6]=='7') key='7';
- if(gameboard[0]=='0'&&gameboard[4]=='0'&&gameboard[8]=='9') key='9';
- if(gameboard[4]=='0'&&gameboard[8]=='0'&&gameboard[0]=='1') key='1';
- if(gameboard[0]=='0'&&gameboard[8]=='0'&&gameboard[4]=='5') key='5';
- if(gameboard[2]=='0'&&gameboard[4]=='0'&&gameboard[6]=='7') key='7';
- if(gameboard[4]=='0'&&gameboard[6]=='0'&&gameboard[2]=='3') key='3';
- if(gameboard[2]=='0'&&gameboard[6]=='0'&&gameboard[4]=='5') key='5';
- if(gameboard[0]=='0'&&gameboard[3]=='0'&&gameboard[6]=='7') key='7';
- if(gameboard[3]=='0'&&gameboard[6]=='0'&&gameboard[0]=='1') key='1';
- if(gameboard[0]=='0'&&gameboard[6]=='0'&&gameboard[3]=='4') key='4';
- if(gameboard[1]=='0'&&gameboard[4]=='0'&&gameboard[7]=='8') key='8';
- if(gameboard[4]=='0'&&gameboard[7]=='0'&&gameboard[1]=='2') key='2';
- if(gameboard[1]=='0'&&gameboard[7]=='0'&&gameboard[4]=='5') key='5';
- if(gameboard[2]=='0'&&gameboard[5]=='0'&&gameboard[8]=='9') key='9';
- if(gameboard[5]=='0'&&gameboard[8]=='0'&&gameboard[2]=='3') key='3';
- if(gameboard[2]=='0'&&gameboard[8]=='0'&&gameboard[5]=='6') key='6';
- if(gameboard[6]=='0'&&gameboard[8]=='0'&&gameboard[7]=='8') key='8';
- if(gameboard[0]=='0'&&gameboard[4]=='0'&&gameboard[8]=='9') key='9';
- ////// blocare
- if(gameboard[0]=='X'&&gameboard[1]=='X'&&gameboard[2]=='3') key='3';
- if(gameboard[1]=='X'&&gameboard[2]=='X'&&gameboard[0]=='1') key='1';
- if(gameboard[0]=='X'&&gameboard[2]=='X'&&gameboard[1]=='2') key='2';
- if(gameboard[3]=='X'&&gameboard[4]=='X'&&gameboard[5]=='6') key='6';
- if(gameboard[4]=='X'&&gameboard[5]=='X'&&gameboard[3]=='4') key='4';
- if(gameboard[3]=='X'&&gameboard[5]=='X'&&gameboard[4]=='5') key='5';
- if(gameboard[6]=='X'&&gameboard[7]=='X'&&gameboard[8]=='9') key='9';
- if(gameboard[7]=='X'&&gameboard[8]=='X'&&gameboard[6]=='7') key='7';
- if(gameboard[0]=='X'&&gameboard[4]=='X'&&gameboard[8]=='9') key='9';
- if(gameboard[4]=='X'&&gameboard[8]=='X'&&gameboard[0]=='1') key='1';
- if(gameboard[0]=='X'&&gameboard[8]=='X'&&gameboard[4]=='5') key='5';
- if(gameboard[2]=='X'&&gameboard[4]=='X'&&gameboard[6]=='7') key='7';
- if(gameboard[4]=='X'&&gameboard[6]=='X'&&gameboard[2]=='3') key='3';
- if(gameboard[2]=='X'&&gameboard[6]=='X'&&gameboard[4]=='5') key='5';
- if(gameboard[0]=='X'&&gameboard[3]=='X'&&gameboard[6]=='7') key='7';
- if(gameboard[3]=='X'&&gameboard[6]=='X'&&gameboard[0]=='1') key='1';
- if(gameboard[0]=='X'&&gameboard[6]=='X'&&gameboard[3]=='4') key='4';
- if(gameboard[1]=='X'&&gameboard[4]=='X'&&gameboard[7]=='8') key='8';
- if(gameboard[4]=='X'&&gameboard[7]=='X'&&gameboard[1]=='2') key='2';
- if(gameboard[1]=='X'&&gameboard[7]=='X'&&gameboard[4]=='5') key='5';
- if(gameboard[2]=='X'&&gameboard[5]=='X'&&gameboard[8]=='9') key='9';
- if(gameboard[5]=='X'&&gameboard[8]=='X'&&gameboard[2]=='3') key='3';
- if(gameboard[2]=='X'&&gameboard[8]=='X'&&gameboard[5]=='6') key='6';
- if(gameboard[6]=='X'&&gameboard[8]=='X'&&gameboard[7]=='8') key='8';
- if(gameboard[0]=='X'&&gameboard[4]=='X'&&gameboard[8]=='9') key='9';
- }
- void draw_gameboard()
- {
- cout
- <<name1<<" : "<<score1<<" "<<name2<<" : "<<score2<<endl<<endl
- <<" | | "<<endl
- <<" "<<colarray[0]<<gameboard[0]<<NC<<" | "<<colarray[1]<<gameboard[1]<<NC<<" | "<<colarray[2]<<gameboard[2]<<NC<<endl
- <<" | | "<<endl
- <<"-----|-----|-----"<<endl
- <<" | | "<<endl
- <<" "<<colarray[3]<<gameboard[3]<<NC<<" | "<<colarray[4]<<gameboard[4]<<NC<<" | "<<colarray[5]<<gameboard[5]<<NC<<endl
- <<" | | "<<endl
- <<"-----|-----|-----"<<endl
- <<" "<<colarray[6]<<gameboard[6]<<NC<<" | "<<colarray[7]<<gameboard[7]<<NC<<" | "<<colarray[8]<<gameboard[8]<<NC<<endl
- <<" | | "<<endl
- <<" | | "<<endl;
- }
- short gamesover()
- {
- if(gameboard[0]==gameboard[1]&&gameboard[1]==gameboard[2]) {colarray[0].cul=13;colarray[1].cul=13;colarray[2].cul=13;return 1;}
- if(gameboard[3]==gameboard[4]&&gameboard[4]==gameboard[5]) {colarray[3].cul=13;colarray[4].cul=13;colarray[5].cul=13;return 1;}
- if(gameboard[6]==gameboard[7]&&gameboard[7]==gameboard[8]) {colarray[6].cul=13;colarray[7].cul=13;colarray[8].cul=13;return 1;}
- if(gameboard[0]==gameboard[3]&&gameboard[3]==gameboard[6]) {colarray[0].cul=13;colarray[3].cul=13;colarray[6].cul=13;return 1;}
- if(gameboard[1]==gameboard[4]&&gameboard[4]==gameboard[7]) {colarray[1].cul=13;colarray[4].cul=13;colarray[7].cul=13;return 1;}
- if(gameboard[2]==gameboard[5]&&gameboard[5]==gameboard[8]) {colarray[2].cul=13;colarray[5].cul=13;colarray[8].cul=13;return 1;}
- if(gameboard[0]==gameboard[4]&&gameboard[4]==gameboard[8]) {colarray[0].cul=13;colarray[4].cul=13;colarray[8].cul=13;return 1;}
- if(gameboard[2]==gameboard[4]&&gameboard[4]==gameboard[6]) {colarray[2].cul=13;colarray[4].cul=13;colarray[6].cul=13;return 1;}
- if(!(gameboard[0]=='1'||gameboard[1]=='2'||gameboard[2]=='3'||gameboard[3]=='4'))
- if(!(gameboard[4]=='5'||gameboard[5]=='6'||gameboard[6]=='7'||gameboard[7]=='8'||gameboard[8]=='9'))
- return -1;
- return 0;
- }
- void gotoxy_s(int x,int y,string text)
- {
- COORD CursorPos;
- CursorPos.X=x;CursorPos.Y=y;
- SetConsoleCursorPosition(hOut,CursorPos);
- cout<<text;
- }
- void gotoxy(short x,short y)
- {
- COORD CursorPos;
- CursorPos.X=x;CursorPos.Y=y;
- SetConsoleCursorPosition(hOut,CursorPos);
- }
- void clean()
- {
- gotoxy(0,0);
- for(int j=0;j<19;j++,cout<<" \n",Sleep(80));
- SetConsoleTextAttribute(hOut,7);
- gotoxy(0,0);
- }
- #define menuselect() \
- for(j=0;j<5;j++)\
- {\
- gotoxy(24,MenuCords[j]);\
- SetConsoleTextAttribute(hOut,FOREGROUND_GREEN|FOREGROUND_INTENSITY);\
- cout<<' '<<MainMenu[j];\
- if(j==cursor)\
- {\
- gotoxy(24,MenuCords[j]);\
- SetConsoleTextAttribute(hOut,BACKGROUND_BLUE|BACKGROUND_RED|BACKGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY);\
- cout<<'>'<<MainMenu[cursor];\
- SetConsoleTextAttribute(hOut,FOREGROUND_GREEN|FOREGROUND_INTENSITY);\
- }\
- }\
- Sleep(80);\
- if(GetAsyncKeyState(VK_UP)) {if(cursor==0) cursor=4; else --cursor;}\
- if(GetAsyncKeyState(VK_DOWN)) {if(cursor==4) cursor=0; else ++cursor;}\
- if(_kbhit()) if(_getch()=='\r')\
- {\
- switch (cursor)\
- {\
- case 0: clean(); return 1; break;\
- case 1: clean(); return 2; break;\
- case 2: clean();\
- SetConsoleTextAttribute(hOut,FOREGROUND_BLUE|FOREGROUND_GREEN);\
- cout<<"###########################################"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"###########################################"<<endl;\
- gotoxy(16,3);\
- cout<<GOLD<<"Instructions";\
- gotoxy(9,5);\
- cout<<"Keys 1,2,3,4,5,6,7,8,9 to";\
- gotoxy(4,8);\
- cout<<"select the square ,ENTER to confirm";\
- gotoxy(18,16);\
- cout<<"Press ENTER to continue";\
- while(_getch()!='\r'); goto MenuBeg; break;\
- case 3: clean();\
- SetConsoleTextAttribute(hOut,FOREGROUND_BLUE|FOREGROUND_GREEN);\
- cout<<"###########################################"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"# #"<<endl\
- <<"###########################################"<<endl;\
- gotoxy(18,3);\
- cout<<GOLD<<"Credits";\
- gotoxy(3,5);\
- cout<<"Programmer:Paraschiv Sorin(Sorin Alex)";\
- gotoxy(18,16);\
- cout<<"Press ENTER to continue";\
- while(_getch()!='\r'); goto MenuBeg; break;\
- case 4: return 3; break;\
- }\
- }
- short MainMenu()
- {
- GetConsoleCursorInfo(hOut,&CursorInfo);
- CursorInfo.bVisible=FALSE;
- SetConsoleCursorInfo(hOut,&CursorInfo);
- int len,y,i=0,border,j,cursor=0;
- string MainMenu[]={"Player vs Player","Vs Computer","Instructions","Credits","Quit"};
- short MenuCords[]={7,9,11,13,15};
- string holder=" ";
- string X[]=
- {" "
- ," "
- ," "
- ," "
- ," "
- ," "
- ,"X X"
- ," X X "
- ," X X "
- ," X "
- ," X X "
- ," X X "
- ,"X X"
- ," "
- ," "
- ," "
- ," "
- ," "
- };
- string Zero[]=
- {" "
- ," "
- ," "
- ," "
- ," "
- ," O "
- ," O O "
- ,"O O"
- ,"O O"
- ,"O O"
- ," O O "
- ," O "
- ," "
- ," "
- ," "
- ," "
- ," "
- ," "
- };
- len=17;
- MenuBeg:
- gotoxy(0,0);
- SetConsoleTextAttribute(hOut,FOREGROUND_BLUE|FOREGROUND_GREEN);
- cout<<"######################";for(int border=0;border<20;++border,cout<<'\xcd');cout<<'\xbb'<<endl;
- cout<<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"# # \xba"<<endl
- <<"######################";for(int border=0;border<20;++border,cout<<'\xcd');cout<<'\xbc'<<endl;
- gotoxy(26,4);
- cout<<RED<<"Tic Tac Toe";
- while(true){
- i++;
- for (y=0;y<len;y++)
- {
- SetConsoleTextAttribute(hOut,FOREGROUND_GREEN);
- gotoxy_s(2,1+y,X[y]);
- }
- for (y=0;y<len;y++)
- {
- SetConsoleTextAttribute(hOut,FOREGROUND_RED);
- gotoxy_s(13,1+y,Zero[y]);
- }
- holder = X[len];
- for (y=len;y>0;y--)
- {
- X[y]=X[y-1];
- }
- X[0]=holder;
- holder =Zero[0];
- for (y=0;y<len;y++)
- {
- Zero[y]=Zero[y+1];
- }
- Zero[len]=holder;
- menuselect();
- if(i==len+1)
- {
- i=0;
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- menuselect();
- }
- }
- }
- int main()
- {
- SetConsoleTitleA((LPCSTR)"Tic Tac Toe");
- start:
- gamemode=MainMenu();
- CursorInfo.bVisible=TRUE;
- CursorInfo.dwSize=100;
- SetConsoleCursorInfo(hOut,&CursorInfo);
- clearscreen();
- score1=score2=0;
- if(gamemode==1)
- {
- cout<<"Player 1 name : ";cin>>name1;
- cout<<"Player 2 name : ";cin>>name2;
- }
- if(gamemode==2)
- {
- cout<<"Player name : ";cin>>name1;
- name2="Computer";
- }
- if(gamemode==3) return 0;
- short numarmiscari=1;int verif;
- char simbol,raspuns=' ';bool yesno=false;
- srand(time(0));
- inceput:
- verif=0;
- for(int i=0;i<10;i++) gameboard[i]=i+49;
- for(int i=0;i<10;i++) colarray[i].cul=8;
- while(verif==0)
- {
- clearscreen();
- simbol=(numarmiscari%2)?'X':'0';
- draw_gameboard();
- if(simbol=='X') cout<<"It's "<<name1<<" turn (X) "<<endl;
- if(simbol=='0') cout<<"It's "<<name2<<" turn (0) "<<endl;
- if(gamemode==1)
- cin>>key;
- if(gamemode==2)
- {
- if(simbol=='X')
- cin>>key;
- if(simbol=='0')
- {
- Sleep(rand()%400+200);
- AiMove();
- }
- }
- switch(key)
- {
- case '1':if(gameboard[0]=='1') {gameboard[0]=simbol;++numarmiscari;if(simbol=='X') colarray[0].cul=10;
- if(simbol=='0') colarray[0].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '2':if(gameboard[1]=='2') {gameboard[1]=simbol;++numarmiscari;if(simbol=='X') colarray[1].cul=10;
- if(simbol=='0') colarray[1].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '3':if(gameboard[2]=='3') {gameboard[2]=simbol;++numarmiscari;if(simbol=='X') colarray[2].cul=10;
- if(simbol=='0') colarray[2].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '4':if(gameboard[3]=='4') {gameboard[3]=simbol;++numarmiscari;if(simbol=='X') colarray[3].cul=10;
- if(simbol=='0') colarray[3].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '5':if(gameboard[4]=='5') {gameboard[4]=simbol;++numarmiscari;if(simbol=='X') colarray[4].cul=10;
- if(simbol=='0') colarray[4].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '6':if(gameboard[5]=='6') {gameboard[5]=simbol;++numarmiscari;if(simbol=='X') colarray[5].cul=10;
- if(simbol=='0') colarray[5].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '7':if(gameboard[6]=='7') {gameboard[6]=simbol;++numarmiscari;if(simbol=='X') colarray[6].cul=10;
- if(simbol=='0') colarray[6].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '8':if(gameboard[7]=='8') {gameboard[7]=simbol;++numarmiscari;if(simbol=='X') colarray[7].cul=10;
- if(simbol=='0') colarray[7].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- case '9':if(gameboard[8]=='9') {gameboard[8]=simbol;++numarmiscari;if(simbol=='X') colarray[8].cul=10;
- if(simbol=='0') colarray[8].cul=12;} else {clearscreen();draw_gameboard();cout<<RED<<"\nInvalid Move\n"<<NC;wait();}break;
- default:cout<<RED<<"\nInvalid Move\n"<<NC;wait();
- }
- verif=gamesover();
- if(verif==1)
- {
- clearscreen();draw_gameboard();
- if(simbol=='X')
- {cout<<endl<<name1<<" won !\n\n";++score1;}
- if(simbol=='0')
- {cout<<endl<<name2<<" won !\n\n";++score2;}
- CursorInfo.bVisible=FALSE;
- SetConsoleCursorInfo(hOut,&CursorInfo);
- cout<<"Do you wish to play again";
- gotoxy(26,16);cout<<GREEN<<"YES"<<NC<<'/'<<RED<<"NU";
- do{
- if(_kbhit()) raspuns=_getch();
- if(raspuns==75) {yesno=true;gotoxy(26,16);cout<<GREENBK<<"YES"<<NC<<'/'<<RED<<"NO";}
- if(raspuns==77) {yesno=false;gotoxy(26,16);cout<<GREEN<<"YES"<<NC<<'/'<<REDBK<<"NO";}
- Sleep(20);
- }while(raspuns!='\r');
- raspuns=0;
- if(yesno==true) goto inceput;
- if(yesno==false) goto start;
- }
- if(verif==-1)
- {
- clearscreen();draw_gameboard();
- cout<<GREEN<<"\nDraw !\n\n"<<NC;
- CursorInfo.bVisible=FALSE;
- SetConsoleCursorInfo(hOut,&CursorInfo);
- cout<<"Do you wish to play again";
- gotoxy(26,16);cout<<GREEN<<"YES"<<NC<<'/'<<RED<<"NO";
- do{
- if(_kbhit()) raspuns=_getch();
- if(raspuns==75) {yesno=true;gotoxy(26,16);cout<<GREENBK<<"YES"<<NC<<'/'<<RED<<"NO";}
- if(raspuns==77) {yesno=false;gotoxy(26,16);cout<<GREEN<<"YES"<<NC<<'/'<<REDBK<<"NO";}
- Sleep(20);
- }while(raspuns!='\r');
- raspuns=0;
- if(yesno==true) goto inceput;
- if(yesno==false) goto start;
- }
- }
- wait();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement