C# 我可以做一个switch语句来询问bool是否等于true吗?
我正在写一个Tic-Tac-Toe游戏,想看看下面的按钮是否被点击了。(如果这是真的,就意味着你赢了。)我认为switch语句更有效,但它的红色下划线,我不明白为什么 这是我目前的代码:C# 我可以做一个switch语句来询问bool是否等于true吗?,c#,winforms,C#,Winforms,我正在写一个Tic-Tac-Toe游戏,想看看下面的按钮是否被点击了。(如果这是真的,就意味着你赢了。)我认为switch语句更有效,但它的红色下划线,我不明白为什么 这是我目前的代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Te
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;
}
}
}
我必须摆脱休息;或者我不能使用&&operator吗?老实说,我喜欢您正在尝试的操作,但是对于像布尔运算这样简单的操作(只能是真或假),您只需要一个if语句:
if(buttonisclicked1&&buttonisclicked2&&buttonisclicked3){
Console.WriteLine(“韩元”);
}
如果您希望在返回false时发生某些事情,只需添加到前面的代码:
else{
Console.WriteLine(“Lost”);//在进行滴答声游戏时,最好将得分逻辑与事件分开
您应该在表单中创建此变量:
private Button[][] _buttons = null;
然后在表单中加载
执行以下操作:
_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))
});
“我认为switch语句更有效”-比什么更有效?一个简单的if
语句?不,它不是-我强烈建议在这一点上不要过于担心效率。尽管值得关注的是“大规模”效率(例如,您使用的是O(n)还是O(n^2)可能需要处理大量数据的算法)您现在看到的是微优化。目前,我建议您编写最简单的代码。好的,您可以通过两种方式了解红色的摆动线告诉您什么:查看Visual Studio中的错误列表面板。应该有一条与红色摆动线对应的错误消息。或者只需将鼠标悬停在d上如果你不确定如何正确使用switch/case,你可能还需要查阅有关switch/case的文档和/或教程在错误消息中…顺便说一下,您当然可以使用switch语句来测试bool变量是否为true(或false)。但是这样做通常并没有真正的用处,因为基于bool变量的switch/case只不过是简单的if(myBoolVar)…else…
或if的复杂形式(!myBoolVar)…其他…
var slices = GetSlices();
if (slices.Any(s => s == "XXX"))
{
MessageBox.Show("X Won!");
}
if (slices.Any(s => s == "OOO"))
{
MessageBox.Show("O Won!");
}