我正在制作一款小型游戏,就像Reversi / Othello游戏一样,我设法用按钮创建了一个2x3板。
按钮改变了你点击它们的颜色,但是我无法检测到两种黑色之间是否有白色,如果是这样,那么将白色变成黑色......我希望这是有意义的。按钮位于2D阵列中。任何可以帮助我这样做的建议都会非常感激。
图片:
这是我的代码:
![namespace reversitest
{
public partial class Form1 : Form
{
private Button\[,\] squares;
public Form1()
{
InitializeComponent();
squares = new Button\[3, 2\];
squares = new Button\[,\] {{button1, button2, button3},
{button4, button5, button6,}};
}
private void Form1_Load(object sender, EventArgs e)
{
foreach (Button sqrr in squares)
{
sqrr.Click += new System.EventHandler(this.DrawCharacter);
}
}
int _turn = 0;
private void DrawCharacter(object sender, EventArgs e)
{
Button sqrr = (Button)sender;
int col = 0;
if (sqrr.BackColor.Equals(Color.Black) || sqrr.BackColor.Equals(Color.White))
{
MessageBox.Show("Move Not Allowed!");
}
else
{
for ( int i = 0; i < squares.GetLongLength(1); ++i)
{
// check othere squares and change color
if (i < 2)
{
for (int f = 0; f < 3; ++f)
{
var ss = squares\[i, f\];
if (ss.BackColor.Equals(Color.Black))
{
MessageBox.Show("we have a black");
//ss = squares\[i, f+1\];
ss.BackColor = Color.Black;
}
else
{
MessageBox.Show("no black");
}
}
}
if (_turn == 0)
{
_turn = 1;
sqrr.BackColor = Color.Black;
}
else
{
_turn = 0;
sqrr.BackColor = Color.White;
}
}
}
}
}
}
答案 0 :(得分:2)
首先使用数组索引命名按钮。它可以帮助您找到按钮 例如根据你的图片button1名称将是btn_1_1。
然后在按钮点击事件中首先获取按钮名称,然后识别定位的按钮。
Button b = sender as Button;
string[] btnData = b.Name.Split('_');
int x = int.Parse(btnData[1]);
int y = int.Parse(btnData[2]);
//check for possible combinations
int top = y - 2;
int botton = y + 2;
int left = x - 2;
int right = x + 2;
if (top >= 0 && squares[top, y].Background == Color.Black)
{
squares[top+1, y].Background = Color.Black;
}
...
...
继续那样。如果您需要更多细节,请随意询问。
答案 1 :(得分:1)
最终答案
//check for possible combinations
int top = x - 2;
int botton = x + 2;
int left = y - 2;
int right = y + 2;
if (top >= 0 && squares[top, y].BackColor == Color.Black)
{
squares[top + 1, y].BackColor = Color.Black;
}
else if (left >= 0 && squares[x, left].BackColor == Color.Black)
{
squares[x, left + 1].BackColor = Color.Black;
}
else if (left >= 0 && squares[x, left].BackColor == Color.Black)
{
squares[x, left + 1].BackColor = Color.Black;
}
稍后将延伸至8x8电路板
答案 2 :(得分:0)
你需要优雅吗?一种蛮力方法:您可以检查8个不同方向的碎片,使它们对齐。例如,你从黑色片开始。在一个方向检查下一块。如果它是白色的,继续前进并记下白色的位置,以便稍后将其更改为黑色。当你最终击中黑色部分时,将所有存储的位置更改为黑色并继续向下一个方向并重复该过程,直到完成所有8个方向。