首页 > 解决方案 > 使用图片框 C# windows 窗体创建 Snake 游戏

问题描述

我正在以窗口形式创建经典的蛇游戏,但使用图片框而不是椭圆,因此我对蛇的运动以及图片区域的专用方式有很多用途。

我用它作为游戏的基础 https://www.youtube.com/watch?v=enOSmmHQcso

添加正文时出现问题(其他部分)

如果我使用此代码,移动是完美的,但图片框重叠 //((Body)lstSnake[i]).SetBounds(lstSnake[i - 1].Location.X, lstSnake[i - 1].Location.Y, lstSnake[i - 1].Width, lstSnake[i - 1].Height); //(Body)lstSnake[i]).SetImage();

如果我运行图片框下方的开关是完美的,但运动却搞砸了。

如果有人可以给我一些帮助,那就太棒了。

    private void MoveSnake()
    {
        for (int i = lstSnake.Count - 1; i >= 0; i--)
        {
            if (i == 0)
            {
                switch (Settings.direction)
                {
                    case Direction.Right:
                        ((Head)lstSnake[i]).SetX(lstSnake[i].Location.X + Settings.Move);
                        ((Head)lstSnake[i]).SetImage();
                        break;

                    case Direction.Left:
                        ((Head)lstSnake[i]).SetX(lstSnake[i].Location.X - Settings.Move);
                        ((Head)lstSnake[i]).SetImage();
                        break;

                    case Direction.Up:
                        ((Head)lstSnake[i]).SetY(lstSnake[i].Location.Y - Settings.Move);
                        ((Head)lstSnake[i]).SetImage();
                        break;

                    case Direction.Down:
                        ((Head)lstSnake[i]).SetY(lstSnake[i].Location.Y + Settings.Move);
                        ((Head)lstSnake[i]).SetImage();
                        break;
                }

            else
                {


                    switch (Settings.direction)
                    {
                        case Direction.Right:
                            ((Body)lstSnake[i]).SetBounds(lstSnake[i - 1].Location.X - (lstSnake[i - 1].Width / 2), lstSnake[i - 1].Location.Y, lstSnake[i - 1].Width, lstSnake[i - 1].Height);
                            ((Body)lstSnake[i]).SetImage();
                            break;

                        case Direction.Left:
                            ((Body)lstSnake[i]).SetBounds(lstSnake[i - 1].Location.X + (lstSnake[i - 1].Width / 2), lstSnake[i - 1].Location.Y, lstSnake[i - 1].Width, lstSnake[i - 1].Height);

                            ((Body)lstSnake[i]).SetImage();
                            break;

                        case Direction.Up:
                            ((Body)lstSnake[i]).SetBounds(lstSnake[i - 1].Location.X, lstSnake[i - 1].Location.Y + (lstSnake[i - 1].Height / 2), lstSnake[i - 1].Width, lstSnake[i - 1].Height);

                            ((Body)lstSnake[i]).SetImage();
                            break;

                        case Direction.Down:
                            ((Body)lstSnake[i]).SetBounds(lstSnake[i - 1].Location.X, lstSnake[i - 1].Location.Y - (lstSnake[i - 1].Height / 2), lstSnake[i - 1].Width, lstSnake[i - 1].Height);

                            ((Body)lstSnake[i]).SetImage();
                            break;
                    }
                }
            }
        }
    }

标签: c#visual-studiowindows-forms-designer

解决方案


 private void MoveSnake()
    {
        for (int i = lstSnake.Count - 1; i >= 0; i--)
        {
            if (i == 0)
            {
                switch (Settings.direction)
                {
                    case Direction.Right:
                        ((Head)lstSnake[i]).SetX(lstSnake[i].Location.X + lstSnake[i].Width);
                        ((Head)lstSnake[i]).SetImage();
                        break;

                    case Direction.Left:
                        ((Head)lstSnake[i]).SetX(lstSnake[i].Location.X - lstSnake[i].Width);
                        ((Head)lstSnake[i]).SetImage();
                        break;

                    case Direction.Up:
                        ((Head)lstSnake[i]).SetY(lstSnake[i].Location.Y  - lstSnake[i].Height );
                        ((Head)lstSnake[i]).SetImage();
                        break;

                    case Direction.Down:
                        ((Head)lstSnake[i]).SetY(lstSnake[i].Location.Y + lstSnake[i].Height);
                        ((Head)lstSnake[i]).SetImage();
                        break;
                }               

            else
            {
                ((Body)lstSnake[i]).SetBounds(lstSnake[i - 1].Location.X, lstSnake[i - 1].Location.Y, lstSnake[i - 1].Width, lstSnake[i - 1].Height);
                ((Body)lstSnake[i]).SetImage();
            }
        }
    }

推荐阅读