[英]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.