-7

私は絞首刑執行人ゲームを作っています。コードのこの部分は、新しいゲームのボタンの背後にあります。ユーザーが新しいゲームを選択するたびに、ユーザーが推測できる新しい単語をゲームにロードする必要があります。私の問題は、コードをループに入れる必要があることです。たとえば、if/else ステートメントのいずれも真でない場合は、ステートメントが真になるまで別の乱数を選択します...

私はそれが理にかなっていることを願っています =) これまでの私のコードは次のとおりです。

namespace HangMan
{
public partial class Form1 : Form
{
    int RW;
    string previous;

    public Form1()
    {
        InitializeComponent();

    }



    private void Form1_Load(object sender, EventArgs e)
    {
        foreach (TextBox textBox in addTextBox())
        {
            textBox.Visible = false;
            textBox.Text = "";
        }
    }

    private static void LoadImages()
    {
        Image newImageIntro = Image.FromFile("HangmanIntro.jpg");
        Image newImage1 = Image.FromFile("1.jpg");
        Image newImage2 = Image.FromFile("2.jpg");
        Image newImage3 = Image.FromFile("3.jpg");
        Image newImage4 = Image.FromFile("4.jpg");
        Image newImage5 = Image.FromFile("5.jpg");
        Image newImage6 = Image.FromFile("6.jpg");
        Image newImage7 = Image.FromFile("7.jpg");
        Image newImage8 = Image.FromFile("8.jpg");
        Image newImage9 = Image.FromFile("9.jpg");
    }

    private void txtEnText_TextChanged(object sender, EventArgs e)
    {

    }

    private void txtEnText_Enter(object sender, EventArgs e)
    {

    }

public List<TextBox> addTextBox()
    {
        List<TextBox> tBox = new List<TextBox>();

        tBox.Add(textBox1);
        tBox.Add(textBox2);
        tBox.Add(textBox3);
        tBox.Add(textBox4);
        tBox.Add(textBox5);
        tBox.Add(textBox6);
        tBox.Add(textBox7);
        tBox.Add(textBox8);
        tBox.Add(textBox9);
        tBox.Add(textBox10);

        return tBox;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Random rW = new Random();

        foreach (TextBox textBox in addTextBox())
        {
            textBox.Visible = false;
        }


        RW = rW.Next(1, 4);

        if (RW == 1 & previous != "1" ) //Cat
        {
            textBox1.Visible = true;
            textBox2.Visible = true;
            textBox3.Visible = true;
            previous = "1";


        }
        else if (RW == 2 & previous != "2" ) //Elephant
        {
            textBox1.Visible = true;
            textBox2.Visible = true;
            textBox3.Visible = true;
            textBox4.Visible = true;
            textBox5.Visible = true;
            textBox6.Visible = true;
            textBox7.Visible = true;
            textBox8.Visible = true;
            previous = "2";
        }
        else if (RW == 3 & previous != "3") //Giraffe
        {
            textBox1.Visible = true;
            textBox2.Visible = true;
            textBox3.Visible = true;
            textBox4.Visible = true;
            textBox5.Visible = true;
            textBox6.Visible = true;
            textBox7.Visible = true;
            previous = "3";
        }
        else if (RW == 4 & previous != "4") //Monkey
        {
            textBox1.Visible = true;
            textBox2.Visible = true;
            textBox3.Visible = true;
            textBox4.Visible = true;
            textBox5.Visible = true;
            textBox6.Visible = true;
            previous = "4";
        }
        else
        {
        }



    }
}

}

4

2 に答える 2

2

チェックをループする代わりに、好きな乱数が得られるまでループしてみてください。

これは、そのようなことを行う方法に関するいくつかの擬似コードです。

//while the next random number is not the same as the previous
    //Generate a new random number

好きな乱数を取得したら、それらの ifs で前の数を確認する必要はありません。

ここでコードを読みやすくするため、switch ステートメントのドキュメントを参照することもできます。

于 2013-01-28T21:17:05.867 に答える
1

これをコードの周りに置きます:

while(true)
{
// CODE
break;
}

そして部品の内側else {}

continue;

編集:LINQを使用することもできます。

while(Controls.OfType<TextBox>().All(t => !t.Visible))

ループ内で可視性が変化するボックスのみがある場合。

于 2013-01-28T21:10:01.577 に答える