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