mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-21 09:20:47 +00:00
53 lines
1.3 KiB
TypeScript
53 lines
1.3 KiB
TypeScript
import {Cell, Execution, MutableGame, MutablePlayer, PlayerID, PlayerInfo} from "../Game"
|
|
import {PseudoRandom} from "../PseudoRandom"
|
|
import {AttackExecution} from "./AttackExecution";
|
|
|
|
export class BotExecution implements Execution {
|
|
|
|
private active = true
|
|
private random: PseudoRandom;
|
|
private attackRate: number
|
|
private gs: MutableGame
|
|
|
|
constructor(private bot: MutablePlayer) {
|
|
|
|
this.random = new PseudoRandom(bot.id())
|
|
this.attackRate = this.random.nextInt(50, 200)
|
|
}
|
|
|
|
init(gs: MutableGame, ticks: number) {
|
|
this.gs = gs
|
|
}
|
|
|
|
tick(ticks: number) {
|
|
if (!this.bot.isAlive()) {
|
|
this.active = false
|
|
return
|
|
}
|
|
|
|
|
|
if (ticks % this.attackRate == 0) {
|
|
const ns = this.bot.neighbors()
|
|
if (ns.length == 0) {
|
|
return
|
|
}
|
|
|
|
const toAttack = ns[this.random.nextInt(0, ns.length)]
|
|
|
|
this.gs.addExecution(new AttackExecution(
|
|
this.bot.troops() / 5,
|
|
this.bot.id(),
|
|
toAttack.isPlayer() ? toAttack.id() : null,
|
|
null
|
|
))
|
|
}
|
|
}
|
|
|
|
owner(): MutablePlayer {
|
|
return this.bot
|
|
}
|
|
|
|
isActive(): boolean {
|
|
return this.active
|
|
}
|
|
} |