Guest User

Untitled

a guest
Dec 14th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <string>
  4. #include <cmath>
  5. #include <algorithm>
  6. using namespace std;//deklarujemy biblioteki i przesten nazw
  7. void pokazplansza(string plansza[8][8])//funkcja wyswietlajaca nasza plansze
  8. {
  9. for (int i = 0; i < 8; i++)//petla w petli
  10. {
  11. cout << 8 - i <<"";//wyswietlmiy numerki z lewej
  12. for (int j = 0; j < 8; j++)cout << "|" << plansza[i][j];//wyswietlamy pola planszy
  13. cout << " " << endl;//wyswietlamy bok planszy i przechodzimy do nastepnej linii
  14. }
  15. cout << " A B C D E F G H"<<endl;
  16. }
  17. bool wykonajruch(string plansza[8][8], string z, string na, char znakgracza)
  18. {
  19. char znakprzeciwny;//zmienna do okreslenie znaku przeciwnika
  20. if (znakgracza == 'x')znakprzeciwny = 'o'; else znakprzeciwny = 'x';//okreslamy znak przeciwny wzgledem naszego
  21. //okreslimy wspolrzedne na planszy po ktorych bedziemy sie poruszac
  22. int x1 = 8-(z[0]-48), y1 = z[1]-65;
  23. int x2 = 8-(na[0] - 48), y2 = na[1] -65;
  24.  
  25. //przepisujemy na int z tablicy ascii i odwracamy wzgledem tablicy
  26. z = plansza[x1][y1];//przepiszemy do stringow pola z planszy
  27. na = plansza[x2][y2];
  28. int d = abs(sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2)));//liczymy odleglosc miedzy punktami
  29. int ilezabieramy, ilemamy;
  30. ilezabieramy = plansza[(x1 + x2) / 2][(y1 + y2) / 2][2] - 48;//okreslamy ile porywamy pionkow (-48 kod ascii)
  31. ilemamy = plansza[x1][y1][2] - 48;//i ile mamy na danym polu
  32.  
  33. if (z[1] != znakgracza || na != " ")return 0; //sprawdzamy czy poruszamy sie swoim pionem i czy na wolne pole jesli nie zwracamy 0
  34. if (x1 != x2 &&y1 != y2)return 0;//poruszylismy sie po skosie gdy obie wspolrzedne sie zmienia
  35. //sprawdzamy czy bijemy przeciwnika, czyli jesli odleglosc miedzy polami jest 2 i miedzy nimi jest znak przeciwnika
  36. if (d == 2 && plansza[(x1 + x2) / 2][(y1 + y2) / 2][1] == znakprzeciwny)
  37. {
  38. plansza[x1][y1] = " ";//czyscimy pole
  39. plansza[(x1 + x2) / 2][(y1 + y2) / 2] = " ";//swoje i przeciwnika
  40. plansza[x2][y2][1] = znakgracza; plansza[x2][y2][2] = ilemamy + ilezabieramy + 48; //przepisujemy nasz pionek wraz z porwanymi
  41. return 1;
  42. }
  43. else//wykonujemy zwykly ruch
  44. {
  45. if (d > ilemamy)return 0;//sprawdzamy czy nie skaczemy dalej niz mozemy
  46. //sprawdzamy w ktora strone idziemy i czy po drodze jest pusto
  47. if (x1 > x2) { //do gory
  48. for (int i = x2; i < x1; i++)
  49. if (plansza[i][y2] != " ")return 0;
  50. }
  51. if (x1 < x2)//do dolu
  52. {
  53. for (int i = x1+1; i <= x2; i++)if (plansza[i][y2] != " ")return 0;
  54. }
  55. if (y1 < y2)//w prawo
  56. {
  57. for (int i = y1+1; i <= y2; i++)if (plansza[x2][i] != " ")return 0;
  58. }
  59. if (y1 > y2)//w lewo
  60. {
  61. for (int i = y2; i < y1; i++)if (plansza[x2][i] != " ")return 0;
  62.  
  63. }
  64. //jesli wszystko jest ok przemiszczamy pionka i ewentualnie zostawiamy
  65. if (ilemamy == d)//sprawdzamy systans i ile mamy
  66. {//jesli przechodzimy o tyle co mamy to zwyczajnie czyscimy pole i przechodzimy
  67. plansza[x2][y2][1] = znakgracza; plansza[x2][y2][2] = ilemamy + 48; //przepisujemy nasz pionek
  68. plansza[x1][y1] = " ";
  69. return 1;
  70. }
  71. else
  72. {//w przeciwnym wypadku zostawiamy pionki i zmieniamy je na przeciwnika
  73. plansza[x2][y2][1] = znakgracza; plansza[x2][y2][2] = d + 48;
  74. //wpisujemy w liczbe naszych pionkow dystans
  75. plansza[x1][y1][1] = znakprzeciwny; plansza[x1][y1][2] = ilemamy -d + 48;
  76. //i zostawiamy graczowi tyle pionkow ile mamy -dystans (+ascii)
  77. return 1;
  78. }
  79.  
  80. }
  81.  
  82. }
  83. bool sprawdzczykoniec(string plansza[8][8], char znakprzeciwnika) //funckja sprawdzajaca czy przeciwnik ma jeszcze pionki
  84. {
  85. if (znakprzeciwnika == 'o')znakprzeciwnika = 'x'; else znakprzeciwnika = 'o'; //robimy przeciwny znak
  86. //po prostu petla w petli przejdziemy po wszystkich pionkach jesli natrafimy zwrocimy zero czyli ma jeszcze pionki
  87. for (int i = 0; i < 8; i++)
  88. {
  89. for (int j = 0; j < 8; j++) {
  90. if (plansza[i][j][1] == znakprzeciwnika)return 0;//znalezlismy
  91. }
  92. }
  93. return 1;//jesli nie natrafimy zwracamy 1
  94. }
  95. int main()
  96. {
  97. bool gracz;//zmienna logczina gracza, 1-gracz x, gracz o
  98. char znakgracza;//zmiena dla znak gracza
  99. string z,na;//zmienna dla danych o ruchu przez nas wprowadzaanych
  100.  
  101. for (;;)//petla ktora bedzie obslugiwala cala nasza gre,
  102. {
  103. //tworzymy tablice strangiw, ktora bedzie przechowywala pola naszej planszy 8x8
  104. string plansza[8][8] = { { "---","---"," ", " "," "," ","---","---" },{ "---"," x1"," x1", " o1"," o1"," x1"," x1","---" },
  105. { " "," o1", " o1"," x1"," x1"," o1"," o1"," " },{ " "," x1"," x1", " o1"," o1"," x1"," x1"," " },
  106. { " "," o1", " o1"," x1"," x1"," o1"," o1"," " },{ " "," x1"," x1", " o1"," o1"," x1"," x1"," " },
  107. { "---"," o1", " o1"," x1"," x1"," o1"," o1","---" } ,{ "---","---"," ", " "," "," ","---","---" } };//domyslne wartosci
  108.  
  109. gracz = 1;
  110. for (;;)//petla ktora bedzie obslugiwala aktualna partie
  111. {
  112. if (gracz == 1)znakgracza = 'x'; else znakgracza = 'o';
  113. //czyscimy plansze
  114. cout << "(Ruch gracza "<<znakgracza<<")"<<endl;//wypisujemy czyj ruch
  115. pokazplansza(plansza);//wypisujemy plansze
  116. cout << "Wpisz koniec by wyjsc lub reset by zresetowac gre"<<endl;
  117. cout << "Podaj z, ktorego pola chcesz sie ruszyc (np. 3A):" << endl;
  118. cin>>z; //wczytujemy z jakiego pola
  119. if (z == "koniec")return 0;//sprawdzamy czy nie wpisano koniec lub reset jesli tak to konczymy lub resetujemy gre
  120. if (z == "reset")break;
  121. cout << "Na jakie pole:";
  122. cin >> na;//wczytujemy na jakie pole
  123. if(wykonajruch(plansza, z, na, znakgracza)==1)gracz=!gracz;
  124. //wykonujemy ruch, jesli funkcja zwroci zero, znaczy, ze na pole nie mozna przejsc, jesli jeden zmienaimy gracza
  125. if (sprawdzczykoniec(plansza, znakgracza) == 1) //sprawdzamy czy przeciwnik ma jesccze pionki
  126. { cout <<endl<< "Wygra³ gracz " << znakgracza << endl;//wypisujemy kto wygral
  127. system("CLS");
  128. system("pause"); break; }//wstrzymujemy i konczmy partie
  129. }
  130. }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment