finish #1
This commit is contained in:
parent
5ab2725947
commit
e7f74d98a1
@ -2,8 +2,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
GameBoard::GameBoard(pos_t w, pos_t h, const InitInfo& info)
|
GameBoard::GameBoard(pos_t w, pos_t h, const InitInfo& info)
|
||||||
: n(info.n), t(0), players(info.n + 1), w(w), h(h), board(w * h)
|
: n(info.n), t(0), players(info.n + 1), w(w), h(h), board(w * h) {
|
||||||
{
|
|
||||||
for (std::uint8_t i = 1; i <= n; ++i) {
|
for (std::uint8_t i = 1; i <= n; ++i) {
|
||||||
players[i].id = i;
|
players[i].id = i;
|
||||||
players[i].team = info.player_team[i];
|
players[i].team = info.player_team[i];
|
||||||
@ -34,7 +33,8 @@ bool GameBoard::attack(const PlayerMove &o) {
|
|||||||
auto moving_unit = o.half ? sc_tile.unit : sc_tile.unit / 2;
|
auto moving_unit = o.half ? sc_tile.unit : sc_tile.unit / 2;
|
||||||
sc_tile.unit -= moving_unit;
|
sc_tile.unit -= moving_unit;
|
||||||
auto isfriend = isTeammate(o.player, tt_tile.owner);
|
auto isfriend = isTeammate(o.player, tt_tile.owner);
|
||||||
auto delta = isfriend ? moving_unit + tt_tile.unit : moving_unit - tt_tile.unit;
|
auto delta
|
||||||
|
= isfriend ? moving_unit + tt_tile.unit : moving_unit - tt_tile.unit;
|
||||||
|
|
||||||
updatedPosition(o.x, o.y);
|
updatedPosition(o.x, o.y);
|
||||||
updatedPosition(o.ty(), o.ty());
|
updatedPosition(o.ty(), o.ty());
|
||||||
@ -73,7 +73,8 @@ void GameBoard::turnUpdate() {
|
|||||||
if (tile.owner == neutral_player)
|
if (tile.owner == neutral_player)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (tile.type == TileType::Stronghold || tile.type == TileType::Capital)
|
if (tile.type == TileType::Stronghold
|
||||||
|
|| tile.type == TileType::Capital)
|
||||||
tile.unit += 1;
|
tile.unit += 1;
|
||||||
|
|
||||||
if (tile.type == TileType::Swamp) {
|
if (tile.type == TileType::Swamp) {
|
||||||
@ -115,8 +116,11 @@ std::uint8_t GameBoard::numTeams() const {
|
|||||||
std::vector<TeamRanking> GameBoard::leaderboard() const {
|
std::vector<TeamRanking> GameBoard::leaderboard() const {
|
||||||
std::vector<TeamRanking> res(t);
|
std::vector<TeamRanking> res(t);
|
||||||
std::vector<PlayerRanking> prank(n);
|
std::vector<PlayerRanking> prank(n);
|
||||||
|
|
||||||
for (Player i = 1; i <= n; ++i)
|
for (Player i = 1; i <= n; ++i)
|
||||||
prank[i - 1].player = i;
|
prank[i - 1].player = i,
|
||||||
|
prank[i - 1].is_defeated
|
||||||
|
= defeated_players.find(i) != defeated_players.end();
|
||||||
|
|
||||||
for (Team i = 1; i <= t; ++i)
|
for (Team i = 1; i <= t; ++i)
|
||||||
res[i - 1].team = i;
|
res[i - 1].team = i;
|
||||||
@ -131,12 +135,28 @@ std::vector<TeamRanking> GameBoard::leaderboard() const {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for (auto &p : prank) {
|
for (const auto& p : prank)
|
||||||
// res[teamOf(p.player) - 1]
|
res[teamOf(p.player) - 1].players.push_back(p);
|
||||||
// TODO
|
for (auto& team : res) {
|
||||||
|
for (const auto& p : team.players) {
|
||||||
|
team.land += p.land;
|
||||||
|
team.unit += p.unit;
|
||||||
|
}
|
||||||
|
sort(team.players.begin(),
|
||||||
|
team.players.end(),
|
||||||
|
[](const PlayerRanking& a, const PlayerRanking& b) {
|
||||||
|
return a.unit != b.unit ? a.unit > b.unit
|
||||||
|
: a.player < b.player;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
sort(res.begin(),
|
||||||
|
res.end(),
|
||||||
|
[](const TeamRanking& a, const TeamRanking& b) {
|
||||||
|
return a.unit != b.unit ? a.unit > b.unit : a.team < b.team;
|
||||||
|
});
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerState::PlayerState() {
|
PlayerState::PlayerState() {
|
||||||
is_defeated = false;
|
is_defeated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user