【解決方法】メソッド内で状態を渡すにはどうすればよいですか?


こんにちは、私は戦艦ゲームを書いていて、ほぼ完成しました。 必要なものは 1 つだけです。 私はあなたのすべてのアドバイスに従い、コードを大幅に削減し、ゲームがどのように実装されるべきかを理解しました.コンピュータがランダムに船をマップに割り当てるが、実際のゲーム中にそれらをユーザーに表示しない部分で苦労しています. . たとえば、[開始]をクリックすると、コンピューターは船を (もちろんボードに表示せずに) ランダムに割り当てる必要があり、ユーザーが発砲すると、ボードは船がどこにあるかどうかを示します。 これは、船を保持することになっている各正方形に値を割り当てようとするコードのスニペットです

public int[,] RandomShip(Grid grid)
{
    enemyShipArray = new int[row, col];
    for (int i = 0; i < 1; i++)
    {
        x = rand.Next(1, 97);
        //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
        x = x + 1;
        //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
        x = x + 1;
        //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
        x = x + 1;
        //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
    }
    for (int a = 0; a < 2; a++)
        {
            x = rand.Next(1, 98);
            //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
        x = x + 1;
            //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
        x = x + 1;
            //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
    }
        for (int a = 0; a < 3; a++)
        {
            x = rand.Next(1, 99);
            //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
        x = x + 1;
            //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
    }
            for (int a = 0; a < 4; a++)
            {
                x = rand.Next(1, 100);
                //((Button)grid.Children[x]).Background = Brushes.Red;
        ((Button)grid.Children[x]).Tag = 1;
    }
            return enemyShipArray;
    }

これは別のクラス内のメソッドであることに注意してください。 コードでは、正方形に赤い背景を割り当てたいことがわかりますが、ユーザーがそれをクリックしてそこに船がある場合のみです。 これを解決するために、船を含む各正方形にタグを割り当てて、1 でマークしました。次に、[スタート]ボタンを押すと、コンピューターが船を表示せずにランダムに割り当てる必要がある関数に進みます。

private void StartButton_Click(object sender, RoutedEventArgs e)
     {
         enemyShips.RandomShip(gridEnemy);
     }

敵のグリッドをグリッドとして渡し、RandomShip 関数を実行して船をランダム化します。 今私が苦労しているのは、マークを渡す方法です

((Button)grid.Children[x]).Tag = 1;

要素をエネミーグリッドのボタンクリックが発生する関数に追加して、どの正方形がマークされていてどの正方形がマークされていないかを認識します。

private void ButtonEnemy_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
            if( (== 1)
            {
                ((Button)sender).Background = Brushes.Red;
            }
            else
            {
                ((Button)sender).Background = Brushes.Blue;
            }

}

理想的には、次のようなものを入れたいと思います

if( ((Button)grid.Children[x]).Tag == 1)

それから正方形を赤く塗りつぶし、そうでなければ青く塗りつぶします。 コンパイラに 1 に等しいタグの意味を認識させる方法はわかりませんが、ありがとうございます。

私が試したこと:

ボタンを引数としてランダムシップ関数に渡そうとしましたが、それが間違っていることはわかっていますが、これを接着する方法がわかりません。

解決策 2

作る enemyShips gridEnemy 内部で利用可能な変数 ButtonEnemy_MouseLeftButtonUp.
それを行う方法は、実際のシナリオによって異なります。

コメント

タイトルとURLをコピーしました