Vale, acabo de solucionarlo... efectivamente, el problema estaba en Pycharm. Para añadir módulos se debe de ir a settings y en las opciones del compilador aparece un menú con los módulos instalados y otra opción para añadir más.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú#ifndef TICTACTOEENGINE_H
#define TICTACTOEENGINE_H
#include <vector>
using namespace std;
class TicTacToeEngine
{
protected:
vector <unsigned short> board;
unsigned short state;
bool first__player_turn;
void Check();
public:
TicTacToeEngine(void);
TicTacToeEngine( const vector<unsigned short>);
TicTacToeEngine( const TicTacToeEngine&);
~TicTacToeEngine(void);
TicTacToeEngine operator=( const TicTacToeEngine&);
bool Movement(unsigned short);
vector<unsigned short> Board(void) const;
void Restart(void);
unsigned short State(void) const;
bool FirstPlayer(void) const;
};
#endif // TICTACTOEENGINE_H
#include "TicTacToeEngine.h"
//////////////////////////////////////////////////////////////////////////////////////////
// win checker
//checks if there is a line
void TicTacToeEngine::Check(void)
{
/////////////
//CHECK TIE//
/////////////
unsigned short i = 0;
while(i < 9 && board[i] != 0) {
if(i == 8) {
state = 3;
return;
}
i++;
}
//////////////////////
//CHECK FIRST PLAYER//
//////////////////////
//CHECK HORIZONTAL
//first line
if(board[0] == 1 && board[1] == 1 && board[2] == 1)
state = 1;
return;
//second line
if(board[3] == 1 && board[4] == 1 && board[5] == 1)
state = 1;
return;
//third line
if(board[6] == 1 && board[7] == 1 && board[8] == 1)
state = 1;
return;
//CHECK VERTICAL
//first line
if(board[0] == 1 && board[3] == 1 && board[6] == 1)
state = 1;
return;
//second line
if(board[1] == 1 && board[4] == 1 && board[7] == 1)
state = 1;
return;
//third line
if(board[2] == 1 && board[5] == 1 && board[8] == 1)
state = 1;
return;
//DIAGONAL LINES
//top right to bottom left
if(board[2] == 1 && board[4] == 1 && board[6] == 1 )
state = 1;
return;
//top left to bottom right
if(board[0] == 1 && board[4] == 1 && board[8] == 1 )
state = 1;
return;
///////////////////////
//CHECK second PLAYER//
///////////////////////
//CHECK HORIZONTAL
//first line
if(board[0] == 2 && board[1] == 2 && board[2] == 2 )
state = 2;
return;
//second line
if(board[3] == 2 && board[4] == 2 && board[5] == 2 )
state = 2;
return;
//third line
if(board[6] == 2 && board[7] == 2 && board[8] == 2 )
state = 2;
return;
//CHECK VERTICAL
//first line
if(board[0] == 2 && board[3] == 2 && board[6] == 2 )
state = 2;
return;
//second line
if(board[1] == 2 && board[4] == 2 && board[7] == 2 )
state = 2;
return;
//third line
if(board[2] == 2 && board[5] == 2 && board[8] == 2 )
state = 2;
return;
//DIAGONAL LINES
//top right to bottom left
if(board[2] == 2 && board[4] == 2 && board[6] == 2 )
state = 2;
return;
//top left to bottom right
if(board[0] == 2 && board[4] == 2 && board[8] == 2 )
state = 2;
return;
return;
}
//////////////////////////////////////////////////////////////////////////////////////////
// constructors & destructor
//normal constructor
TicTacToeEngine::TicTacToeEngine(void) :
state(0), first__player_turn(false)
{
//creates an array filled with 0 (empty board)
for(int i = 0; i < 9; i++) {
board.push_back(0);
}
}
//constructor with vector as argument
TicTacToeEngine::TicTacToeEngine( const vector<unsigned short> original_board) :
board(original_board), first__player_turn(false)
{
Check();
}
//copy constructor
TicTacToeEngine::TicTacToeEngine( const TicTacToeEngine& original) :
board( original.board), state(original.state),
first__player_turn(original.first__player_turn) {}
TicTacToeEngine::~TicTacToeEngine(void) {}
//////////////////////////////////////////////////////////////////////////////////////////
// operator =
TicTacToeEngine TicTacToeEngine::operator=( const TicTacToeEngine& original)
{
board = original.board;
state = original.state;
first__player_turn = original.first__player_turn;
return *this;
}
//////////////////////////////////////////////////////////////////////////////////////////
// Movement method
bool TicTacToeEngine::Movement(unsigned short place)
{
//if the place is not between 0 and 8 or occupied or if the game has finished returns false
if( place < 0 || place > 8 || board[place] != 0 || state != 0)
return false;
//else the place in the board is filled
if(first__player_turn) {
board[place] = 1;
}
else {
board[place] = 2;
}
//check if the game has ended
Check();
first__player_turn = !first__player_turn;
return true;
}
//////////////////////////////////////////////////////////////////////////////////////////
// Return board method
vector<unsigned short> TicTacToeEngine::Board(void) const
{
return board;
}
//////////////////////////////////////////////////////////////////////////////////////////
// Restart method
void TicTacToeEngine::Restart(void)
{
//restarts the board array with all elements at 0
board.clear();
for(int i = 0; i < 9; i++) {
board.push_back(0);
}
//restarts game data
state = 0;
first__player_turn = true;
}
//////////////////////////////////////////////////////////////////////////////////////////
// Returns true if the game has finished
unsigned short TicTacToeEngine::State(void) const
{
return state;
}
//////////////////////////////////////////////////////////////////////////////////////////
// Returns true if it is the turn of the first player
bool TicTacToeEngine::FirstPlayer(void) const
{
return first__player_turn;
}
//////////////////////////////////////////////////////////////////////////////////////////
#ifndef TICTACTOE_H
#define TICTACTOE_H
#include <iostream>
#include <windows.h>
#include "TicTacToeEngine.h"
using namespace std;
class TicTacToe : public TicTacToeEngine
{
void Graphic(unsigned short);
public:
TicTacToe(void);
bool GraphicMovement(void);
void Play(void);
};
/*
base class methods:
TicTacToeEngine(void);
TicTacToeEngine( const vector<unsigned short>);
TicTacToeEngine( const TicTacToeEngine&);
~TicTacToeEngine(void);
TicTacToeEngine operator=( const TicTacToeEngine&);
bool Movement(unsigned short);
vector<unsigned short> Board(void) const;
void Restart(void);
unsigned short State(void) const;
bool FirstPlayer(void) const;
*/
#endif // TICTACTOE_H
#include "TicTacToe.h"
//////////////////////////////////////////////////////////////////////////////////////////
// constructors & destructor
//normal constructor
TicTacToeEngine::TicTacToeEngine(void) :
state(0), first__player_turn(false)
{
//creates an array filled with 0 (empty board)
for(int i = 0; i < 9; i++) {
board.push_back(0);
}
}
//////////////////////////////////////////////////////////////////////////////////////////
// Graphic Movement
void TicTacToe::Graphic(unsigned short i)
{
if(board[i] == 0) {
cout << " ";
}
if(board[i] == 1) {
cout << "x";
}
if(board[i] == 2) {
cout << "O";
}
}
bool TicTacToe::GraphicMovement(void)
{
system("CLS");
cout << endl << endl;
cout << " "; Graphic(0); cout << " | "; Graphic(1); cout << " | "; Graphic(2); cout << endl;
cout << " ------------" << endl;
cout << " "; Graphic(3); cout << " | "; Graphic(4); cout << " | "; Graphic(5); cout << endl;
cout << " ------------" << endl;
cout << " "; Graphic(6); cout << " | "; Graphic(7); cout << " | "; Graphic(8); cout << endl;
cout << endl << endl;
cout << "Movimiento del jugador";
if(first__player_turn)
cout << " 1: ";
if(!first__player_turn)
cout << " 2: ";
unsigned short movement;
bool moved;
cin >> movement;
moved = Movement(movement);
return moved;
}
//////////////////////////////////////////////////////////////////////////////////////////
//Just play
void TicTacToe::Play(void)
{
while(state == 0) {
GraphicMovement();
}
cout << endl << endl << "End of the game." << endl << endl << "Result: ";
if(state == 1) {
cout << "First player has won." << endl << endl;
}
if(state == 2) {
cout << "Second player has won." << endl << endl;
}
if(state == 3) {
cout << "Tie" << endl << endl;
}
}
//////////////////////////////////////////////////////////////////////////////////////////
ficha[i] = new CFicha
class CBiblioteca
{
vector<CFicha *> ficha;
public:
//basico
CBiblioteca();
CBiblioteca(const CBiblioteca&);
~CBiblioteca();
CBiblioteca operator=(const CBiblioteca&);
CFicha* operator[](unsigned);
//funciones
void AnyadirFicha(CFicha&);
int BuscarFicha(const string) const;
//eliminar siguiente ?
bool EliminarFicha(unsigned);
bool MostrarFicha(unsigned);
bool MostrarBiblioteca(void);
};
CBiblioteca CBiblioteca::operator=(const CBiblioteca& bib)
{
//primero vaciamos la matriz
for(int i = 0; i < ficha.size(); i++)
delete ficha[i];
ficha.clear();
//ahora copiamos los elementos
for(int i = 0; i < bib.ficha.size(); i++)
ficha.push_back(new CFicha(*(bib.ficha[i])));
return *this;
}
void CBiblioteca::AnyadirFicha(CFicha& ficha)
{
ficha.push_back(new CFicha(ficha));
}
private:
int tamanyo;
float array [tamanyo];
Clase::Clase(int _tamanyo) : tamanyo (_tamanyo)