mirror of
https://github.com/zenorogue/hyperrogue.git
synced 2025-06-06 08:24:06 +00:00
gobot:: better own information
This commit is contained in:
parent
9a9ecd3c8c
commit
0167e284cc
@ -34,6 +34,7 @@ vector<cell*> ac;
|
|||||||
map<cell*, int> indices;
|
map<cell*, int> indices;
|
||||||
|
|
||||||
const int Free = 2;
|
const int Free = 2;
|
||||||
|
const int Unowned = 3;
|
||||||
|
|
||||||
struct boarddata {
|
struct boarddata {
|
||||||
vector<int> taken, owner;
|
vector<int> taken, owner;
|
||||||
@ -97,7 +98,7 @@ int str_to_index(string s) {
|
|||||||
else return val + isize(chars) * (str_to_index(s.substr(1)) + 1);
|
else return val + isize(chars) * (str_to_index(s.substr(1)) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
color_t player_colors[2] = {0x202020FF, 0xFFFFFFFF};
|
color_t player_colors[4] = {0x202020FF, 0xFFFFFFFF, 0, 0xFFD500FF};
|
||||||
|
|
||||||
bool draw_go(cell *c, const shiftmatrix& V) {
|
bool draw_go(cell *c, const shiftmatrix& V) {
|
||||||
if(c->wall == waSea) c->wall = waChasm;
|
if(c->wall == waSea) c->wall = waChasm;
|
||||||
@ -306,6 +307,35 @@ bool mark_owned(string s, int who) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool set_owner_auto() {
|
||||||
|
int N = isize(ac);
|
||||||
|
for(int at=0; at<N; at++) if(current.taken[at] == Free) current.owner[at] = Free;
|
||||||
|
|
||||||
|
for(int pos=0; pos<N; pos++) if(current.taken[pos] == Free && current.owner[pos] == Free) {
|
||||||
|
dfs d;
|
||||||
|
d.visit(pos);
|
||||||
|
int t0 = 0, t1 = 0;
|
||||||
|
for(int i=0; i<isize(d.q); i++) {
|
||||||
|
int at = d.q[i];
|
||||||
|
if(current.taken[at] == Free) {
|
||||||
|
for(int j: neigh_indices(at)) d.visit(j);
|
||||||
|
}
|
||||||
|
else if(current.taken[at] == 0) t0++;
|
||||||
|
else if(current.taken[at] == 1) t1++;
|
||||||
|
}
|
||||||
|
for(int i=0; i<isize(d.q); i++) {
|
||||||
|
int at = d.q[i];
|
||||||
|
auto& o = current.owner[at];
|
||||||
|
if(t0 && t1) o = Unowned;
|
||||||
|
else if(t0) o = 0;
|
||||||
|
else if(t1) o = 1;
|
||||||
|
else return true; /* all free */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
string mouse_label() {
|
string mouse_label() {
|
||||||
if(!indices.count(mouseover)) return "?";
|
if(!indices.count(mouseover)) return "?";
|
||||||
return index_to_str(indices[mouseover]);
|
return index_to_str(indices[mouseover]);
|
||||||
@ -440,6 +470,9 @@ void accept_command(string s) {
|
|||||||
"labels 0..3 - show (0) no labels, (1) labels on unowned, (2) labels on empty, (3) all labels\n"
|
"labels 0..3 - show (0) no labels, (1) labels on unowned, (2) labels on empty, (3) all labels\n"
|
||||||
"ob [where] - own area as black\n"
|
"ob [where] - own area as black\n"
|
||||||
"ow [where] - own area as white\n"
|
"ow [where] - own area as white\n"
|
||||||
|
"of [where] - the area is free\n"
|
||||||
|
"oc [where] - the area is common\n"
|
||||||
|
"oauto - own automatically\n"
|
||||||
"score - view the score\n"
|
"score - view the score\n"
|
||||||
"hires - take a 1000x1000 screenshot\n"
|
"hires - take a 1000x1000 screenshot\n"
|
||||||
"restart - restart\n"
|
"restart - restart\n"
|
||||||
@ -461,8 +494,13 @@ void accept_command(string s) {
|
|||||||
if(tokens[0] == "clear" && t == 1)
|
if(tokens[0] == "clear" && t == 1)
|
||||||
clear_owner_marks();
|
clear_owner_marks();
|
||||||
|
|
||||||
if(tokens[0] == "ow" || tokens[0] == "ob")
|
if(tokens[0] == "ob") set_owner(tokens, 0);
|
||||||
set_owner(tokens, tokens[0][1] == 'w');
|
if(tokens[0] == "ow") set_owner(tokens, 1);
|
||||||
|
if(tokens[0] == "of") set_owner(tokens, 2);
|
||||||
|
if(tokens[0] == "oc") set_owner(tokens, 3);
|
||||||
|
|
||||||
|
if(tokens[0] == "oauto")
|
||||||
|
set_owner_auto();
|
||||||
|
|
||||||
if(tokens[0] == "undo") {
|
if(tokens[0] == "undo") {
|
||||||
if(history.empty())
|
if(history.empty())
|
||||||
@ -474,22 +512,24 @@ void accept_command(string s) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(tokens[0] == "score") {
|
if(tokens[0] == "score") {
|
||||||
array<int, 2> owned_by, stones;
|
array<int, 4> owned_by, stones;
|
||||||
for(int i=0; i<2; i++)
|
for(int i=0; i<2; i++)
|
||||||
owned_by[i] = stones[i] = 0;
|
owned_by[i] = stones[i] = 0;
|
||||||
|
|
||||||
for(int i=0; i<isize(ac); i++)
|
for(int i=0; i<isize(ac); i++)
|
||||||
if(current.taken[i] != Free)
|
if(current.taken[i] != Free)
|
||||||
stones[current.taken[i]]++;
|
stones[current.taken[i]]++;
|
||||||
else if(current.owner[i] != Free)
|
else owned_by[current.owner[i]]++;
|
||||||
owned_by[current.owner[i]]++;
|
|
||||||
|
|
||||||
shstream ss;
|
shstream ss;
|
||||||
println(ss, "black: ", stones[0], " stones, ", owned_by[0], " area, ", current.captures[1], " prisoners");
|
println(ss, "black: ", stones[0], " stones, ", owned_by[0], " area, ", current.captures[1], " prisoners");
|
||||||
println(ss, "white: ", stones[1], " stones, ", owned_by[1], " area, ", current.captures[0], " prisoners");
|
println(ss, "white: ", stones[1], " stones, ", owned_by[1], " area, ", current.captures[0], " prisoners");
|
||||||
|
print(ss, "board size: ", isize(ac));
|
||||||
|
if(owned_by[2]) print(ss, " free: ", owned_by[2]);
|
||||||
|
if(owned_by[3]) print(ss, " common: ", owned_by[3]);
|
||||||
|
|
||||||
go_message(ss.s);
|
go_message(ss.s);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(tokens[0] == "restart") {
|
if(tokens[0] == "restart") {
|
||||||
save_backup();
|
save_backup();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user