たぶん、これが最後の仕上げ。
まずはじゃんけんの結果を判定します。
class BattleScene : asd.Scene
{
private void onClickMouseShowActionResult(asd.Vector2DF pos)
{
var result = janken(selectedAttack, selectedDeffece);
if(result == BattleResult.win)
{
_deffencePower -= _attackPower;
if(_deffencePower <= 0)
{
Singleton.GameData.BattleResultUpdate(BattleResult.win);
var scene = new MainScene();
asd.Engine.ChangeScene(scene);
}
_deffenceParam.Text = "戦闘力:" + _deffencePower;
}
else if(result == BattleResult.lose)
{
_attackPower -= _deffencePower;
if (_attackPower <= 0)
{
Singleton.GameData.BattleResultUpdate(BattleResult.lose);
var scene = new MainScene();
asd.Engine.ChangeScene(scene);
}
_attackParam.Text = "戦闘力:" + _attackPower;
}
_attackResult.Hide();
_deffenceResult.Hide();
_status = GameStatus.SelectDeffenceAction;
}
private BattleResult janken(BattleIcon.Icon attack, BattleIcon.Icon deffence)
{
switch (attack)
{
case BattleIcon.Icon.Gu:
switch (deffence)
{
case BattleIcon.Icon.Gu:
return BattleResult.draw;
case BattleIcon.Icon.Choki:
return BattleResult.win;
case BattleIcon.Icon.Par:
return BattleResult.lose;
default:
return BattleResult.draw;
}
case BattleIcon.Icon.Choki:
switch (deffence)
{
case BattleIcon.Icon.Gu:
return BattleResult.lose;
case BattleIcon.Icon.Choki:
return BattleResult.draw;
case BattleIcon.Icon.Par:
return BattleResult.win;
default:
return BattleResult.draw;
}
case BattleIcon.Icon.Par:
switch (deffence)
{
case BattleIcon.Icon.Gu:
return BattleResult.win;
case BattleIcon.Icon.Choki:
return BattleResult.lose;
case BattleIcon.Icon.Par:
return BattleResult.draw;
default:
return BattleResult.draw;
}
default:
return BattleResult.draw;
}
}
今回のじゃんけん判定はベタな方法で実装しました。
上手い方法が思い浮かばなかった。
janken()でじゃんけんの結果を判定し、その結果を反映、勝負が決まったら、その情報をGameData.BattleResultUpdate()に反映し、MainSceneに遷移します。
class GameData
{
public void BattleResultUpdate(BattleResult result)
{
if (gameStatus == GameStatus.ActionEnemy)
{
Battle.EnemyTurnEnd(result);
}
else if (gameStatus == GameStatus.ActionPlayer)
{
Battle.MyTurnEnd(result);
gameStatus = GameStatus.ActionEnemy;
}
}
状態が敵のターンか、自分のターンかで分岐させます。
class Battle
{
public void EnemyTurnEnd(BattleResult result)
{
if(result == BattleResult.win)
{
lastAttack.CombinationCity(lastDeffece);
lastDeffece.Lose();
aliveCities.Remove(lastDeffece);
lastDeffece = null;
}
}
public void MyTurnEnd(BattleResult result)
{
if (result == BattleResult.win)
{
lastAttack.CombinationCity(lastDeffece);
lastDeffece.Lose();
aliveCities.Remove(lastDeffece);
lastDeffece.ClearPaint();
lastDeffece = null;
}
lastAttack.ClearPaint();
lastAttack = null;
cityCnt++;
if (cityCnt >= _cities.Count)
{
_cities = cityRandomReplace(aliveCities);
aliveCities = copyCity(_cities);
cityCnt = 0;
turn++;
}
}
これでデータの反映もできたはず。
あとはもう少しブラッシュアップさせて行きます。