簡體   English   中英

我可以做出switch語句來詢問布爾值是否等於true嗎?

[英]Can I make a switch statement to ask if a bool equals to true?

我正在寫一個Tic Tac Toe游戲,想要檢查是否單擊了以下按鈕。 (如果為true,則表示您已經贏了。)我認為switch語句對此更有效,但是紅色標記了下划線,我不明白為什么。

這是我當前的代碼:

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Tic_tac_toe2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        bool buttonisclicked = false;
        bool buttonisclicked1 = false;
        bool buttonisclicked2 = false;
        bool buttonisclicked3 = false;

        public void button1_Click(object sender, EventArgs e)
        {
            Button clickedButton1 = (Button)sender;
            clickedButton1.Text = "X";

            if (clickedButton1.Text == "X")
            {

                buttonisclicked1 = true;
            }
        }

        public void button2_Click(object sender, EventArgs e)
        {
            Button clickedButton2 = (Button)sender;
            clickedButton2.Text = "X";

            if (clickedButton2.Text == "X")
            {

                buttonisclicked2 = true;
            }
        }

        public void button3_Click(object sender, EventArgs e)
        {
            Button clickedButton3 = (Button)sender;
            clickedButton3.Text = "X";

            if (clickedButton3.Text == "X")
            {

                buttonisclicked3 = true;
            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button5_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button6_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button7_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button8_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }
        }

        private void button9_Click(object sender, EventArgs e)
        {
            Button clickedButton = (Button)sender;
            clickedButton.Text = "X";

            if (clickedButton.Text == "X")
            {

                buttonisclicked = true;
            }

            void Win()
            {
                switch (buttonisclicked)
                {
                    case bool buttonisclicked1 && buttonisclicked2 && buttonisclicked3 = true:

                        Console.WriteLine("Won");
                        break;
                }


            }
        }

我必須擺脫休息嗎? 還是不能使用&&運算符?

老實說,我喜歡您要嘗試執行的操作,但是對於布爾值(只能為true或false)這樣的簡單操作,僅需要if語句

if (buttonisclicked1 && buttonisclicked2 && buttonisclicked3) {
    Console.WriteLine("Won");
}

如果希望返回的結果為false,則只需添加到前面的代碼中即可:

else {
    Console.WriteLine("Lost"); // <-- Replace this with whatever you want
}

祝您項目順利! 希望這會有所幫助。

在做a腳趾游戲時,最好將記分邏輯與事件分開。

您應該在表單中創建此變量:

    private Button[][] _buttons = null;

然后在Form_Load執行以下操作:

        _buttons = new []
        {
            new [] { button1, button2, button3 },
            new [] { button4, button5, button6 },
            new [] { button7, button8, button9 },
        };

現在,您可以創建一個方法,該方法返回一個字符串列表,該字符串在水平,垂直和對角線上對網格進行切片:

    private IEnumerable<string> GetSlices() =>
        Enumerable
            .Range(0, 3)
            .SelectMany(n => new[]
            {
                String.Join("", Enumerable.Range(0, 3).Select(m => _buttons[m][n].Text)),
                String.Join("", Enumerable.Range(0, 3).Select(m => _buttons[n][m].Text))
            })
            .Concat(new[]
            {
                String.Join("", Enumerable.Range(0, 3).Select(x => _buttons[x][x].Text)),
                String.Join("", Enumerable.Range(0, 3).Select(x => _buttons[x][2 - x].Text))
            });

然后,每當您更新按鈕上的文本時,您都可以算出誰贏了,就像這樣:

        var slices = GetSlices();

        if (slices.Any(s => s == "XXX"))
        {
            MessageBox.Show("X Won!");
        }

        if (slices.Any(s => s == "OOO"))
        {
            MessageBox.Show("O Won!");
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM