当前位置:编程学习 > C#/ASP.NET >>

请教请教

一个简单的五子棋: 
   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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,