1

私はC#を初めて使用しますが、Javaの経験が豊富なので、C#はそれに基づいてかなり理解しやすいと言われています。

これまでのところです。現時点では、演習の一環として簡単なTicTacToeを作成したいと思います。しかし、私がやりたいのは、ボックスがすでにクリックされているかどうかを確認できるように、参照できるクリック可能な正方形を描画することです。

現在、Visual StudioExpress2012を使用しています。デスクトップ用のWindowsフォームアプリケーションを作成しています。

私は解決策を探しましたが、これを行うものを見つけることができないようです。

どうすればこれを行うことができますか?

4

5 に答える 5

3
internal sealed class Box : Control
{
    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.DrawRectangle(Pens.Black, new Rectangle(Point.Empty, new Size(Width - 1, Height - 1)));
    }

    protected override void OnClick(EventArgs e)
    {
        MessageBox.Show("You Clicked The Box!");
    }
}

から派生するクラスを作成しますControlOnPaintここから、すべての描画ロジックを実行できるメソッドを含む、多数の仮想メンバー全体をオーバーライドできます。IntelliSense(DrawRectangle、Draw Lineなど)の助けを借りて、すべて非常に直感的です。

必要に応じて、ここで行ったようにオーバーライドできますが、それ以外の場合は、標準のコントロールと同じようOnClickにコントロールのイベントをサブスクライブできます。Click

ContainerControlPanelまたはGroupBoxコントロールと同様に動作する「グリッド」から派生することもできます。

これが私があなたを始めるためにちょうどまとめた簡単な例です。境界線はいくつかの解像度で少しバグがあります、私はそれを私のひどい数学のスキルに任せます。

internal sealed class GameGrid : ContainerControl
{
    protected override void OnCreateControl()
    {
        for (int y = 0; y < 3; y++)
        {
            for (int x = 0; x < 3; x++)
            {
                GameButton button = new GameButton
                {
                    Width = Width/3,
                    Height = Height/3,
                };

                button.Location = new Point(x*button.Width++, y*button.Height++);
                Controls.Add(button);

                button.Click += button_Click;
            }
        }
    }

    static void button_Click(object sender, EventArgs e)
    {
        GameButton gameButton = (GameButton)sender;
        gameButton.CircleCheck = true;
    }

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
        e.Graphics.DrawRectangle(Pens.Black, new Rectangle(ClientRectangle.Location, new Size(Width - 1, Height - 1)));
    }
}

internal sealed class GameButton : Control
{
    private bool _cricleCheck;
    public bool CircleCheck 
    { 
        get
        {
            return _cricleCheck;
        } 
        set 
        {
            _cricleCheck = value;
            Invalidate();
        } 
    }

    private readonly Pen circlePen = new Pen(Brushes.Black, 2.0f);

    protected override void OnPaint(PaintEventArgs e)
    {
        e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
        e.Graphics.DrawRectangle(Pens.Black, new Rectangle(ClientRectangle.Location, new Size(Width - 1, Height - 1)));

        if (CircleCheck)
        {
            e.Graphics.DrawEllipse(circlePen, new Rectangle(ClientRectangle.Location.X + 10, ClientRectangle.Location.Y + 10, Width - 30, Height - 30));
        }
    }
}
于 2013-03-11T09:18:19.770 に答える
0

最も一般的なクリック可能な正方形はボタンです。

ボタンが現在のゲーム状態でクリック可能であり、クリックされた場合にそこに表示されるアイコンは、バックグラウンドロジックの仕事のように聞こえます。

于 2013-03-11T09:11:57.563 に答える
0

これを試して:

  • 新しいフォームを作成する
  • Tic Tac Toeボードをレンダリングするには、フォーム内にPictureBoxコントロールをドロップします
  • Paintイベントを処理して、グラフィックレンダリングを実行します
  • MouseClickイベントを処理して、ユーザーがボード内をクリックしたかどうかを検出し、イベント引数を使用して、ユーザーがボードの9つの正方形のどれをクリックしたかを判別します。

お役に立てれば。

于 2013-03-11T09:12:04.483 に答える
0

私は2日前に同様の運動をしました、

このチュートリアルを確認するだけで、十分だと思います。

http://www.codeproject.com/Articles/2400/Tic-Tac-Toe-in-C

また、Squareの場合は、ボタンを使用するか、このチュートリアルのようにPictureBoxを使用できます(ただし、c#ではなくvb.netを使用しましたが、翻訳は簡単です)。

http://vbprogramming.8k.com/tutorials/tic-tac-toe.htm

于 2013-03-11T09:16:02.563 に答える
0

最も簡単な解決策は、背景色または画像のある単純なボタンを使用することだと思います。現在プレイしているユーザーと変更のための変数を持っている

button.Text

クリックイベントで。最初にすべてのボタンテキストを「」に設定します。これにより、ボタンがクリックされたかどうかを確認できます。

if (button.Text!="") 
     //it was already clicked
于 2013-03-11T09:18:10.643 に答える