Added a graph class for representing and manipulating the game data

This commit is contained in:
Anna Rose 2011-06-22 17:29:41 -04:00
parent b2a371e804
commit 23add868d6
2 changed files with 84 additions and 0 deletions

36
graph.cpp Normal file
View File

@ -0,0 +1,36 @@
#include "graph.h"
bool Graph::vertex_present(int x, int y, int size)
{
int delta = size / 2;
int x_min = x - delta;
int x_max = x + delta;
int y_min = y - delta;
int y_max = y + delta;
for (list<Vertex>::iterator cursor = vertices.begin();
cursor != vertices.end(); cursor++)
{
Vertex v = *cursor;
if (((x_min >= v.x_min && x_min <= x_max) &&
((y_min >= v.y_min && y_min <= y_max) ||
(y_max >= v.y_min && y_max <= y_max))) ||
((x_max >= v.x_min && x_max <= x_max) &&
((y_min >= v.y_min && y_min <= y_max) ||
(y_max >= v.y_min && y_max <= y_max))))
return true;
}
return false;
}
void Graph::add_vertex(Vertex v)
{
if (vertex_present(v.x, v.y)) return;
vertices.push_back(v);
edges.push_back(Edge(last_vertex, v));
last_vertex = v;
}

48
graph.h Normal file
View File

@ -0,0 +1,48 @@
/* Represents an undirected graph.
* Also contains the vertex and edge classes
* vertexes know their center point on the SDL Surface -
* bad decoupling maybe, but not too bad, all things considered
*/
#ifndef _GRAPH_H_
#define _GRAPH_H_
#include <list>
using std::list;
struct Vertex
{
int x;
int y;
int min_x;
int min_y;
int max_x;
int max_y;
};
struct Edge
{
Vertex a;
Vertex b;
};
class Graph
{
public:
Graph() {}
bool vertex_present(int x, int y, int size);
list<Vertex> get_vertices() { return vertices; }
list<Edge> get_edges() { return edges; }
void add_vertex(Vertex v);
private:
Vertex last_vertex;
list<Vertex> vertices;
list<Edge> edges;
};
#endif