実際にじゃんけんバトルを実装していきます。
protected override void OnUpdated()
{
asd.Vector2DF pos = asd.Engine.Mouse.Position;
switch (_status)
{
case GameStatus.SelectDeffenceAction:
cycleProcessSelectDeffenceAction(pos);
break;
case GameStatus.SelectAttackAction:
cycleProcessSelectAttackAction(pos);
break;
case GameStatus.ShowActionResult:
cycleProcessShowActionResult(pos);
break;
}
if (asd.Engine.Mouse.LeftButton.ButtonState == asd.ButtonState.Push)
{
switch (_status)
{
case GameStatus.SelectDeffenceAction:
onClickMouseSelectDeffenceAction(pos);
break;
case GameStatus.SelectAttackAction:
onClickMouseSelectAttackAction(pos);
break;
case GameStatus.ShowActionResult:
onClickMouseShowActionResult(pos);
break;
}
}
}
private void cycleProcessSelectDeffenceAction(asd.Vector2DF pos)
{
if(_player == Player.Deffence)
{
_image_gu_deffence.Show();
_image_choki_deffence.Show();
_image_par_deffence.Show();
_image_gu_deffence.OnMouse(pos);
_image_choki_deffence.OnMouse(pos);
_image_par_deffence.OnMouse(pos);
}
else
{
var r = Singleton.Random;
switch(r.Next(0, 3))
{
case 0:
selectedDeffece = BattleIcon.Icon.Gu;
break;
case 1:
selectedDeffece = BattleIcon.Icon.Choki;
break;
case 2:
selectedDeffece = BattleIcon.Icon.Par;
break;
}
_status = GameStatus.SelectAttackAction;
}
}
private void cycleProcessSelectAttackAction(asd.Vector2DF pos)
{
if (_player == Player.Attack)
{
_image_gu_attack.Show();
_image_choki_attack.Show();
_image_par_attack.Show();
_image_gu_attack.OnMouse(pos);
_image_choki_attack.OnMouse(pos);
_image_par_attack.OnMouse(pos);
}
else
{
var r = Singleton.Random;
switch (r.Next(0, 3))
{
case 0:
selectedAttack = BattleIcon.Icon.Gu;
break;
case 1:
selectedAttack = BattleIcon.Icon.Choki;
break;
case 2:
selectedAttack = BattleIcon.Icon.Par;
break;
}
_status = GameStatus.ShowActionResult;
}
}
private void cycleProcessShowActionResult(asd.Vector2DF pos)
{
_attackResult.SetIcon(selectedAttack);
_attackResult.Show();
_deffenceResult.SetIcon(selectedDeffece);
_deffenceResult.Show();
}
private void onClickMouseSelectDeffenceAction(asd.Vector2DF pos)
{
if (_player == Player.Deffence)
{
if (_image_gu_deffence.IsOnMouse(pos))
{
selectedDeffece = BattleIcon.Icon.Gu;
}
else if (_image_choki_deffence.IsOnMouse(pos))
{
selectedDeffece = BattleIcon.Icon.Choki;
}
else if (_image_par_deffence.IsOnMouse(pos))
{
selectedDeffece = BattleIcon.Icon.Par;
}
_image_gu_deffence.Hide();
_image_choki_deffence.Hide();
_image_par_deffence.Hide();
_status = GameStatus.SelectAttackAction;
}
}
private void onClickMouseSelectAttackAction(asd.Vector2DF pos)
{
if (_player == Player.Attack)
{
if (_image_gu_attack.IsOnMouse(pos))
{
selectedAttack = BattleIcon.Icon.Gu;
}
else if (_image_choki_attack.IsOnMouse(pos))
{
selectedAttack = BattleIcon.Icon.Choki;
}
else if (_image_par_attack.IsOnMouse(pos))
{
selectedAttack = BattleIcon.Icon.Par;
}
_image_gu_attack.Hide();
_image_choki_attack.Hide();
_image_par_attack.Hide();
_status = GameStatus.ShowActionResult;
}
}
private void onClickMouseShowActionResult(asd.Vector2DF pos)
{
_attackResult.Hide();
_deffenceResult.Hide();
_status = GameStatus.SelectDeffenceAction;
}
シーンの状態は、
- 防御側の選択
- 攻撃側の選択
- 結果の表示
の順で遷移していきます。
防御側選択状態では、プレイヤーが防御側ならば、じゃんけんアイコンを選択します。プレイヤーが攻撃側ならば、ランダムで相手が何を選択したかを決定します。
攻撃側選択状態は、防御側選択の逆で、プレイヤーが攻撃側ならば、じゃんけんアイコンを選択、プレイヤーが防御側ならば、ランダムで相手が何を選択したかを決定します。
そして最後に攻撃側と防御側が選択したアイコンを表示し、じゃんけんの結果を表示します。
まぁ、ここまでは表示をどうするかの処理が中心になります。
次回はじゃんけんの結果を処理する実装を行います。