public static Block GetFood( ArrayList allBlocks)
 {
     Block food = null;
     Random r = new Random();
     bool redo = false;
     while (true)
     {
         redo = false;
         int x = r.Next(PropertiesBlock.width);
         int y = r.Next(PropertiesBlock.height);
         foreach (Block block in allBlocks)
         {
             if (block.Point.X == x && block.Point.Y == y)
             {
                 redo = true;
             }
         }
         if (redo == false)
         {
             food = new Block(Color.Black, PropertiesBlock.size, new Point(x, y));
             break;
         }
     }
     return food;
 }
Exemple #2
0
 // ��ʼ��Ϸ
 public void Start()
 {
     this._food = GetFood();// ����һ��ʳ��
     // ��ʼ����ʱ��
     timerBlock = new System.Timers.Timer(_speed[this._level]);
     timerBlock.Elapsed += new System.Timers.ElapsedEventHandler(OnBlockTimedEvent);
     timerBlock.AutoReset = true;
     timerBlock.Start();
 }
Exemple #3
0
        // ǰ��һ��
        private void Move()
        {
            Point p; // ��һ������λ��
            Block head = (Block)(this._blocks[0]);
            if (this._direction == Direction.Up)
                p = new Point(head.Point.X, head.Point.Y - 1);
            else if (this._direction == Direction.Down)
                p = new Point(head.Point.X, head.Point.Y + 1);
            else if (this._direction == Direction.Left)
                p = new Point(head.Point.X - 1, head.Point.Y);
            else
                p = new Point(head.Point.X + 1, head.Point.Y);

            // ���������꣬������Ϊ��ͷ
            Block b = new Block(Color.Red, this._size, p);

            if (this._food.Point != p)
                this._blocks.RemoveAt(this._blocks.Count - 1);// �����һ�����겻�ǵ�ǰʳ�����꣬��ô���߿���Ϣ�б���ɾ�����һ���߿�
            else
                this._food = this.GetFood();//�����һ�������ʳ�������غϣ���ô������һ����ʳ��

            this._blocks.Insert(0, b);// ����һ��������뵽�߿���Ϣ�б�ĵ�һ����ʹ���Ϊ��ͷ

            this.PaintPalette(this._gpPalette); // ���»���

            this._directAble = true; // ��ʾ�ɽ�����һ������
        }
Exemple #4
0
 // ������һ��ʳ�Ҳ������һ���߿�
 private Block GetFood()
 {
     Block food = null;
     Random r = new Random();
     bool redo = false;
     while (true)
     {
         redo =false;
         int x = r.Next(this._width);
         int y = r.Next(this._height);
         for(int i=0;i<this._blocks.Count;i++)// ���ʳ�����������Ƿ��̰���߳�ͻ
         {
             Block b = (Block)(this._blocks[i]);
             if (b.Point.X == x && b.Point.Y == y)// �г�ͻʱ���������һ������
             {
                 redo = true;
             }
         }
         if (redo == false)
         {
             food = new Block(Color.Black, this._size, new Point(x, y));
             break;
         }
     }
     return food;
 }
 private bool CheckDead(Block head)
 {
     if (head.Point.X < 0 || head.Point.Y < 0 || head.Point.X >= width || head.Point.Y >= height)
         return true;
     foreach (Block block in allBlocks)
     {
         if (head.Point.X == block.Point.X && head.Point.Y == block.Point.Y)
         {
             return true;
         }
     }
     return false;
 }
Exemple #6
0
 /// <summary>
 /// Добавить блок в начало змейки (в голову)
 /// </summary>
 /// <param name="head">Ссылка на блок, что станет головой змейки</param>
 private void AddHead(Block head)
 {
     if (head == null)
     {
         throw new Exception("Ссылка на объект указывает на null");
     }
     snake.Insert(0, head);
 }
Exemple #7
0
 /// <summary>
 /// Получение блока, который будет новой головой змейки при перемещении в указанном направлении
 /// </summary>
 /// <param name="direction">Направление движения змейки</param>
 /// <returns>Ссылку на объект Block, который должна занять голова змейки после перемещения</returns>
 public Block GetNextHead(DIRECTION direction)
 {
     Block head = this.GetHead();
     Block newHead = new Block();
     switch (direction)
     {
         case DIRECTION.NORTH:
             newHead.Left = head.Left;
             newHead.Top = head.Top - 1;
             break;
         case DIRECTION.EAST:
             newHead.Left = head.Left + 1;
             newHead.Top = head.Top;
             break;
         case DIRECTION.SOUTH:
             newHead.Left = head.Left;
             newHead.Top = head.Top + 1;
             break;
         case DIRECTION.WEST:
             newHead.Left = head.Left - 1;
             newHead.Top = head.Top;
             break;
         default:
             break;
     }
     return newHead;
 }
Exemple #8
0
 /// <summary>
 /// Генерация еды на игровом поле
 /// </summary>
 private void GenerateFood()
 {
     //Генерируем еду, если начало игры, если пришло время, или вся еда съедена
     if (tactCount % this.foodLifeTime != 0 && this.generatedFirstFood && foods.Count != 0)
     {
         return;
     }
     //Если количество еды, что может находится на карте, превышает максиальное - чистим коллекцию еды и консоль
     if (foods.Count >= this.foodAmount)
     {
         this.ClearFood();
         foods.Clear();
     }
     //Генерируем еду в случайном месте игрового поля, если попали в змейку - повторим
     string[] foodSymbols = { "@", "#", "☺", "☻", "♦", "☼" };
     Block food = null;
     int topFood, leftFood;
     bool overlap = true;
     while (overlap)
     {
         //Генерация координат
         topFood = rand.Next(GameAreaOffsetY + 1, GameAreaOffsetY + GameAreaHeight - 1);
         leftFood = rand.Next(GameAreaOffsetX + 1, GameAreaOffsetX + GameAreaLength - 1);
         //Символа (в конструкторе)
         food = new Block(topFood, leftFood, foodSymbols[rand.Next(0, foodSymbols.Length)]);
         //Цвета
         food.Color = (ConsoleColor)rand.Next(9, 16);
         //Проверка не попали ли в змею при генерации
         foreach (Block snakeBlock in snake)
         {
             if (food.Equals(snakeBlock))
             {
                 overlap = true;
                 break;
             }
             else
             {
                 overlap = false;
             }
         }
     }
     this.generatedFirstFood = true;
     this.foods.Add(food);
     this.DrawFood();
 }
        public void Move()
        {
            if (!IsGameOver)
            {
                Point p = NextPositionMove();
                Block b = new Block(colorSnake, this._size, p);

                Block foodEat = null;
                foreach (Block food in Foods.Food)
                {
                    if (food.Point == p)
                        foodEat = food;
                }
                if (foodEat == null)
                    this._blocks.RemoveAt(this._blocks.Count - 1); //������� ���� ���� ��� �� ���� ���
                else
                    Foods.Food.Remove(foodEat);
                this._blocks.Insert(0, b);

                this._directAble = true;
            }
        }