示例#1
0
        public static int AFFF;                            //статическое пля для перехода в форму "старт"


        public FormGame()
        {
            InitializeComponent();
            // условная высота поля
            H = (Size.Height - 2 * SystemInformation.CaptionHeight) / sConst * sConst;
            // условная ширина поля
            W = (Size.Width - 2 * SystemInformation.FrameBorderSize.Width) / sConst * sConst;

            if (AFFF == 3)
            {
                Paint += new PaintEventHandler(WallBarrier);                      //прорисовка сетки для 3-го уровня
            }

            Paint += new PaintEventHandler(FormGame_Paint);                   // прорисовка

            if (AFFF == 1)
            {
                Paint += new PaintEventHandler(DrawGrid);                         //прорисовка сетки для 1-го уровня
            }

            KeyDown += new KeyEventHandler(FormGame_KeyDown);      // нажатие на кнопки

            timer.Interval = 120;                                  // таймер срабатывает раз в 120 милисекунд
            timer.Tick    += new EventHandler(timer_Tick);         // привязываем обработчик таймера
            timer.Start();

            //добавляем элементы змеи. здесь мы будем приводить координаты к константе размера элемента змеи.
            // сначала мы координату делем на S ( в нашем случае 10), отбрасываем дробную часть, а потом
            // умножаем на S - и унас получается координаты кратны размеру элемента змеи

            snake.Add(new CoordSnake()
            {
                X = W / 2 / sConst * sConst, Y = H / 2 / sConst * sConst
            });
            snake.Add(new CoordSnake()
            {
                X = W / 2 / sConst * sConst - sConst, Y = H / 2 / sConst * sConst
            });
            snake.Add(new CoordSnake()
            {
                X = W / 2 / sConst * sConst - 2 * sConst, Y = H / 2 / sConst * sConst
            });

            // координаты яблока
            apple = new CoordSnake()
            {
                X = rand.Next(20, W - 20) / sConst * sConst,
                Y = rand.Next(30, H - 20) / sConst * sConst
            };

            // координаты преграды
            wall = new CoordSnake()
            {
                X = rand.Next(Size.Width / sConst) * sConst,
                Y = rand.Next(Size.Height / sConst) * sConst
            };
        }
示例#2
0
        public void timer_Tick(object sender, EventArgs e)
        {
            int x = snake[0].X, y = snake[0].Y;           //  координаты головы змеи

            switch (way)
            {
            case Direction.Up:
                y = y - 10;
                if (y < 0)
                {
                    y = H - 10;
                }
                break;

            case Direction.Right:
                x = x + 10;
                if (x >= W)
                {
                    x = 0;
                }
                break;

            case Direction.Down:
                y = y + 10;
                if (y >= H)
                {
                    y = 0;
                }
                break;

            case Direction.Left:
                x = x - 10;
                if (x < 0)
                {
                    x = W - 10;
                }
                break;
            }

            CoordSnake c = new CoordSnake()
            {
                X = x, Y = y
            };                               // сегмент с новыми координатами головы

            snake.Insert(0, c);              // вставляем его в начало списка сегментов змеи(змея выросла на один сегмент)

            for (int i = 0; i < wConst; i++) //проверка на пересечение с препятствием
            {
                if (snake[0].X == barrier[i].X && snake[0].Y == barrier[i].Y)
                {
                    timer.Stop();
                    MessageBox.Show($"К сожалению вы поиграли. Но вы набрали {apples} яблок",
                                    "Инфа", MessageBoxButtons.OK);

                    Close();
                }
            }

            if (snake[0].X == apple.X && snake[0].Y == apple.Y) // если координаты головы и яблока совпали
            {
                // располагаем яблоко в новых случайных координатах
                apple = new CoordSnake()
                {
                    X = rand.Next(20, W - 20) / sConst * sConst,
                    Y = rand.Next(30, H - 20) / sConst * sConst
                };

                apples++;                                           // увеличиваем счетчик собранных яблок

                if (apples % 5 == 0)                                // после каждого пятого яблока увеличиваем скорость
                {
                    timer.Interval -= 10;
                }
            }
            // если координаты головы и яблока не совпали - убираем последний сегмент змеи
            else
            {
                snake.RemoveAt(snake.Count - 1);
            }
            Invalidate();                                            // перерисовываем,
        }