Я работаю над проектом по разработке игры на C++, и моя программа продолжает сбой, когда я пытаюсь получить переход от игрока. Программа позволяет пользователю выбирать для каждого из двух игроков, если это будет компьютерный плеер или человек. Если это игрок-человек, он собирает имя для игрока.Сбой программы C++ после использования -> Оператор
При запуске программы, мой основной класс создает объект игры, запускает selectPlayers() функции, а затем запускает воспроизведения() функции. Программа загружается, спрашивает меня о человеке или компьютере для каждого игрока, собирая имя для людей и отображая плату (которая отображается в функции play(), а затем она вылетает с окном, которое появляется с сообщением
программа перестала работать, окно ищет решение
Добавлено комментарий в коде ниже, чтобы показать, где проблема. Если я ставлю COUT выше этой линии, она печатает, но ничего после этой строки принтов ... И если я положил cout на самую первую строку метода makeMove в моем классе HumanPlayer, он не будет напечатан, поэтому программа будет сбой, прежде чем попасть в метод.
Вот заголовок для моего игрового класса:
#include "Board.h"
#include "Player.h"
#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
class Game
{
Board b;
int turn;
bool winner;
Player* player1;
Player* player2;
public:
Game();
~Game();
void selectPlayers();
Player* nextPlayer() const;
void play();
void announceWinner();
};
#endif // GAME_H_INCLUDED
И сам класс:
#include "Game.h"
#include "HumanPlayer.h"
#include "RandomPlayer.h"
#include <iostream>
Game::Game()
{
b.reset();
turn = 1;
winner = false;
}
Game::~Game()
{
}
void Game::selectPlayers()
{
int x = 0;
std::string type;
std::string name;
std::cout << "Enter type for Player 1 (Human/Computer): ";
std::cin >> type;
while(x == 0)
{
if(type.compare("Human") == 0)
{
x = 1;
std::cout << "Enter name for Player 1: ";
std::cin >> name;
HumanPlayer p(name, LIGHT);
HumanPlayer * player1 = &p;
}
else if(type.compare("Computer") == 0)
{
x = 1;
RandomPlayer p(1, LIGHT);
RandomPlayer * player1 = &p;
}
else
{
std::cout << "Please enter Human or Computer for Player 1: ";
std::cin >> type;
}
}
std::cout << "Enter type for Player 2 (Human/Computer): ";
std::cin >> type;
x = 0;
while(x == 0)
{
if(type.compare("Human") == 0)
{
x = 1;
std::cout << "Enter name for Player 2: ";
std::cin >> name;
HumanPlayer p(name, DARK);
HumanPlayer * player2 = &p;
}
else if(type.compare("Computer") == 0)
{
x = 1;
RandomPlayer p(2, DARK);
RandomPlayer * player2 = &p;
}
else
{
std::cout << "Please enter Human or Computer for Player 2: ";
std::cin >> type;
}
}
}
Player* Game::nextPlayer() const
{
}
void Game::play()
{
while(winner == false)
{
b.display();
if(turn%2 == 1)
{
player1->makeMove(b); //PROGRAM CRASHES HERE
++turn;
}
else
{
player2->makeMove(b);
++turn;
}
}
}
void Game::announceWinner()
{
}
Любая помощь будет удивительным, спасибо, ребята.
Не забудьте удалить их в деструкторе! Или просто используйте интеллектуальные указатели, такие как 'std :: unique_ptr' или' std :: shared_ptr'. –