0

基本的なタイル エンジンで単純なスネーク ゲームを作成しようとすると、少し問題が発生します。私は C# や Windows フォームを使用したことがなく、現在学習段階にあります。ここから得た助けに感謝します。

        int[,] level = {
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                               { 0, 0, 0, 0, 0 ,0 },
                           };

現在、すべてのタイルが空であるためオフになっています。画像を追加したい場合は、0 を 1 にするだけです。私の目標は、キーボードの矢印キーで 0 を 1 にすることです。

private void tmrMov_Tick(object sender, EventArgs e)
    {

        if (_objPosition == Position.Right) 
        {

            if(_x<6 && _x>=0)
            _x += 1;

         }
        .
        .
        .
         //and so on
        .
        .
        .

        Invalidate();
    }

これで、矢印キーで 0 から 1 に切り替えようとしていますが、現在は機能しません。

        public Form1()
    {
            InitializeComponent();
            _x = rand.Next(0,5 + 1);
            _y = rand.Next(0, 5 + 1);
            _k = 1;
            level[_x, _y] = _k;
            _objPosition = Position.Right;
    }

これは私が上記の配列を呼び出す方法です...

私が間違っていることを教えてください。最終的には最初からやり直すか、別のプロジェクトに取り組む必要があることはわかっていますが、少なくとも私が完全に間違っていたわけではないことを知りたい.

読むのに長くないので、完全なプロジェクトを添付しています... http://www.mediafire.com/?hz3h2job28y9lfb

編集:スタックエクスチェンジの回答の1つがデバッグの質問のためにここに投稿することを提案したため、この質問もここに投稿されます: https://softwareengineering.stackexchange.com/questions/188285/simple-gameproblem-with-key-mapping

どちらか一方を削除してもかまいませんが、両方を削除することはできません。

前もって感謝します!

4

1 に答える 1

1

ヘビを移動するに0は、以前の位置を入力し (現在はセルの長さだけなので)、新しい位置を計算して、新しい位置を入力する必要1があります。したがって、タイマーのティック ハンドラは次のようになります。

private void tmrMov_Tick(object sender, EventArgs e)
{
    level[_x, _y] = 0;
    //...
    // other stuff to calculate new location based on Position

    level[_x, _y] = 1;

    Invalidate();
}

Paintまた、イベントに PictureBoxes を追加することは完全に間違っています。Graphicsクラスのさまざまなメソッドを使用して、ボードを描画する必要があります。やりたかったらしいけど、なんで諦めたの?

あなたのコードについては、言いたいことがたくさんあります。それらのいくつかを次に示します。

  1. ボードの幅や高さにマジック ナンバーを使用する代わりに6、ボードのサイズを変数に入れて、どこでも使用します。このようにして、ソース コード全体に影響を与えることなく (または、単一の更新を忘れて6見つけにくいバグを導入するだけで)、ボード サイズを簡単に変更できます。

  2. ファイルから毎回画像をロードするのではなく ( のコメント付きコードpanel1_Paint)、画像を一度ロードし、必要に応じてサイズを変更して、フィールドに保持します。必要なときにいつでも使用してください。これにより、パフォーマンスが劇的に向上します。

  3. Image.FromFile画像フォームファイルをロードするために使用します。

  4. スネークがボードの外に出たくないので、スネークを右に移動したい場合 (たとえば)、 をインクリメントできるの_x_x < _boardWidth-1. 私が言うとき、あなたは私が何を意味するか知っ_boardWidthていますよね?:-)

  5. Paintイベントではボード全体をペイントする必要があります。単一の細胞ではありません。Paintメソッドを呼び出すときだけでなく、フォームを描画する必要があるときはいつでもイベントが呼び出されますInvalidate

  6. という列挙がありますPosition。それは実際にあるはずDirectionです。

楽しい学習。

于 2013-02-25T07:22:02.430 に答える