Advertisement
Rtyrewyger123

Untitled

May 17th, 2020
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.57 KB | None | 0 0
  1. //board.cpp
  2. #include<iostream>
  3. #include<iomanip>
  4. #include"board.h"
  5.  
  6. using namespace std;
  7. Board::Board()
  8. {
  9.     char c = (char)49;
  10.     for (int i = 0; i < 3; i++)
  11.         for (int j = 0; j < 3; j++)
  12.             b[i][j] = c++;
  13. }
  14.  
  15. char Board::GetCell(int x, int y)
  16. {
  17.     return b[x][y];
  18. }
  19. bool Board::makeMove(char x, int sign)
  20. {
  21.     bool res = true;
  22.     char simvol;
  23.     if (sign == 0)
  24.         simvol = 'x';
  25.     else
  26.         simvol = 'o';
  27.     switch (x)
  28.     {
  29.     case('1'):if (b[0][0] != 'x' && b[0][0] != 'o') { b[0][0] = simvol; break; }
  30.              else { res = sms(); break; }
  31.     case('2'):if (b[0][1] != 'x' && b[0][1] != 'o') { b[0][1] = simvol; break; }
  32.              else { res = sms(); break; }
  33.     case('3'):if (b[0][2] != 'x' && b[0][2] != 'o') { b[0][2] = simvol; break; }
  34.              else { res = sms(); break; }
  35.     case('4'):if (b[1][0] != 'x' && b[1][0] != 'o') { b[1][0] = simvol; break; }
  36.              else { res = sms(); break; }
  37.     case('5'):if (b[1][1] != 'x' && b[1][1] != 'o') { b[1][1] = simvol; break; }
  38.              else { res = sms(); break; }
  39.     case('6'):if (b[1][2] != 'x' && b[1][2] != 'o') { b[1][2] = simvol; break; }
  40.              else { res = sms(); break; }
  41.     case('7'):if (b[2][0] != 'x' && b[2][0] != 'o') { b[2][0] = simvol; break; }
  42.              else { res = sms(); break; }
  43.     case('8'):if (b[2][1] != 'x' && b[2][1] != 'o') { b[2][1] = simvol; break; }
  44.              else { res = sms(); break; }
  45.     case('9'):if (b[2][2] != 'x' && b[2][2] != 'o') { b[2][2] = simvol; break; }
  46.              else { res = sms(); break; }
  47.     default:cout << "Error!\nНеверный ввод!Повторите!\n"; res = false;
  48.     }
  49.     return res;
  50. }
  51. bool Board::WhoWin(int  sign)
  52. {
  53.     ++counter;                                                                               //00-01-02      
  54.     if ((b[0][0] == b[1][1] && b[0][0] == b[2][2]) || (b[0][2] == b[1][1] && b[0][2] == b[2][0]))         //10-11-12
  55.     {
  56.         if (sign == 0)                                                                      //20-21-22
  57.         {
  58.             cout << "\nВыграл Крестик!\nпо диагоноли!\n"; return true;
  59.         }
  60.         else
  61.         {
  62.             cout << "\nВыграл Нолик!\nпо диагоноли!\n"; return true;
  63.         }
  64.     }
  65.     if ((b[0][0] == b[0][1] && b[0][0] == b[0][2]) || (b[1][0] == b[1][1] && b[1][0] == b[1][2]) || (b[2][0] == b[2][1] && b[2][0] == b[2][2]))
  66.     {
  67.         if (sign == 0)
  68.         {
  69.             cout << "\nВыграл Крестик!\nпо горизонтали!\n"; return true;
  70.         }
  71.         else
  72.         {
  73.             cout << "\nВыграл Нолик!\nпо горизонтали!\n"; return true;
  74.         }
  75.     }
  76.     if ((b[0][0] == b[1][0] && b[0][0] == b[2][0]) || (b[0][1] == b[1][1] && b[0][1] == b[2][1]) || (b[0][2] == b[1][2] && b[0][2] == b[2][2]))
  77.     {
  78.         if (sign == 0)
  79.         {
  80.             cout << "\nВыграл Крестик!\nпо вертикали!\n"; return true;
  81.         }
  82.         else
  83.         {
  84.             cout << "\nВыграл Нолик!\nпо вертикали!\n"; return true;
  85.         }
  86.     }
  87.     if (counter == 9) {
  88.         cout << "\nНичья!\n"; return true;
  89.     }
  90.     return false;
  91. }
  92. bool Board::sms()
  93. {
  94.     std::string str="Error! Kлетка занята\n";
  95.     return false;
  96. }
  97. int Board::counter = 0;
  98. //BoardView.cpp
  99. #include<iostream>
  100. #include<iomanip>
  101. #include"BoardView.h"
  102.  
  103. using namespace std;
  104.  
  105. View::View(Board* b)
  106. {
  107.     boar = b;
  108. }
  109.  
  110. void View::show()
  111. {
  112.     for (int i = 0; i < 3; i++) {
  113.         for (int j = 0; j < 3; j++)
  114.             cout << setw(3) << boar->GetCell(i, j);
  115.         cout << endl;
  116.     }
  117. }
  118.  
  119. void View::StartGame()
  120. {
  121.     char x;
  122.     bool ui, game = false;
  123.     star_show();
  124.     while (game != true)
  125.     {
  126.         if (sign == 0)          //конструкция которая пропускается если НОЛИК не походил правильно
  127.         {
  128.             cout << "\nХодит Крестик!\n" << "Введите цифру:";
  129.             cin >> x;
  130.             ui = boar->makeMove(x, sign);
  131.             if (ui == false)
  132.                 continue;
  133.             system("cls");
  134.             show();
  135.             game = boar->WhoWin(sign);
  136.             if (game == true)
  137.                 break;
  138.             ++sign;
  139.         }
  140.         cout << "\nХодит Нолик!\n" << "Введите цифру:";
  141.         cin >> x;
  142.         ui = boar->makeMove(x, sign);
  143.         if (ui == false)
  144.             continue;
  145.         system("cls");
  146.         show();
  147.         game = boar->WhoWin(sign);
  148.         if (game == true)
  149.             break;
  150.         --sign;
  151.     }
  152. }
  153. void View::star_show()
  154. {
  155.     cout << "Крестики-нолики на двоих!" << endl;
  156.     cout << "Введите 1 чтобы увидеть особенности игры,\n";
  157.        
  158.     char y;
  159.     cin >> y;
  160.     if (y == '1' || y == 'y') {
  161.         cout << "Это известная игра, с обычными\n"
  162.             "правилами! Но кое что нужно знать!\n";
  163.         cout << "Вот поле:\n";
  164.         show();
  165.         cout << "Ячейки пронумерованные цифрами,\n"
  166.             "вводите соответствующую цыфру,\n"
  167.             "и там появиться ваш знак,\n"
  168.             "и так вы разберитесь кто крестик,\n"
  169.             "а кто нолик!\nУдачи!\n\n";
  170.     }
  171.     else
  172.         show();
  173. }
  174.  
  175. int View::sign = 0;
  176. //main.cpp
  177. #include<iostream>
  178. #include<windows.h>
  179. #include"board.h"
  180. #include"BoardView.h"
  181. using namespace std;
  182. int main()
  183. {
  184.     setlocale(LC_ALL, "Rus");
  185.     Board b;
  186.     View h(&b);
  187.     h.StartGame();
  188.     Sleep(2000);
  189.     system("pause");
  190.     return 0;
  191. }
  192. //CFigure.h
  193. #pragma once
  194. #include <iostream>
  195. using namespace std;
  196. class CFigure
  197. {
  198. public:
  199.     virtual ~CFigure() = default;
  200.     virtual std::ostream& Show(std::ostream& out) const = 0;
  201. };
  202.  
  203. class CCross : public CFigure
  204. {
  205. public:
  206.     virtual std::ostream& Show(std::ostream& out) const
  207.     {
  208.         return out << 'X';
  209.     }
  210. };
  211.  
  212. class CZero : public CFigure
  213. {
  214. public:
  215.     virtual std::ostream& Show(std::ostream& out) const
  216.     {
  217.         return out << 'O';
  218.     }
  219. };
  220. #pragma once
  221. #include "CFigure.h"
  222. //board.h
  223.  
  224. //Как программа расположенна в памяти,кто ходит,
  225. //кто выграл,что в каждой ячейки.
  226.  
  227. class Board
  228. {
  229. private:
  230.     CFigure *b[3][3];
  231.     static int counter;
  232. public:
  233.     Board();
  234.    
  235.     bool makeMove(char x, int sign);//метод для занесения хода игрока.
  236.     bool WhoWin(int x);            //Метод для выявления результата игры
  237.     char GetCell(int x, int y);     //метод для вывода конкретной ячейки игрового поля.
  238.     bool sms();                    //вспомогательный метод для вывода инфы про ошибку
  239. };
  240. #pragma once
  241. //BoardView.h
  242.  
  243. #include"board.h"
  244. //графический интерфейс,ввод данных.
  245. class View
  246. {
  247. private:
  248.     Board* boar;
  249.     static int sign;   //счетчик для определения кто ходит 'X' или 'O'
  250.     void show();       //выводит доску
  251.     void star_show();  //начальное приветствие
  252. public:
  253.     View(Board* b);
  254.     void StartGame();  //главный метод для взаимодействия с играками!  
  255. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement