std::vector AStar(std::vector nodes, // The AStar "open" list int start, // start node int finish, // goal node int maxPathSize // maximum path size. this cuts it off from running // forever. ) { // The AStar "closed" list std::vector path; // The "current" node Node* current = nodes[start]; // Points to a spot in the "grid" array, this // is the object with the lowest F int LowestF = 0; // # of times we've run int runs = 0; // Loop until we're done. while(runs < maxPathSize) { // Loop through nodes and record the "F" element for // them. for(int i=0; ix + nodes[i]->y; f -= ( current->x + current->y ); if(nodes[i]->walkable) // if we can walk on it nodes[i]->f = f; // set it's F var else // can't walk on it nodes[i]->f = 1000; // so just ignore it } // Now find the node with the lowest F for(int i=0; if < nodes[LowestF]->f) // Mark us as the lowest LowestF = i; } // Now add the "Lowest F" element to the path path.push_back(nodes[LowestF]); // Set the "current node" to the LowstF node current = nodes[LowestF]; // Now remove the "Lowest F" element from the open // list nodes.erase( nodes.begin()+LowestF ); // Add to the # of runs. after maxPathSize runs, we // stop. runs++; } // Return the path return path; };