Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.87 KB | None | 0 0
  1. //
  2. // tictactoe.cpp
  3. // kółko
  4. //
  5. // Created by Łukasz Michalak on 28/03/2019.
  6. // Copyright © 2019 Łukasz Michalak. All rights reserved.
  7. //
  8.  
  9. #include "tictactoe.hpp"
  10. #include <iostream>
  11. #include <vector>
  12.  
  13. using namespace std;
  14.  
  15.  
  16. tictactoe::tictactoe() //konstruktor co robi całe puste
  17. {
  18. for(int i=0;i<3;i++){
  19. for(int j=0;j<3;j++){
  20. _gra[i][j]=nic;
  21. }
  22. }
  23. }
  24.  
  25. void tictactoe::wypisz_plansze(){
  26. char liczby_na_znaki[3][3];
  27. for(int i=0;i<3;i++){
  28. for(int j=0;j<3;j++){
  29. switch (_gra[i][j]) {
  30. case nic:
  31. liczby_na_znaki[i][j]=' ';
  32. break;
  33. case iks:
  34. liczby_na_znaki[i][j]='X';
  35. break;
  36. case kolo:
  37. liczby_na_znaki[i][j]='O';
  38. break;
  39. }
  40. }
  41. }
  42. cout<<" 1 2 3"<<endl;
  43. cout<<" -------------"<<endl;
  44. cout<<"1 | "<<liczby_na_znaki[0][0]<<" | "<<liczby_na_znaki[0][1]<<" | "<<liczby_na_znaki[0][2]<<" |"<<endl;
  45. cout<<" -------------"<<endl;
  46. cout<<"2 | "<<liczby_na_znaki[1][0]<<" | "<<liczby_na_znaki[1][1]<<" | "<<liczby_na_znaki[1][2]<<" |"<<endl;
  47. cout<<" -------------"<<endl;
  48. cout<<"3 | "<<liczby_na_znaki[2][0]<<" | "<<liczby_na_znaki[2][1]<<" | "<<liczby_na_znaki[2][2]<<" |"<<endl;
  49. cout<<" -------------"<<endl;
  50.  
  51. }
  52.  
  53. void tictactoe::ruch(plansza gracz){
  54. int wiersz,kolumna;
  55. int petla=1,duza_petla=1;
  56. cout<<"Prosze podac wspolrzedne ruchu:"<<endl;
  57. do{//na to czy pole zajete
  58. do{//na to czy dobra wspolrzedna
  59. cout<<"Wiersz: ";
  60. cin>>wiersz;
  61. if(wiersz==1||wiersz==2||wiersz==3){//czy pole zajete
  62. petla=0;
  63. }
  64. else{
  65. cout<<"Zla wsporzedna! Należy wpisać 1, 2 lub 3!"<<endl;
  66. }
  67. }while(petla==1);
  68. wiersz-=1;
  69.  
  70. petla=1;
  71. do{
  72. cout<<"Kolumna: ";
  73. cin>>kolumna;
  74. if(kolumna==1||kolumna==2||kolumna==3){//czy pole zajete
  75. petla=0;
  76. }
  77. else{
  78. cout<<"Zla wsporzedna! Należy wpisać 1, 2 lub 3!"<<endl;
  79. }
  80. }while(petla==1);
  81. kolumna-=1; //bo numeracja od 0
  82.  
  83. if(_gra[wiersz][kolumna]==nic){
  84. _gra[wiersz][kolumna]=gracz;
  85. duza_petla=0;
  86. }
  87. else{
  88. cout<<"To pole jest juz zajte! Prosze wybrać inne!"<<endl;
  89. }
  90. }while(duza_petla==1);
  91. }
  92.  
  93. void tictactoe::_ruch(int wiersz, int kolumna,plansza gracz){
  94. _gra[wiersz][kolumna]=gracz;
  95. }
  96.  
  97.  
  98. int tictactoe::wygrana(plansza gracz){
  99. char zwyciesca;
  100. if(_gra[0][0]!=nic&&_gra[0][1]!=nic&&_gra[0][2]!=nic&&_gra[1][0]!=nic&&_gra[1][1]!=nic&&_gra[1][2]!=nic&&_gra[2][0]!=nic&&_gra[2][1]!=nic&&_gra[2][2]!=nic){
  101. return 2;
  102. }
  103. if(gracz==iks){
  104. zwyciesca='X';
  105. }
  106. else{
  107. zwyciesca='O';
  108. }
  109. if((_gra[0][0]==gracz&&_gra[1][1]==gracz&&_gra[2][2]==gracz)||(_gra[2][0]==gracz&&_gra[1][1]==gracz&&_gra[0][2]==gracz)){
  110. return 1;
  111. }
  112. for(int i=0;i<3;i++){
  113. if((_gra[i][0]==gracz&&_gra[i][1]==gracz&&_gra[i][2]==gracz)||(_gra[0][i]==gracz&&_gra[1][i]==gracz&&_gra[2][i]==gracz)){
  114. return 1;
  115. }
  116. }
  117. return 0;
  118. }
  119.  
  120. void tictactoe::Ai_move(plansza gracz){
  121. Ai bestMove=_Ai_move(gracz);
  122. _ruch(bestMove.wiersz, bestMove.kolumna, gracz);
  123. }
  124.  
  125. Ai tictactoe::_Ai_move(plansza gracz){
  126. int winX=wygrana(iks),winO=wygrana(kolo);
  127. if(winX==1){
  128. return Ai(10);
  129. }
  130. else if(winO==1){
  131. return Ai(-10);
  132. }
  133. else if(winO==2&&winX==2){
  134. return Ai(0);
  135. }
  136.  
  137. vector<Ai> ruchy;
  138.  
  139. for(int i=0;i<3;i++){
  140. for(int j=0;j<3;j++){
  141. if(_gra[i][j]==nic){
  142. Ai move;
  143. move.wiersz=i;
  144. move.kolumna=j;
  145. _ruch(i, j, gracz);
  146. if(gracz==iks){
  147. move.score=_Ai_move(kolo).score;
  148. }
  149. if(gracz==kolo){
  150. move.score=_Ai_move(iks).score;
  151. }
  152.  
  153. ruchy.push_back(move);
  154. _ruch(i, j, nic);
  155.  
  156. }
  157. }
  158. }
  159.  
  160. int bestMove=0;
  161. if(gracz==iks){
  162. int bestScore=-1000000000;
  163. for(int i=0;i<ruchy.size();i++){
  164. if(ruchy[i].score>bestScore){
  165. bestMove=i;
  166. bestScore=ruchy[i].score;
  167. }
  168. }
  169. }else{
  170. int bestScore=1000000000;
  171. for(int i=0;i<ruchy.size();i++){
  172. if(ruchy[i].score<bestScore){
  173. bestMove=i;
  174. bestScore=ruchy[i].score;
  175. }
  176. }
  177. }
  178. return ruchy[bestMove];
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement