コード例 #1
0
ファイル: ai.go プロジェクト: nickdavies/line_tower_wars
func RunAttackDefenceRatioAI(control game.PlayerControls, attackPercent float32, graceTime int64) error {
	money := control.GetBalance()
	entities := control.GetEntityFactory()

	tower, err := entities.GetTower("basic_tower")
	if err != nil {
		return err
	}

	unit, err := entities.GetUnit("unit_1")
	if err != nil {
		return err
	}

	tb := towerBuilder{
		row:       stage.Spawn_Size,
		col:       -1,
		assending: true,
	}

	var total_spend int64
	var unit_spend int64

	var elapsed int64 = -1
	var at_end = false
	for {
		delta, running := control.Tick()
		if !running {
			return nil
		}
		elapsed += delta

		if elapsed < graceTime {
			continue
		}

		for {
			if tb.row == stage.Spawn_Size || float32(unit_spend)/float32(total_spend) > attackPercent && !at_end {
				if tower.Cost > money.Get() {
					break
				}

				err := tb.Build(control, "basic_tower")
				if err == AtEndErr {
					at_end = true
				} else if err != nil {
					panic(err)
				}

				total_spend += int64(tower.Cost)
			} else {
				if unit.Cost > money.Get() {
					break
				}

				err := control.BuyUnit("unit_1")
				if err != nil {
					panic(err)
				}

				total_spend += int64(unit.Cost)
				unit_spend += int64(unit.Cost)
			}
		}
		if !at_end && tower.Cost < money.Get() {
			err := tb.Build(control, "basic_tower")
			if err == AtEndErr {
				at_end = true
			} else if err != nil {
				panic(err)
			}
		}

	}
}