Ejemplo n.º 1
0
        private void StartGame()
        {
            _sGame = true;


            _gameover           = false;
            _snakeRate          = 2;
            _snakeLoop.Interval = (int)(1000 / _snakeRate);
            _snake.Clear();
            _direction = 2;
            _score     = 0;

            _bombList.Clear();
            var head = new SnakePart(10, 8);

            _snake.Add(head);
            _snake.Add(new SnakePart(9, 8));
            _snake.Add(new SnakePart(8, 8));
            _snake.Add(new SnakePart(7, 8));


            GenerateFoodandBomb();
        }
Ejemplo n.º 2
0
        private void UpdateSnake(object sender, EventArgs e) //обновление змейки
        {
            if (!_gameover)
            {
                for (var i = _snake.Count - 1; i >= 0; i--)
                {
                    if (i == 0)
                    {
                        switch (_direction) //в зависимости от направление изменяем координаты
                        {
                        case 0:
                            _snake[0].Y++;
                            break;

                        case 1:
                            _snake[0].X--;
                            break;

                        case 2:
                            _snake[0].X++;
                            break;

                        case 3:
                            _snake[0].Y--;
                            break;
                        }

                        // Check for out of boounds
                        var maxTileW = pbCanvas.Size.Width / TileWidth;
                        var maxTileH = pbCanvas.Size.Height / TileHeight;
                        var head     = _snake[0];
                        if (head.X >= maxTileW || head.X < 0 || head.Y >= maxTileH || head.Y < 0)
                        {
                            GameOver();
                        }

                        // Check for collision with body
                        for (var j = 1; j < _snake.Count; j++)
                        {
                            if (head.X == _snake[j].X && head.Y == _snake[j].Y)
                            {
                                GameOver();
                            }
                        }

                        // Check for collision with BOMBs
                        foreach (SnakePart _bomb_chk in _bombList)
                        {
                            if (head.X == _bomb_chk.X && head.Y == _bomb_chk.Y)
                            {
                                PlaySoundFromResourceBomb();

                                GameOver();
                            }
                        }

                        // Check for collision with _food
                        if (head.X == _food.X && head.Y == _food.Y)
                        {
                            PlaySoundFromResourceApple();
                            var xcor = 0; // corecct x, + 1 or -1
                            var ycor = 0; // corecct x, + 1 or -1
                            switch (_cor)
                            {
                            case 1:
                                xcor = 1;
                                break;

                            case 2:
                                xcor = -1;
                                break;

                            case 3:
                                ycor = +1;
                                break;

                            case 0:
                                ycor = -1;
                                break;
                            }
                            var part = new SnakePart(_snake[_snake.Count - 1].X + xcor,
                                                     _snake[_snake.Count - 1].Y + ycor);
                            _snake.Add(part); //костыль

                            GenerateFoodandBomb();
                            //в зависомсти от уровня сложности счет добавляется по разному
                            if (hardToolStripMenuItem.Checked)
                            {
                                _score = _score + 3;
                            }

                            if (mediumToolStripMenuItem.Checked)
                            {
                                _score = _score + 2;
                            }

                            if (easyToolStripMenuItem.Checked)
                            {
                                _score++;
                            }

                            if (_snakeRate < 30) //если меньше 30 то добавляем скорости
                            {
                                _snakeRate++;
                                _snakeLoop.Interval = (int)(1000 / _snakeRate);
                            }
                        }
                    }
                    else //если ничего не случилось из выше написаного, то передвигаем змейку
                    {
                        _snake[i].X = _snake[i - 1].X;
                        _snake[i].Y = _snake[i - 1].Y;
                    }
                }
            }
        }
Ejemplo n.º 3
0
        private void GenerateFoodandBomb()
        {
            var maxTileW = pbCanvas.Size.Width / TileWidth;   //максимальна длина по ширине
            var maxTileH = pbCanvas.Size.Height / TileHeight; //максимальна длина по высоте

            var valid = false;

            while (!valid)      //цикл до того когда найдется такое значение точок для бомб и яблок, которые не будут пересекаться друг с другом и змейкой
            {
                var random = new Random();
                var fx     = random.Next(0, maxTileW);
                var fy     = random.Next(0, maxTileH);

                var bx = random.Next(0, maxTileW);
                var by = random.Next(0, maxTileH);

                var b2x = random.Next(0, maxTileW);
                var b2y = random.Next(0, maxTileH);

                var b3x = random.Next(0, maxTileW);
                var b3y = random.Next(0, maxTileH);

                var overlap = false;
                for (var i = 0; i < _snake.Count - 1; i++)
                {
                    var sx = _snake[i].X;
                    var sy = _snake[i].Y;


                    if ((fx == sx && fy == sy) || (bx == sx && by == sy) || (b2x == sx && b2y == sy) || (b3x == sx && b3y == sy))
                    {
                        overlap = true;
                        break;
                    }
                }
                for (var q = 0; q < _bombList.Count - 1; q++)
                {
                    var qx = _bombList[q].X;
                    var qy = _bombList[q].Y;


                    if ((fx == qx && fy == qy))
                    {
                        overlap = true;
                        break;
                    }
                }
                if (!overlap)
                {
                    _food = new SnakePart(fx, fy);
                    _bomb = new SnakePart(bx, by);
                    //в зависимости от уровня сложности нужно добавить 1,2 или 3 точки бомб
                    if (hardToolStripMenuItem.Checked)
                    {
                        _bombList.Add(_bomb);
                        _bombList.Add(new SnakePart(b2x, b2y));
                        _bombList.Add(new SnakePart(b3x, b3y));
                    }
                    if (mediumToolStripMenuItem.Checked)
                    {
                        _bombList.Add(new SnakePart(b2x, b2y));
                        _bombList.Add(_bomb);
                    }
                    if (easyToolStripMenuItem.Checked)
                    {
                        _bombList.Add(_bomb);
                    }



                    valid = true;
                }
            }
        }