PC向けの人気ゲーム「 Ruzzle 」をやってみました参照:
私は非常にばかげたエラーで立ち往生していると思いますが、何らかの理由でプロパティが機能していないようです!
という名前のboolプロパティを持つ「check」というクラスがありますUsed
。true に設定すると、背景が白からオレンジに変わります。これは、次の方法で実現されます。
bool _used;
public bool Used
{
get { return _used; }
set { _used = value; Invalidate(); }
}
void Check_Paint(object sender, PaintEventArgs e)
{
Graphics area = e.Graphics;
if (_used==false)
{
area.FillRectangle(Brushes.White, 0, 0, Width - 1, Height - 1);
...
}
else
{
area.FillRectangle(Brushes.Orange, 0, 0, Width - 1, Height - 1);
...
}
}
mouseClick
クラスで定義するイベントに割り当てましたRuzzle
。このクラスRuzzle
は、基本的に の 2 次元配列であるゲームを処理しCheck
ます。
public event EventHandler selected;
//in the constructor I've put this
this.MouseClick += new MouseEventHandler(Check_MouseClick);
そして最後に
void Check_MouseClick(object sender, MouseEventArgs e)
{
if (selected != null)
{
selected(this, e);
}
Invalidate();
}
クラスでは、次のようにしてオブジェクトRuzzle
の bool プロパティを変更しようとしています:Check
public Ruzzle(Control father)
{
myGame = new Check[4, 4];
for (int i = 0; i < 4; i++)
{
for(int j=0;j<4;j++)
{
myGame[i, j] = new Check(50, father,i,j);
myGame[i, j].Location = new Point((i * 50), (j * 50));
father.Controls.Add(myGame[i, j]);
myGame[i, j].selected += new EventHandler(Ruzzle_selected);
}
}
}
void Ruzzle_selected(object sender, EventArgs e)
{
int r = (sender as Check).Row;
int c = (sender as Check).Column;
myGame[r, c].Used = true;
}
MessageBox.Show を実行すると、正しい値が得られるため、プロパティとプロパティは正常に機能していますRow
。ただし、クラスで Paint メソッドを実行すると、ブール値は変更されません。Column
Check
Used
私は何を間違っていますか?