前回までの状況はこちら。
最新ソースはこちら(gitHub)
https://github.com/takishita2nd/HokkaidoWar
今回はバトルを仕掛ける市町村を選択する処理を実装します。
自分のターンが回ってきた市町村から、隣接する市町村をランダムで選択し、攻撃を仕掛ける、という感じにしたいと思います。
ただし、何もしない(攻撃を仕掛けない)ケースもあるものとします。
さらに、攻撃側の市町村と防御側の市町村が分かるように色分けしましょうか。
class City
{
public void PaintAttackColor()
{
var color = new asd.Color(255, 0, 0);
foreach(var m in _maps)
{
m.SetColor(color);
}
}
public void PaintDeffenceColor()
{
var color = new asd.Color(0, 0, 255);
foreach (var m in _maps)
{
m.SetColor(color);
}
}
public void ClearPaint()
{
foreach (var m in _maps)
{
m.SetColor(_color);
}
}
class Battle
{
public void NextTurn()
{
if(prevAttack != null)
{
prevAttack.ClearPaint();
}
if(prevDeffece != null)
{
prevDeffece.ClearPaint();
}
var targets = _cities[cityCnt].GetLinkedCities();
var r = Singleton.GetRandom();
int targetIdx = r.Next(0, targets.Count + 1);
prevAttack = _cities[cityCnt];
prevAttack.PaintAttackColor();
var info = Singleton.GetGameProcessInfomation();
if(targetIdx >= targets.Count)
{
info.ShowText(prevAttack.GetPosition(), string.Format("{0} turn {1} / {2} {3}",
turn, cityCnt + 1, _cities.Count, prevAttack.Name));
}
else
{
prevDeffece = targets[targetIdx];
prevDeffece.PaintDeffenceColor();
info.ShowText(prevAttack.GetPosition(), string.Format("{0} turn {1} / {2} {3}\r\ntarget {4}",
turn, cityCnt + 1, _cities.Count, prevAttack.Name, prevDeffece.Name));
}
cityCnt++;
if(cityCnt >= _cities.Count)
{
_cities = cityRandomReplace(_cities);
cityCnt = 0;
turn++;
}
}
隣接する都市を取得する処理は今までに作成しているので、メソッド1つで取り出せます。
その中から乱数で1つ都市を選択します。
ただし、何もしないターンもあるので、乱数の範囲を大きめにとって、配列より大きければ、何もしない、と扱います。
「【北海道大戦】ランダムで隣接する都市を選択する」への1件のフィードバック