目的
1つのボタン(機能を割り当てる対象であれば何でもよい)に複数の機能を割り当てることの出来るような柔軟性を持たせるためにはどのように実装すればよいかを知る。
要求仕様
ボタンA,B,Cがある時に、ユーザーはそれぞれのボタンにキック、パンチ、ジャンプの機能を自由に割り当てる、実行できること。
完成動作
実現方法
Commandクラスを仮想クラスとして、Jump,Punch,Kickそれぞれのクラスが継承し、独自のメソッドを実装しコマンド動作を実現します。
ボタンA,B,Cにはユーザーが指定したコマンドをAssignButtonCommand()で割り当てます。
ButtonStringでどのボタンに、CommadStringで何のコマンドを割り当てるか指定します。
InputHandler.cs
public void AssignButtonCommand(string ButtonString, string CommadString)
{
//C#の参照はこれでよいのか良く知らない
ref Command Button = ref GetButtonInstance(ButtonString);
if (IsKick(CommadString))
{
Button = new KickCommand();
}
else if (IsJump(CommadString))
{
Button = new JumpCommand();
}
else if (IsPanch(CommadString))
{
Button = new PunchCommand();
}
else
{
//TODO デフォルト割り当て 各ボタンのデフォルトがセットされるようにする
Button = new KickCommand();
}
}
実行ボタンが押されると、実行コマンドに選択されているコマンドのインスタンスが取得され、対応するコマンドが実行されます。
Form1.cs
//実行
private void checkBox13_CheckedChanged(object sender, EventArgs e)
{
Command command = GetActiveButtonCommand();
label8.Text = command.Execute();
}
C#は普段使わないので、文法的に間違っている可能性があるので、コアの考え方だけ
Sample.cpp
class Sample
{
//Button_Aにコマンドを割り当てる処理
//Button_Bにコマンドを割り当てる処理
//実行
void func()
{
if (//ボタンAが押されたら)
{
Button_A.execute();
}
else if (//ボタンBが押されたら)
{
Button_B.execute();
}
else { };
}
}