コード例 #1
0
        //用于动态刷新
        public static void Snake_ArrayList_WayKey(Game_Info info) //蛇改刷新头方向
        {
            X_Y_K xyz = (X_Y_K)Snake_AL[0];

            if (info.Control_Key == Keys.Up && xyz.Key != Keys.Up && xyz.Key != Keys.Down)
            {
                xyz.Key     = info.Control_Key;
                Snake_AL[0] = xyz;
            }
            else if (info.Control_Key == Keys.Down && xyz.Key != Keys.Up && xyz.Key != Keys.Down)
            {
                xyz.Key     = info.Control_Key;
                Snake_AL[0] = xyz;
            }
            else if (info.Control_Key == Keys.Left && xyz.Key != Keys.Left && xyz.Key != Keys.Right)
            {
                xyz.Key     = info.Control_Key;
                Snake_AL[0] = xyz;
            }
            else if (info.Control_Key == Keys.Right && xyz.Key != Keys.Left && xyz.Key != Keys.Right)
            {
                xyz.Key     = info.Control_Key;
                Snake_AL[0] = xyz;
            }
        }
コード例 #2
0
        public static void Snake_ArrayList_Initialize(Snake_Info Snakeinfo, Game_Info info) //随机初始化蛇的位置
        {
            Snake_AL.Clear();                                                               //清除缓存
            info.Control_Key = Keys.Right;
            bool   flag = true;
            Random ran  = new Random();//实例一个随机

            while (flag)
            {
                X_Y_K YUAN = new X_Y_K(ran.Next(4, M_x - 4), ran.Next(4, M_y - 4), Keys.Right);
                for (int i = 0; i < Snakeinfo.Body_Long; i++)
                {
                    if (YUAN.X - i >= 0)
                    {
                        if (Coordinate_date[1, YUAN.X - i, YUAN.Y] == -1)
                        {
                            X_Y_K xyk = new X_Y_K(YUAN.X - i, YUAN.Y, Keys.Right);
                            Snake_AL.Add(xyk);
                            if (Snake_AL.Count == Snakeinfo.Body_Long)
                            {
                                flag = false;
                            }
                        }
                        else
                        {
                            Snake_AL.Clear();
                        }
                    }
                    else
                    {
                        Snake_AL.Clear();
                    }
                }
            }
        }
コード例 #3
0
        public static void Snake_ArrayList_Update(Snake_Info Snakeinfo)//蛇,刷新
        {
            X_Y_K xyz;
            int   x_l;
            int   y_l;
            Keys  k_l;

            while (Snakeinfo.WaitAdd_Body > 0)
            {
                xyz = (X_Y_K)Snake_AL[Snake_AL.Count - 1];
                x_l = xyz.X;
                y_l = xyz.Y;
                k_l = xyz.Key;
                if (xyz.Key == Keys.Up)
                {
                    if (xyz.Y + 1 >= M_y)
                    {
                        y_l = 0;
                    }
                    else
                    {
                        y_l++;
                    }
                }
                else if (xyz.Key == Keys.Down)
                {
                    if (xyz.Y - 1 <= 0)
                    {
                        y_l = M_y;
                    }
                    else
                    {
                        y_l--;
                    }
                }
                else if (xyz.Key == Keys.Left)
                {
                    if (xyz.X - 1 >= M_x)
                    {
                        x_l = 0;
                    }
                    else
                    {
                        x_l++;
                    }
                }
                else if (xyz.Key == Keys.Right)
                {
                    if (xyz.X - 1 <= 0)
                    {
                        x_l = M_x;
                    }
                    else
                    {
                        x_l--;
                    }
                }
                X_Y_K xyk = new X_Y_K(x_l, y_l, k_l);
                Snake_AL.Add(xyk);
                Snakeinfo.WaitAdd_Body--;
            }
            Snake_AL.Reverse();
            xyz = (X_Y_K)Snake_AL[Snake_AL.Count - 1];//xyz是映射到Snake_AL[Snake_AL.Count - 1]

            int  x = xyz.X;
            int  y = xyz.Y;
            Keys k = xyz.Key;

            if (k == Keys.Up)
            {
                if (xyz.Y <= 0)
                {
                    y = M_y - 1;
                }
                else
                {
                    y--;
                }
            }
            else if (k == Keys.Down)
            {
                if (xyz.Y + 1 >= M_y)
                {
                    y = 0;
                }
                else
                {
                    y++;
                }
            }
            else if (k == Keys.Left)
            {
                if (xyz.X <= 0)
                {
                    x = M_x - 1;
                }
                else
                {
                    x--;
                }
            }
            else if (k == Keys.Right)
            {
                if (xyz.X + 1 >= M_x)
                {
                    x = 0;
                }
                else
                {
                    x++;
                }
            }
            X_Y_K aa = new X_Y_K(x, y, k);

            Snake_AL.Add(aa);
            Snake_AL.Reverse();
            Snake_AL.RemoveAt(Snake_AL.Count - 1);
        }