Advertisement
Guest User

Untitled

a guest
Feb 18th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.72 KB | None | 0 0
  1. MAIN*
  2. #include <iostream>
  3. #include <string>
  4. #include <iomanip>
  5. #include <ctime>
  6. #include "Players.h"
  7. using namespace std;
  8. int main() {
  9. srand(time(NULL));
  10. cout << "Set map size: "; int size = input();
  11. size *= size;
  12. string *map = new string[size];
  13. for (size_t i = 0; i < size; i++) {
  14. map[i] = to_string(i + 1);
  15. if (i + 1 < 10)map[i].insert(0, "0");
  16. }
  17. cout << "Set number of players: "; int numberOfPlayers = input();
  18. cin.get();
  19. Players *players = new Players[numberOfPlayers];
  20. for (size_t i = 0; i < numberOfPlayers; i++) {
  21. cout << "Name of player #" << i + 1 << ": ";
  22. string name; getline(cin, name);
  23. players[i] = *new Players(name);
  24. }
  25. int queue = rand() % numberOfPlayers, move = 1;
  26.  
  27. while (1) {
  28. retry:
  29. RefreshMap(map, size);
  30. cout << "Move: " << move << ". " << players[queue].GetPlayerName() << ", ( " << players[queue].GetPlayerSymbol() << ") choose position: "; int position = input();
  31. if (position > size) {
  32. system("cls");
  33. cout << "Error: numbers from 1 to " << size << endl;
  34. goto retry;
  35. }
  36. system("cls");
  37. if (!PutMark(map, players[queue], size, position))goto retry;
  38.  
  39. if (isWin(map, size)) {
  40. system("cls");
  41. RefreshMap(map, size);
  42. cout << "Player " << players[queue].GetPlayerName() << " win.\n";
  43. break;
  44. }
  45. if (move == size) {
  46. RefreshMap(map, size);
  47. cout << "\nDraw!"; break;
  48. }
  49. queue++;
  50. move++;
  51. queue == numberOfPlayers ? queue = 0 : queue;
  52. }
  53. cin.get(); cin.get();
  54. }
  55.  
  56. ***INCLUDE
  57. #include <string>
  58. const std::string marks[10]{ "X ","O ","A ","B ","C ","D ","E ","F ","G ","K " };
  59. int globalCounter = 0;
  60. class Players {
  61. std::string name, symbol;
  62. int countOfWin;
  63.  
  64. public:
  65. Players(std::string name) :name(name), countOfWin(0), symbol(marks[globalCounter++]) {}
  66. Players() {}
  67. inline void SetName(std::string name) {
  68. this->name = name;
  69. symbol = marks[globalCounter++];
  70. }
  71. int isWin(Players *players, int numberOfPlayers) {}
  72. std::string GetPlayerSymbol() {
  73. return symbol;
  74. }
  75. std::string GetPlayerName() { return name; }
  76.  
  77. };
  78. void RefreshMap(std::string *map, int size) {
  79. for (size_t i = 0; i < size; i++) {
  80. std::cout << "|" << map[i] << "|";
  81. (i + 1) % (int)sqrt(size) == 0 ? std::cout << std::endl : std::cout << "";
  82. }
  83. }
  84. bool PutMark(std::string *map, Players player, int size, int index) {
  85. index--;
  86. for (size_t i = 0; i < 10; i++)
  87. if (map[index] == marks[i]) {
  88. std::cout << "Error: already chosen\n";
  89. return false;
  90. }
  91. map[index] = player.GetPlayerSymbol();
  92. return true;
  93. }
  94. bool isWin(std::string map[], int size) {
  95. int repeated = 1;
  96. for (size_t i = 0; i < size; i += (int)sqrt(size)) {
  97. for (size_t j = i + 1; j < (int)sqrt(size) + i; j++) {
  98. if (map[i] == map[j])repeated++;
  99. }
  100. if (repeated == (int)sqrt(size))return true;
  101. repeated = 1;
  102. }
  103. repeated = 1;
  104. for (size_t i = 0; i < (int)sqrt(size); i++) {
  105. for (size_t j = i + (int)sqrt(size), k = 0; k < (int)sqrt(size); j += (int)sqrt(size), k++) {
  106. if (map[i] == map[j])repeated++;
  107. }
  108. if (repeated == (int)sqrt(size))return true;
  109. repeated = 1;
  110. }
  111. repeated = 0;
  112. for (size_t i = 0; i < size; i += (int)sqrt(size) + 1) { // \
  113.  
  114. if (map[0] == map[i])repeated++;
  115. if (repeated == (int)sqrt(size))return true;
  116. }
  117. repeated = 0;
  118. for (size_t i = (int)sqrt(size) - 1; i <= size - (int)sqrt(size); i += (int)sqrt(size) - 1) { // /
  119. if (map[(int)sqrt(size) - 1] == map[i])repeated++;
  120. if (repeated == (int)sqrt(size))return true;
  121. }
  122. return false;
  123. }
  124. int input() {
  125. int item;
  126. while (true) {
  127. std::cin >> item;
  128. if (std::cin.peek() == '\n') {
  129. return item;
  130. }
  131. else {
  132. std::cout << "You have inputed not a digit.\nRetry: ";
  133. std::cin.clear();
  134. while (std::cin.get() != '\n') {};
  135. }
  136. }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement