最新ソースはこちら(gitHub)
https://github.com/takishita2nd/HokkaidoWar
早速バトル処理を作成していきます。
しかし、ただループさせるだけだと途中経過が全く見えないので、
マウスをクリックすると次の行動を実行する、という形にしたいと思います。
そして、ターンの最初には、市町村の行動順をランダムに並べ替えます。
まずは、市町村を並び替える処理を作成。
class Battle
{
private List<City> cityRandomReplace(List<City> beforeCities)
{
var r = Singleton.GetRandom();
List<City> afterCities = new List<City>();
int max = beforeCities.Count;
for (int i = 0; i < max; i++)
{
int index = r.Next(0, beforeCities.Count - 1);
afterCities.Add(beforeCities[index]);
beforeCities.RemoveAt(index);
}
return afterCities;
}
乱数でindexの値を振り、そのindexの都市を新しいListに追加して、古いリストから削除する、という処理を繰り返す事で並べ替えできます。
これを使用してマウスクリック処理を作成しいます。
class HokkaidoWar
{
public void Run()
{
_battle = new Battle(cities);
while (asd.Engine.DoEvents())
{
if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
{
_battle.NextTurn();
}
asd.Engine.Update();
}
asd.Engine.Terminate();
class Battle
{
private List<City> _cities = null;
private int turn;
private int cityCnt;
public Battle(List<City> cities)
{
turn = 1;
cityCnt = 0;
_cities = new List<City>();
foreach(var c in cities)
{
_cities.Add(c);
}
_cities = cityRandomReplace(_cities);
}
public void NextTurn()
{
cityCnt++;
if(cityCnt >= _cities.Count)
{
_cities = cityRandomReplace(_cities);
cityCnt = 0;
turn++;
}
var info = Singleton.GetGameProcessInfomation();
info.ShowText(_cities[cityCnt].GetPosition(), string.Format("{0} turn {1} / {2} {3}", turn, cityCnt, _cities.Count, _cities[cityCnt].Name));
}
マウスをクリックする度に、NextTurn()が実行され、順番が回ってきた市町村の名前を表示します。
そして、一巡したらターンを更新し、市町村を並べ替えて処理を続けます。
実行結果はこうなりました。