77 lines
1.6 KiB
C++
77 lines
1.6 KiB
C++
|
#include "gamedata.h"
|
||
|
#include "mathutils.h"
|
||
|
|
||
|
int GameData::PLAYER1_COLOUR = 0x4a483f;
|
||
|
int GameData::PLAYER2_COLOUR = 0x090c7a;
|
||
|
|
||
|
GameData::GameData()
|
||
|
: Graph(true)
|
||
|
{
|
||
|
current = NULL;
|
||
|
player = PLAYER1;
|
||
|
}
|
||
|
|
||
|
GameData::~GameData() { }
|
||
|
|
||
|
void GameData::toggle_turn()
|
||
|
{
|
||
|
if (player == PLAYER1) player = PLAYER2;
|
||
|
else if (player == PLAYER2) player = PLAYER1;
|
||
|
}
|
||
|
|
||
|
|
||
|
void GameData::do_vertex(int x, int y, int r)
|
||
|
{
|
||
|
int colour;
|
||
|
if (player == PLAYER1) colour = PLAYER1_COLOUR;
|
||
|
if (player == PLAYER2) colour = PLAYER2_COLOUR;
|
||
|
|
||
|
if (point_in_vertex(x, y, r)) select_vertex(x, y);
|
||
|
else add_vertex(x, y, r, colour);
|
||
|
}
|
||
|
|
||
|
|
||
|
void GameData::select_vertex(int x, int y)
|
||
|
{
|
||
|
|
||
|
for (list<Vertex*>::iterator cursor = vertices.begin();
|
||
|
cursor != vertices.end(); cursor++)
|
||
|
{
|
||
|
Vertex* v = *cursor;
|
||
|
if ((MathUtils::distance(v->x, v->y, x, y) <= v->r) &&
|
||
|
(v->colour == PLAYER1_COLOUR && player == PLAYER1 ||
|
||
|
v->colour == PLAYER2_COLOUR && player == PLAYER2))
|
||
|
{
|
||
|
current = v;
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
bool GameData::add_vertex(int x, int y, int r, int colour)
|
||
|
{
|
||
|
// this is the special case for adding the first vertex for each player
|
||
|
if (current == NULL)
|
||
|
{
|
||
|
if ((player == PLAYER1 && !player1_played) ||
|
||
|
(player == PLAYER2 && !player2_played))
|
||
|
{
|
||
|
Graph::add_vertex(x, y, r, colour);
|
||
|
if (player == PLAYER1) player1_played = true;
|
||
|
if (player == PLAYER2) player2_played = true;
|
||
|
toggle_turn();
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if (Graph::add_vertex(x, y, r, colour, current))
|
||
|
{
|
||
|
clear_current_vertex();
|
||
|
toggle_turn();
|
||
|
return true;
|
||
|
}
|
||
|
return false;
|
||
|
}
|