Added a graph class for representing and manipulating the game data
This commit is contained in:
parent
b2a371e804
commit
23add868d6
36
graph.cpp
Normal file
36
graph.cpp
Normal 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
48
graph.h
Normal 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
|
Loading…
Reference in New Issue
Block a user