mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-02-03 04:39:17 +00:00
racing:: track length reduced if there are problems
This commit is contained in:
parent
d4b2e0f88b
commit
47a1d77ee4
30
racing.cpp
30
racing.cpp
@ -246,6 +246,8 @@ ld start_line_width;
|
|||||||
|
|
||||||
struct hr_track_failure : hr_exception {};
|
struct hr_track_failure : hr_exception {};
|
||||||
|
|
||||||
|
int length;
|
||||||
|
|
||||||
void find_track(cell *start, int sign, int len) {
|
void find_track(cell *start, int sign, int len) {
|
||||||
int dl = 7 - getDistLimit() - genrange_bonus;
|
int dl = 7 - getDistLimit() - genrange_bonus;
|
||||||
cell *goal;
|
cell *goal;
|
||||||
@ -258,7 +260,7 @@ void find_track(cell *start, int sign, int len) {
|
|||||||
while(true) {
|
while(true) {
|
||||||
traversed++;
|
traversed++;
|
||||||
if(cellbydist.empty()) {
|
if(cellbydist.empty()) {
|
||||||
printf("reset after traversing %d\n", traversed);
|
println(hlog, "reset after traversing ", traversed, " width = ", TWIDTH, " length = ", length);
|
||||||
throw hr_track_failure();
|
throw hr_track_failure();
|
||||||
}
|
}
|
||||||
auto it = cellbydist.end();
|
auto it = cellbydist.end();
|
||||||
@ -269,7 +271,7 @@ void find_track(cell *start, int sign, int len) {
|
|||||||
int id = hrand(isize(v));
|
int id = hrand(isize(v));
|
||||||
cell *c = v[id];
|
cell *c = v[id];
|
||||||
v[id] = v.back(); v.pop_back();
|
v[id] = v.back(); v.pop_back();
|
||||||
if(it->first >= LENGTH) {
|
if(it->first >= length) {
|
||||||
goal = c;
|
goal = c;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -435,30 +437,32 @@ EX void generate_track() {
|
|||||||
|
|
||||||
bounded_track = false;
|
bounded_track = false;
|
||||||
|
|
||||||
|
length = LENGTH;
|
||||||
|
if(WDIM == 3 || weirdhyperbolic) length = max(length - 10 * race_try, 10);
|
||||||
|
|
||||||
if(sol) {
|
if(sol) {
|
||||||
track.push_back(s);
|
track.push_back(s);
|
||||||
find_track(s, 1, LENGTH/4);
|
find_track(s, 1, length/4);
|
||||||
find_track(track.back(), -1, LENGTH-2*(LENGTH/4));
|
find_track(track.back(), -1, length-2*(length/4));
|
||||||
find_track(track.back(), 1, LENGTH/4);
|
find_track(track.back(), 1, length/4);
|
||||||
}
|
}
|
||||||
else if(nih) {
|
else if(nih) {
|
||||||
track.push_back(s);
|
track.push_back(s);
|
||||||
find_track(s, 1, LENGTH/2);
|
find_track(s, 1, length/2);
|
||||||
find_track(track.back(), -1, LENGTH/2);
|
find_track(track.back(), -1, length/2);
|
||||||
}
|
}
|
||||||
else if(nil) {
|
else if(nil) {
|
||||||
track.push_back(s);
|
track.push_back(s);
|
||||||
find_track(s, 1, LENGTH/4);
|
find_track(s, 1, length/4);
|
||||||
find_track(track.back(), 2, LENGTH/4);
|
find_track(track.back(), 2, length/4);
|
||||||
find_track(track.back(), 3, LENGTH/4);
|
find_track(track.back(), 3, length/4);
|
||||||
find_track(track.back(), 4, LENGTH/4);
|
find_track(track.back(), 4, length/4);
|
||||||
}
|
}
|
||||||
else if(bounded && !prod) {
|
else if(bounded && !prod) {
|
||||||
bounded_track = true;
|
bounded_track = true;
|
||||||
make_bounded_track(s);
|
make_bounded_track(s);
|
||||||
}
|
}
|
||||||
else try {
|
else find_track(s, 0, length);
|
||||||
find_track(s, 0, LENGTH);
|
|
||||||
}
|
}
|
||||||
catch(hr_track_failure&) {
|
catch(hr_track_failure&) {
|
||||||
race_try++;
|
race_try++;
|
||||||
|
Loading…
Reference in New Issue
Block a user