请教请教
一个简单的五子棋:public partial class Window1 : Window
{
RadialGradientBrush radia1 = new RadialGradientBrush();
RadialGradientBrush radia2 = new RadialGradientBrush();
RadialGradientBrush radia3 = new RadialGradientBrush();
GradientStop a1 = new GradientStop();
GradientStop a2 = new GradientStop();
GradientStop a3 = new GradientStop();
//二维数组棋盘
int[,] pan = new int[16, 16];
//单双数
private int chushi = 1;
//记录个数
private int hei = 0;
private int bai = 0;
// 记录悔棋次数
private int hui = 1;
public Window1()
{
InitializeComponent();
}
private void canvas1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Point mouse = e.GetPosition(canvas1);
int xzhou = Convert.ToInt32(mouse.X);
int yzhou = Convert.ToInt32(mouse.Y);
xzhou = xzhou / 30;
yzhou = yzhou / 30;
if (xzhou <= 16 && xzhou >= 0 && yzhou >= 0 && yzhou <= 16)
{
Draw(xzhou, yzhou);
}
else
{
MessageBox.Show("无效位置", "五子棋");
}
}
public void Draw(int x, int y)
{
int a1 = x;
int a2 = y;
if (pan[a1, a2] == 0)
{
if (chushi % 2 == 1)
{
DrawHei(a1, a2);
pan[a1, a2] = 1;
hei = a1;
bai = a2;
panduan1(a1, a2);
}
else if (chushi % 2 == 0)
{
DrawBai(a1, a2);
pan[a1, a2] = 2;
hei = a1;
bai = a2;
panduan2(a1, a2);
}
chushi++;
}
else
{
MessageBox.Show("不能重复下棋", "五子棋", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
public void DrawHei(int b1, int b2)
{
Ellipse newellipse = new Ellipse();
a1.Color = Colors.Black;
radia1.GradientStops.Add(a1);
newellipse.Fill = radia1;
newellipse.Width = 30;
newellipse.Height = 30;
Canvas.SetTop(newellipse, b2 * 30);
Canvas.SetLeft(newellipse, b1 * 30);
canvas1.Children.Add(newellipse);
}
public void DrawBai(int c1, int c2)
{
Ellipse newellipse = new Ellipse();
a2.Color = Colors.White;
radia2.GradientStops.Add(a2);
newellipse.Fill = radia2;
newellipse.Width = 30;
newellipse.Height = 30;
Canvas.SetTop(newellipse, c2 * 30);
Canvas.SetLeft(newellipse, c1 * 30);
canvas1.Children.Add(newellipse);
}
public void panduan1(int c, int d)
{
int count = 0;
//横
if (c >= 0 && c <= 10 && d >= 0 && d <= 10)
{
for (int i = c; i < 10 ; i++)
{
if (pan[c, d] != pan[i, d])
break;
count++;
}
for (int p = c; p >= 0; p--)
{
if (pan[c, d] != pan[p, d])
break;
count++;
}
}
if (count == 6)
{
MessageBox.Show("黑方获胜");
}
//竖
else if (c >= 0 && c <= 10 && d >= 0 && d <= 10)
{
count = 0;
for (int i = c; i < 10; i++)
{
if (pan[c, d] != pan[c, i])
break;
count++;
}
for (int p = c; p >= 0; p--)
{
if (pan[c, d] != pan[c, p])
break;
count++;
}
if (count == 6)
{
MessageBox.Show("黑方获胜");
}
}
}
public void panduan2(int c, int d)
{
int count = 0;
//横
if (c >= 0 && c <= 10 && d >= 0 && d <= 10)
{
for (int i = c; i < 10; i++)
{
if (pan[c, d] != pan[i, d])
break;
count++;
}
for (int p = c; p >= 0; p--)
{
if (pan[c, d] != pan[p, d])
break;
count++;
}
}
if (count == 6)
{
MessageBox.Show("白方获胜");
}
//竖
else if (c >= 0 && c <= 10 && d >= 0 && d <= 10)
{
count = 0;
for (int i = c; i < 10; i++)
{
if (pan[c, d] != pan[c, i])
break;
count++;
}
for (int p = c; p >= 0; p--)
{
if (pan[c, d] != pan[c, p])
break;
count++;
}
if (count == 6)
{
MessageBox.Show("白方获胜");
}
}
}
private void button1_Click(object sender, RoutedEventArgs e)
{
canvas1.Children.Clear();
for (int a = 0; a <= 15; a++)
{
for (int b = 0; b <= 15; b++)
{
pan[a, b] = 0;
}
}
}
private void button2_Click(object sender, RoutedEventArgs e)
{
int count = canvas1.Children.Count;
if (count > 0 && hui <= 1)
{
canvas1.Children.RemoveAt(count - 1);
pan[hei, bai] = 0;
chushi--;
hui++;
}
else
{
MessageBox.Show("只允许悔一步棋", "五子棋");
hui = 1;
}
}
private void button4_Click(object sender, RoutedEventArgs e)
{
Application.Current.Shutdown();
}
private void button3_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("双方议和","五子棋");
}
我采用的二维数组记录每个点有无下棋,下的是白棋还是黑棋,但是现在还不清楚怎么判断斜的获胜与否,还有,我想实现一个光标跟随鼠标移动,该怎么实现?(棋子是用画布画出来的)
来这个论坛时间不长,也很菜,希望得到一些指点,感谢万分 --------------------编程问答-------------------- 看这里!
一个简单的五子棋算法
五子棋算法设计随想
五子棋算法探讨 --------------------编程问答--------------------
友情帮顶下!顺便学习学习!
--------------------编程问答-------------------- 顶一下,急求帮助 --------------------编程问答-------------------- 学习、帮顶 太长啦 头都是 --------------------编程问答-------------------- 看得好累~ --------------------编程问答-------------------- 程序够长 --------------------编程问答-------------------- 算法全部写出来了,可是现在出现了BUG
棋盘是13*13的
现在的问题是,当横着判断连成五的第一个棋子在>=6格时就成了连成六个才赢,
而竖着判断当下的棋在横向数六格以后都无法判断,我实在无法看出哪里错了,希望高手指教 --------------------编程问答-------------------- 求救求救 --------------------编程问答-------------------- 真是长啊 --------------------编程问答-------------------- 帮顶!!!!!! 以后也做做这个程序
补充:.NET技术 , C#