Hey everyone, I could use some help with my partially completed function. Heres the part of the code I need help with.
And heres the values in the 3 arrays.
All this function is suppose to do is cascade numbers around its 6 neighbors on a hexagonal grid by +1 every time until it reaches the end of the grid. It starts at 0 and flows out from there. Here's a picture of what I mean.
http://i.imgur.com/chYI4.png
Now ill simply post the rest of my code as a reference.
Queue.cc
Queue.h
If you have any follow up questions to make the question easier to understand, please feel free to ask.
int numberCells(int illudiumY, int illudiumX, int r, int c) { Queue q; q.enqueue(map[illudiumY][illudiumX]); //Enqueue location of Illudium Phosdex map[illudiumY][illudiumX] = 0; //Cell of IP = 0, Lava -2, all Other Squares -1 while (!q.isEmpty()) { //While the queue is not empty q.dequeue(); //Dequeue a location for (int i=0;i<5;i++) { //For each neighbor of the location dC[i]; //Hexagonal grid movements for columns dR1[i]; //Even rows dR2[i]; //Odd rows if (map[r][c] == -1) { //If neighbors cell is -1 map[r][c] = i+1; //Neighbors cell = Location's cell +1 q.enqueue(i); //Enqueue the neighbor } } } for (r=0; r<ROW; r++) { for (c=0; c<COL; c++) cout << map[r][c]; cout << "\n"; } }
And heres the values in the 3 arrays.
int dC[] = {0,1,1,0,-1,-1}; int dR1[] = {-1,0,1,1,1,0}; int dR2[] = {-1,-1,0,1,0,-1};
All this function is suppose to do is cascade numbers around its 6 neighbors on a hexagonal grid by +1 every time until it reaches the end of the grid. It starts at 0 and flows out from there. Here's a picture of what I mean.
http://i.imgur.com/chYI4.png
Now ill simply post the rest of my code as a reference.
Queue.cc
#include "queue.h" #include <iostream> using namespace std; const int ROW = 22; const int COL = 22; int numberCells(int illudiumY, int illudiumX, int r, int c); int map[ROW][COL]; int dC[] = {0,1,1,0,-1,-1}; int dR1[] = {-1,0,1,1,1,0}; int dR2[] = {-1,-1,0,1,0,-1}; int main(void) { int duckX, duckY, marvinX, marvinY, illudiumX, illudiumY, lavaX, lavaY; int r,c,nLava; bool visited = false; for (r=0; r<ROW; r++) for (c=0; c<COL; c++) map[r][c] = -1; for (r=0;r<ROW;r++) map[0][r] = map[r][0] = map[ROW-1][r] = map[r][ROW-1] = -2; cout << "Please enter Duck Dodger's Y coordinate: "; cin >> duckY; cout << "Please enter Duck Dodger's X coordinate: "; cin >> duckX; cout << "\nPlease enter Marvin the Martian's Y coordinate: "; cin >> marvinY; cout << "Please enter Marvin the Martian's X coordinate: "; cin >> marvinX; cout << "\nPlease enter the Illudium Phosdex's Y coordinate: "; cin >> illudiumY; cout << "Please enter the Illudium Phosdex's X coordinate: "; cin >> illudiumX; illudiumX++; illudiumY++; duckX++; duckY++; marvinX++; marvinY++; // check for validity here if you want cout << "Enter number of lava locations: "; cin >> nLava; for (int i=0;i<nLava;i++) { cout << "Enter lava Y location: "; cin >> lavaY; cout << "Enter lava X location: "; cin >> lavaX; lavaX++; lavaY++; // mark lava location map[lavaY][lavaX] = -2; } map[illudiumY][illudiumX] = 0; for (r=0; r<ROW; r++) { for (c=0; c<COL; c++) cout << map[r][c]; cout << "\n"; } cout << "\n\n"; numberCells(illudiumY, illudiumX, r, c); } // next... find a path for Duck Dodgers and Marvin Martian // void findPath() { // Queue q; // Start at one's location, enqueue it. Look at the surrounding neighbors and for any that are (Current Path -1), enqueue them. } int numberCells(int illudiumY, int illudiumX, int r, int c) { Queue q; q.enqueue(map[illudiumY][illudiumX]); //Enqueue location of Illudium Phosdex map[illudiumY][illudiumX] = 0; //Cell of IP = 0, Lava -2, all Other Squares -1 while (!q.isEmpty()) { //While the queue is not empty q.dequeue(); //Dequeue a location for (int i=0;i<5;i++) { //For each neighbor of the location dC[i]; //Hexagonal grid movements for columns dR1[i]; //Even rows dR2[i]; //Odd rows if (map[r][c] == -1) { //If neighbors cell is -1 map[r][c] = i+1; //Neighbors cell = Location's cell +1 q.enqueue(i); //Enqueue the neighbor } } } for (r=0; r<ROW; r++) { for (c=0; c<COL; c++) cout << map[r][c]; cout << "\n"; } } //With every cell numbered (-1) except illudium phosdex (0) and lava (-2), use map[illudiumY][illudiumX] to +1 every cell around it to the edge.
Queue.h
#ifndef _QUEUE_H #define _QUEUE_H const int MAX_QUEUE_SIZE = 20; enum QueueExceptions { E_QUEUE_EMPTY, E_QUEUE_FULL, E_ARRAY_OUT_OF_BOUNDS }; class Queue { public: Queue(void) { head = 0; tail = 0; count = 0; } ~Queue(void) { } void clear(void) { head = 0; tail = 0; count = 0; } bool isEmpty(void) { return !count; } int size(void) { return count; } void Queue::enqueue(int d) throw (int) { if (count == MAX_QUEUE_SIZE) throw E_QUEUE_FULL; data[tail] = d; tail = (tail + 1) % MAX_QUEUE_SIZE; count++; } int Queue::dequeue(void) throw(int) { int d; if (count == 0) throw E_QUEUE_EMPTY; d = data[head]; head = (head + 1) % MAX_QUEUE_SIZE; count--; return d; } // void enqueue(int) throw (int); // int dequeue(void) throw (int); int numberCells(int r, int c); private: int data[MAX_QUEUE_SIZE]; int head,tail,count; }; #endif
If you have any follow up questions to make the question easier to understand, please feel free to ask.