Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- MAIN*
- #include <iostream>
- #include <string>
- #include <iomanip>
- #include <ctime>
- #include "Players.h"
- using namespace std;
- int main() {
- srand(time(NULL));
- cout << "Set map size: "; int size = input();
- size *= size;
- string *map = new string[size];
- for (size_t i = 0; i < size; i++) {
- map[i] = to_string(i + 1);
- if (i + 1 < 10)map[i].insert(0, "0");
- }
- cout << "Set number of players: "; int numberOfPlayers = input();
- cin.get();
- Players *players = new Players[numberOfPlayers];
- for (size_t i = 0; i < numberOfPlayers; i++) {
- cout << "Name of player #" << i + 1 << ": ";
- string name; getline(cin, name);
- players[i] = *new Players(name);
- }
- int queue = rand() % numberOfPlayers, move = 1;
- while (1) {
- retry:
- RefreshMap(map, size);
- cout << "Move: " << move << ". " << players[queue].GetPlayerName() << ", ( " << players[queue].GetPlayerSymbol() << ") choose position: "; int position = input();
- if (position > size) {
- system("cls");
- cout << "Error: numbers from 1 to " << size << endl;
- goto retry;
- }
- system("cls");
- if (!PutMark(map, players[queue], size, position))goto retry;
- if (isWin(map, size)) {
- system("cls");
- RefreshMap(map, size);
- cout << "Player " << players[queue].GetPlayerName() << " win.\n";
- break;
- }
- if (move == size) {
- RefreshMap(map, size);
- cout << "\nDraw!"; break;
- }
- queue++;
- move++;
- queue == numberOfPlayers ? queue = 0 : queue;
- }
- cin.get(); cin.get();
- }
- ***INCLUDE
- #include <string>
- const std::string marks[10]{ "X ","O ","A ","B ","C ","D ","E ","F ","G ","K " };
- int globalCounter = 0;
- class Players {
- std::string name, symbol;
- int countOfWin;
- public:
- Players(std::string name) :name(name), countOfWin(0), symbol(marks[globalCounter++]) {}
- Players() {}
- inline void SetName(std::string name) {
- this->name = name;
- symbol = marks[globalCounter++];
- }
- int isWin(Players *players, int numberOfPlayers) {}
- std::string GetPlayerSymbol() {
- return symbol;
- }
- std::string GetPlayerName() { return name; }
- };
- void RefreshMap(std::string *map, int size) {
- for (size_t i = 0; i < size; i++) {
- std::cout << "|" << map[i] << "|";
- (i + 1) % (int)sqrt(size) == 0 ? std::cout << std::endl : std::cout << "";
- }
- }
- bool PutMark(std::string *map, Players player, int size, int index) {
- index--;
- for (size_t i = 0; i < 10; i++)
- if (map[index] == marks[i]) {
- std::cout << "Error: already chosen\n";
- return false;
- }
- map[index] = player.GetPlayerSymbol();
- return true;
- }
- bool isWin(std::string map[], int size) {
- int repeated = 1;
- for (size_t i = 0; i < size; i += (int)sqrt(size)) {
- for (size_t j = i + 1; j < (int)sqrt(size) + i; j++) {
- if (map[i] == map[j])repeated++;
- }
- if (repeated == (int)sqrt(size))return true;
- repeated = 1;
- }
- repeated = 1;
- for (size_t i = 0; i < (int)sqrt(size); i++) {
- for (size_t j = i + (int)sqrt(size), k = 0; k < (int)sqrt(size); j += (int)sqrt(size), k++) {
- if (map[i] == map[j])repeated++;
- }
- if (repeated == (int)sqrt(size))return true;
- repeated = 1;
- }
- repeated = 0;
- for (size_t i = 0; i < size; i += (int)sqrt(size) + 1) { // \
- if (map[0] == map[i])repeated++;
- if (repeated == (int)sqrt(size))return true;
- }
- repeated = 0;
- for (size_t i = (int)sqrt(size) - 1; i <= size - (int)sqrt(size); i += (int)sqrt(size) - 1) { // /
- if (map[(int)sqrt(size) - 1] == map[i])repeated++;
- if (repeated == (int)sqrt(size))return true;
- }
- return false;
- }
- int input() {
- int item;
- while (true) {
- std::cin >> item;
- if (std::cin.peek() == '\n') {
- return item;
- }
- else {
- std::cout << "You have inputed not a digit.\nRetry: ";
- std::cin.clear();
- while (std::cin.get() != '\n') {};
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement