这是一个tic tac toe游戏。我需要帮助制作一个检查语句,看看所有控件的文本是否都是非空白的,如果是,你有一个平局(如果有人赢了之前的代码就会发现)。你能用我的代码给我一个很好的例子。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
namespace MyGame
{
public class Result1
{
static private int[,] Winners = new int[,]
{
// main gameplay Ex: if x is on 0,1,2 x is the winner
{0,1,2},
{3,4,5},
{6,7,8},
{0,3,6},
{1,4,7},
{2,5,8},
{0,4,8},
{2,4,6},
};
static public bool CheckWinner(Button[] myControls)
{
//bolean statement to check for the winner
bool gameOver = false;
for (int i = 0; i < 8; i++)
{
int a = Winners[i, 0];
int b = Winners[i, 1];
int c = Winners[i, 2];
Button b1 = myControls[a], b2 = myControls[b], b3 = myControls[c];
if (b1.Text == "" || b2.Text == "" || b3.Text == "")
continue;
if (b1.Text == b2.Text && b2.Text == b3.Text)
{
b1.BackColor = b2.BackColor = b3.BackColor = Color.LightCoral;
b1.Font = b2.Font = b3.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Italic & System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
gameOver = true;
xWinnerForm xWinnerForm = new xWinnerForm();
xWinnerForm.ShowDialog(); //only works with show not showDialog method gets overloaded (b1.Text + " is the Winner"); to get around this I added and image showing the last player
}
}
return gameOver;
}
}
}
答案 0 :(得分:0)
看起来所有控件都在myControls
数组中。您可以使用LINQ轻松查询它们:
if (myControls.All(c => c.Text != "") {
// Draw
}
答案 1 :(得分:0)
观察您已经拥有将检查空白区域的代码,并且在所有情况下,如果找到空白区域,则不会有抽奖。如果你遍历所有可能的空间并且没有找到胜利者或空的空间,那么它显然是一个平局。
static public bool CheckWinner(Button[] myControls)
{
//bolean statement to check for the winner
bool gameOver = false;
bool foundEmpty = false;
for (int i = 0; i < 8; i++)
{
int a = Winners[i, 0];
int b = Winners[i, 1];
int c = Winners[i, 2];
Button b1 = myControls[a], b2 = myControls[b], b3 = myControls[c];
if (b1.Text == "" || b2.Text == "" || b3.Text == "")
{
foundEmpty = true;
continue;
}
if (b1.Text == b2.Text && b2.Text == b3.Text)
{
b1.BackColor = b2.BackColor = b3.BackColor = Color.LightCoral;
b1.Font = b2.Font = b3.Font = new System.Drawing.Font("Microsoft Sans Serif", 32F, System.Drawing.FontStyle.Italic & System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));
gameOver = true;
xWinnerForm xWinnerForm = new xWinnerForm();
xWinnerForm.ShowDialog(); //only works with show not showDialog method gets overloaded (b1.Text + " is the Winner"); to get around this I added and image showing the last player
}
}
if (!gameOver && !foundEmpty)
{
// must be a draw
gameOver = true;
}
return gameOver;
}