* added packaging script for windows * renamed sublime plugin. * added tictactoe project to packages projects
50 lines
939 B
C++
50 lines
939 B
C++
#include "human_player.h"
|
|
|
|
#include "io.h"
|
|
|
|
HumanPlayer::HumanPlayer( Field::Token token, const char* name )
|
|
: Player( token, name ) {
|
|
}
|
|
|
|
HumanPlayer::~HumanPlayer() {
|
|
}
|
|
|
|
Field::Move HumanPlayer::Turn( const Field& field ) const {
|
|
Field::Move move;
|
|
io::stringOut(name_);
|
|
io::stringOut("\n");
|
|
|
|
do {
|
|
move = Input();
|
|
move.row -= 1;
|
|
move.col -= 1;
|
|
} while ( !Check( field, move ) );
|
|
return move;
|
|
}
|
|
|
|
Field::Move HumanPlayer::Input() const {
|
|
Field::Move move;
|
|
move.row = -1;
|
|
move.col = -1;
|
|
|
|
io::stringOut("Insert row: ");
|
|
move.row = io::numberIn();
|
|
|
|
io::stringOut("Insert column: ");
|
|
move.col = io::numberIn();
|
|
|
|
io::stringOut("\n");
|
|
return move;
|
|
}
|
|
|
|
bool HumanPlayer::Check( const Field& field, const Field::Move& move ) const {
|
|
if ( !field.InRange( move ) ) {
|
|
io::stringOut("Wrong input!\n");
|
|
return false;
|
|
} else if ( !field.IsEmpty( move ) ) {
|
|
io::stringOut("Is occupied!\n");
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|