Home » » Connect 4 Game In C++ Program

Connect 4 Game In C++ Program

Two players play that game , it’s slightly different from tic tac toe. The difference is:
1. The player who plot 4 of his/her marks (cross or zero) horizontaly , verticaly , diagonaly , counter diagonal any way but in a straight line makes first wins.
2.There is the base from where every player start the game.
  1. /**********************************
  2. SOURCE CODE
  3. **********************************/
  4. #include
  5. #include
  6. #include
  7. #include
  8. char re_assign[31] = {'o','1','2','3','4','5','6'};
  9. char square[31];
  10. //horizontal //diagonal //opp diagonal //for vetical
  11. int check[39][4] = { {1,2,3,4} , {2,3,4,5} ,{3,4,5,6} ,{7,8,9,10} ,{8,9,10,11} , {9,10,11,12} , {13,14,15,16} , {14,15,16,17} , {15,16,17,18} , {19,20,21,22} , {20,21,22,23} , {21,22,23,24} ,{25,26,27,28} , {26,27,28,29} , {27,28,29,30} , {1,8,15,22} , {2,9,16,23} , {3,10,17,24} , {7,14,21,28} , {8,15,22,29} ,{9,16,23,30} , {4,9,13,18} , {5,10,14,19} , {6,11,15,20} , {10,15,20,25} , {11,16,21,26} , {12,17,22,27} , {1,7,13,19} , {7,13,19,25} , {2,8,14,20} , {8,14,20,26} , {3,9,15,21} , {9,15,21,26} , {4,10,16,22} , {10,16,22,28} , {5,11,17,23} , {11,17,23,29} , {6,12,18,24} , {12,18,24,30} };
  12. char plr1[40],plr2[40];
  13. int score1=0,score2=0, game=0 ,games;
  14. int choice_m,choice_vm;
  15. int checkwin();
  16. void input_name();
  17. void show_name(int);
  18. void new_game();
  19. void new_match();
  20. void new_series();
  21. void show();
  22. void board();
  23. struct player
  24. {
  25. char playername[50];
  26. int score;
  27. int game,games;
  28. };
  29. player pl1,pl2;
  30. void main()
  31. {
  32. do
  33. {
  34. show();
  35. cout<<"\n\n 1.Continue previous series.";
  36. cout<<"\n 2.Start a new game.";
  37. cout<<"\n 3.Quit Game.";
  38. cout<<"\n\n Enter your choice.";
  39. cin>>choice_vm;
  40. switch(choice_vm)//choice_vm=choice of void main
  41. {
  42. case 1:
  43. clrscr();
  44. show();
  45. fstream fin;
  46. fin.open("player_info.dat",ios::binary|ios::in);
  47. if(!fin)
  48. {
  49. cout<<"\n\n NO! saved sereis found ???";
  50. getch();
  51. break;
  52. }
  53. fin.read((char*)&pl1,sizeof(pl1));
  54. strcpy(plr1,pl1.playername);
  55. score1=pl1.score;
  56. game=pl1.game;
  57. games=pl1.games;
  58. fin.read((char*)&pl2,sizeof(pl1));
  59. strcpy(plr2,pl2.playername);
  60. score2=pl2.score;
  61. fin.close();
  62. new_series();
  63. break;
  64. case 2:
  65. new_game();
  66. break;
  67. case 3:
  68. show();
  69. cout<<"\n\n Bye...";
  70. getch();
  71. break;
  72. default:
  73. cout<<"\n Wrong choice";
  74. getch();
  75. }
  76. }
  77. while(choice_vm != 3);
  78. }
  79. /***************************************************/
  80. //starting of a new game
  81. /***************************************************/
  82. void new_game()
  83. {
  84. input_name();
  85. do
  86. {
  87. show();
  88. cout<<"\n\n NEW GAME MENU";
  89. cout<<"\n\n 1.Start a match up game.";
  90. cout<<"\n 2.Start a series of this game.";
  91. cout<<"\n 3.To Quit.";
  92. cout<<"\n\n Enter your choice";
  93. cin>>choice_m;
  94. switch (choice_m)
  95. {
  96. case 1:
  97. new_match();
  98. break;
  99. case 2:
  100. new_series();
  101. break;
  102. case 3:
  103. break;
  104. default:
  105. cout<<"\n Wrong choice";
  106. getch();
  107. }
  108. }
  109. while(choice_m!=3);
  110. }
  111. /*********************************************/
  112. //to start a new game
  113. /*********************************************/
  114. void new_match()
  115. {
  116. int player = 1,i,s1=1,s2=2,s3=3,s4=4,s5=5,s6=6;
  117. char mark,choice_g;
  118. for(int z=0;z<=31;z++) //to reassign value
  119. square[z]=re_assign[z];
  120. if(choice_m == 2)
  121. player=(game%2)?2:1;
  122. do
  123. {
  124. board();
  125. player=(player%2)?1:2;
  126. cout <<"\n It's ";
  127. show_name(player);
  128. cout<< "'s turn , enter a number: ";
  129. cin >> choice_g;
  130. mark=(player == 1) ? 'X' : 'O';
  131. if (choice_g == '1' && s1 <= 25)
  132. {
  133. square[s1] = mark;
  134. s1+=6;
  135. square[s1]='1';
  136. }
  137. else if (choice_g == '2' && s2 <= 26)
  138. {
  139. square[s2] = mark;
  140. s2+=6;
  141. square[s2]='2';
  142. }
  143. else if (choice_g == '3' && s3 <= 27)
  144. {
  145. square[s3] = mark;
  146. s3+=6;
  147. square[s3]='3';
  148. }
  149. else if (choice_g == '4' && s4 <= 28)
  150. {
  151. square[s4] = mark;
  152. s4+=6;
  153. square[s4]='4';
  154. }
  155. else if (choice_g == '5' && s5 <= 29)
  156. {
  157. square[s5] = mark;
  158. s5+=6;
  159. square[s5]='5';
  160. }
  161. else if (choice_g == '6' && s6 <= 30)
  162. {
  163. square[s6] = mark;
  164. s6+=6;
  165. square[s6]='6';
  166. }
  167. else if (choice_g == 'q' || choice_g == 'Q')
  168. {
  169. show();
  170. cout<<"\n\n\a ==>Game quited.";
  171. getch();
  172. if(choice_m == 2)
  173. game--;
  174. return;
  175. }
  176. else
  177. {
  178. cout<<"\n Invalid move ";
  179. player--;
  180. getch();
  181. }
  182. i=checkwin();
  183. player++;
  184. }while(i==-1);
  185. board();
  186. if(i==1)
  187. {
  188. --player;
  189. if(choice_m == 2)
  190. {
  191. if(player==1)
  192. score1++;
  193. else
  194. score2++;
  195. }
  196. cout<<" ==>\a";show_name(player);cout<<" win !!! ";
  197. }
  198. else
  199. {
  200. cout<<" ==>\aGame draw";
  201. if(choice_m == 2)
  202. {
  203. score1++;score2++;
  204. }
  205. }
  206. getch();
  207. }
  208. /*********************************************
  209. start a new series
  210. **********************************************/
  211. void new_series()
  212. {
  213. clrscr();
  214. int choice_s;
  215. if(choice_vm != 1)
  216. {
  217. score1=score2=0;
  218. show();
  219. cout<<"\n\n How many games you want to play.";
  220. cin>>games;
  221. if(games>50)
  222. {
  223. cout<<"\n Error!@!?!@!";
  224. getch();
  225. return;
  226. }
  227. }
  228. do
  229. {
  230. show();
  231. cout<<"\n\n SERIES MENU";
  232. cout<<"\n\n 1.Start the new game.";
  233. cout<<"\n 2.Show the score.";
  234. cout<<"\n 3.Quit and save series.";
  235. cout<<"\n\n Enter your choice";
  236. cin>>choice_s;
  237. switch (choice_s)
  238. {
  239. case 1:
  240. clrscr();
  241. new_match();
  242. game++;
  243. if(game == games)
  244. {
  245. show();
  246. if(score1>score2)
  247. cout<<endl<<endl<<"\a ==>"<<plr1 <<" won the series !!";
  248. else if(score1<score2)
  249. cout<<endl<<endl<<"\a ==>"<<plr2 <<" won the series !!";
  250. else
  251. cout<<"\n\n\a ==>Series Draw !!!";
  252. getch();
  253. return;
  254. }
  255. break;
  256. case 2:
  257. show();
  258. cout<<"\n\n Total games - "<<games;
  259. cout<<"\n\n SCORES";
  260. cout<<"\n\n "<<plr1<<" - "<<score1<<endl;
  261. cout<<" "<<plr2<<" - "<<score2;
  262. getch();
  263. break;
  264. case 3:
  265. show();
  266. fstream fout;
  267. fout.open("player_info.dat",ios::binary|ios::out);
  268. if(fout)
  269. {
  270. char o;
  271. show();
  272. cout<<"\n\n Do you want to overwrite previous series?(Y/N)";
  273. cin>>o;
  274. if(o=='n' || o=='n')
  275. break;
  276. }
  277. strcpy(pl1.playername,plr1);
  278. pl1.score=score1;
  279. strcpy(pl2.playername,plr2);
  280. pl2.score=score2;
  281. pl1.game=game;
  282. pl1.games=games;
  283. fout.write((char*)&pl1,sizeof(pl1));
  284. fout.write((char*)&pl2,sizeof(pl1));
  285. show();
  286. cout<<"\n\n Series saved";
  287. getch();
  288. fout.close();
  289. break;
  290. default:
  291. cout<<"\n Wrong choice";
  292. getch();
  293. }
  294. }
  295. while(choice_s != 3);
  296. }
  297. /*********************************************
  298. FUNCTION TO RETURN GAME STATUS
  299. 1 FOR GAME IS OVER WITH RESULT
  300. -1 FOR GAME IS IN PROGRESS
  301. O GAME IS OVER AND NO RESULT
  302. **********************************************/
  303. int checkwin()
  304. {
  305. //*****************************//
  306. //to check if anybdy won the game...
  307. int l=0;
  308. for(int m=0;m<=39;m++)
  309. {
  310. if(square[check[m][l]] == square[check[m][l+1]] && square[check[m][l+1]] == square[check[m][l+2]] && square[check[m][l+2]] == square[check[m][l+3]] && ((square[check[m][l]] == 'X') || (square[check[m][l]] == 'O')))
  311. {
  312. square[check[m][l]] = square[check[m][l+1]] = square[check[m][l+2]] = square[check[m][l+3]] = '';
  313. return 1;
  314. }
  315. }
  316. //*****************************//
  317. //*****************************//
  318. //for draw
  319. int count1=0;
  320. for(int draw1=1;draw1<=30;draw1++)
  321. {
  322. if( square[draw1] == 'X' || square[draw1] == 'O')
  323. count1++;
  324. }
  325. if(count1==30)
  326. return 0;
  327. /***********************************************/
  328. //nobody win till now
  329. else
  330. return -1;
  331. }
  332. /**************************************************/
  333. //FUNCTION TO INSERT NAME
  334. /**************************************************/
  335. void input_name()
  336. {
  337. clrscr();
  338. show();
  339. cout<<"\n\n Enter the first player name.";
  340. gets(plr1);
  341. cout<<"\n Enter the second player name.";
  342. gets(plr2);
  343. }
  344. /*******************************************************/
  345. //FUNCTION TO SHOW NAME
  346. /*******************************************************/
  347. void show_name(int z)
  348. {
  349. if(z == 1)
  350. cout<<plr1;
  351. else
  352. cout<<plr2;
  353. }
  354. /*******************************************************************
  355. //FUNCTION YO SHOW GAME CONNECT FOUR
  356. /*******************************************************************/
  357. void show()
  358. {
  359. clrscr();
  360. cout<<"\n\n\n\n GAME CONNECT FOUR";
  361. }
  362. /*******************************************************************
  363. FUNCTION TO DRAW BOARD OF SHAGGY's GAME WITH PLAYERS MARK
  364. ********************************************************************/
  365. void board()
  366. {
  367. clrscr();
  368. cout <<endl<<endl;
  369. cout <<"\n\n "<< " GAME CONNECT FOUR \n\n";
  370. cout <<" "<< plr1<<" (X)";if(choice_m == 2) cout<<" - "<<score1;cout<<" :: "<<plr2<<" (O)";if( choice_m == 2) cout<<" - "<<score2; cout<< endl << endl;
  371. cout <<"\n "<< "Press q to quit from the game."<<endl<<endl;
  372. cout <<" "<< " | | | | | " << endl;
  373. cout <<" "<< " ";cout<<square[25];cout <<" | "; cout<< square[26]; cout << " | " ; cout<< square[27]; cout <<" | "; cout<<square[28];cout<<" | "; cout<<square[29];cout<<" | "; cout<<square[30];cout<< endl;
  374. cout <<" "<< "_____|_____|_____|_____|_____|_____" << endl;
  375. cout <<" "<< " | | | | | " << endl;
  376. cout <<" "<< " ";cout<<square[19];cout <<" | "; cout<< square[20]; cout << " | " ; cout<< square[21]; cout <<" | "; cout<<square[22];cout<<" | "; cout<<square[23];cout<<" | "; cout<<square[24];cout<< endl;
  377. cout <<" "<< "_____|_____|_____|_____|_____|_____" << endl;
  378. cout <<" "<< " | | | | | " << endl;
  379. cout <<" "<< " ";cout<<square[13];cout <<" | "; cout<< square[14]; cout << " | " ; cout<< square[15]; cout <<" | "; cout<<square[16];cout<<" | "; cout<<square[17];cout<<" | "; cout<<square[18];cout<< endl;
  380. cout <<" "<< "_____|_____|_____|_____|_____|_____" << endl;
  381. cout <<" "<< " | | | | | " << endl;
  382. cout <<" "<< " ";cout<<square[7];cout <<" | "; cout<< square[8]; cout << " | " ; cout<< square[9]; cout <<" | "; cout<<square[10];cout<<" | "; cout<<square[11];cout<<" | "; cout<<square[12];cout<< endl;
  383. cout <<" "<< "_____|_____|_____|_____|_____|_____" << endl;
  384. cout <<" "<< " | | | | | " << endl;
  385. cout <<" "<< " " << square[1] <<" | " << square[2] << " | " << square[3] <<" | "<<square[4]<<" | "<<square[5]<<" | "<<square[6]<< endl;
  386. cout <<" "<< " | | | | | " << endl;
  387. }
  388. /*******************************************************************
  389. END OF CODE
  390. ********************************************************************/
  391.  
Share this article :