1

私は C# プログラミングが初めてで、グラフィックを使ってコネクト 4ゲームを作成しています。円のあるグリッドがあります。私がする必要があるのは、ユーザーが特定の列をクリックしたときにチップが下に移動するのを確認することです。タイマーか何かを使う必要がありますか?または、ループを実行して、毎回小さい yCoordinate を指定して円を下に移動しますか?

また、この円がグリッドに重ならないようにする方法はありますか? のように、グリッドの後ろに移動しているように見せることはできますか?

これは私がこれまでに行ったことです...

    private int columnPosition = 0;
    private int xCoordinate;
    private int yCoordinate;

    public Form1()
    {
        InitializeComponent();
    }

    private void panel1_Paint(object sender, PaintEventArgs e)
    {

        Graphics g = grid.CreateGraphics();
        Pen pen = new Pen(Color.White, 1);
        Pen pen2 = new Pen(Color.Black, 4);

        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 6; j++)
            {
                g.DrawEllipse(pen2, new System.Drawing.Rectangle((i * 70) + 20, (j * 60) + 10, 50, 50));
                g.FillEllipse(pen.Brush, new System.Drawing.Rectangle((i *70) + 20, (j * 60) + 10, 50, 50));



            }
        }
    }

    private void panel2_Paint(object sender, PaintEventArgs e)
    {
        Graphics g = panel2.CreateGraphics();
        Pen pen = new Pen(Color.Red, 5);
        Pen pen2 = new Pen(Color.Black, 3);

        if (columnPosition != -1)
        {
            g.DrawEllipse(pen2, new System.Drawing.Rectangle(columnPosition * 35 - 15, 0, 50, 50));
            g.FillEllipse(pen.Brush, new System.Drawing.Rectangle(columnPosition * 35 - 15, 0, 50, 50));

        }

    }

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        columnPosition = e.X / 35;
        Console.WriteLine(e.X);
        panel2.Refresh();
    }

    private void panel1_MouseLeave(object sender, EventArgs e)
    {
        columnPosition = -1;
        panel2.Refresh();
    }

    private void panel1_MouseClick(object sender, EventArgs e) 
    {
          ///// THIS IS WHERE I AM STUCK
    }

}

申し訳ありませんが、グリッドの画像をアップロードしたかったのですが、私は新しいユーザーなのでできません -.- !!

助けてくれてありがとう:)

4

1 に答える 1

0

タイマーを使用することもできますが、アニメーション全体を通して各円を追跡する必要もあります。アニメーションの実行中にユーザーが別の列をクリックするとどうなるでしょうか? 同じタイマーを再利用するのではなく、別のタイマーが必要です。

タイマーの欠点の1つは、タイマーを頻繁にオフにしない限り、円がスムーズに流れないことですが、経過した時間に応じて適切な量を移動するという問題があります(コンピューターがダウンしている場合はどうなりますか)負荷が高く、すぐにタイマーを処理できませんか?)。また、WinForms API は高いリフレッシュ レートを処理するようには設計されていません (この目的のために DirectX などの他のライブラリが開発されました)。

アニメーションを持つほとんどのゲームは、これらすべてを処理する別の方法を使用します。基本的に、アプリケーションは 1 つの大きな while(true) ループになります。文字通りではないかもしれませんwhile(true)が、ゲームが実行されている限り、ループは繰り返され続けるという考え方です。ループの反復ごとに、ゲームを描画します。次にループが繰り返されるときに、経過した時間を計算し、それを使用して各スプライト (グラフィック) がどれだけ移動する必要があるかを判断し、それに応じてそれらを描画します。これは、実際のアニメーションの仕組み (劇場での映画など) に非常によく似ています。人間の目には動画のように見えますが、実際には高速 (通常は 1 秒間に 30 ~ 60 回) で更新される一連の静止画像です。

私はプロのゲーム開発者ではありません。自分が「一番の趣味」だと思うかどうかさえ定かではありません。現代のゲーム プログラミングは、私が説明したものよりもはるかに進化していると確信していますが、基本的な概念はすべてそこにあります。ゲーム以外の開発者にゲーム開発を教えることを目的とした本 (またはオンラインで優れたチュートリアルを見つける) を手に入れることをお勧めします (初心者向けガイド)。

于 2012-11-26T22:30:29.377 に答える