/// <summary>Метод движения</summary> public void Move(GameMap map) { if (this.Vektor == MoveVektor.Stop) { return; } GameAPI.Point?newPosition; //Шагнем героем по карте newPosition = map.Add(this.CurentPosition.Move(Vektor), this); if (newPosition != null) { //Если удалось шагнуть удалим себя со старой позиции map.Remove(this.CurentPosition); //Отресуем Хвост if (mustGrow) //Нужно удленить змейку { SnakeBody sb = new SnakeBody(this.CurentPosition); sb.Vektor = this.Vektor; BodyQueue.Enqueue(sb); map.Add(sb.CurentPosition, sb); //Добавим хвостик на карту //Событие ОнРасти if (OnGrow != null) { OnGrow(sb, null); } this.mustGrow = false; } else { if (this.BodyQueue.Count > 0) { SnakeBody sb = BodyQueue.Dequeue(); map.Remove(sb.CurentPosition); // Удалим Хвостик с игровой карты sb.CurentPosition = this.CurentPosition; sb.Vektor = this.Vektor; BodyQueue.Enqueue(sb); map.Add(sb.CurentPosition, sb); //Добавим хвостик на карту } } //Сохраним текущюю позицию персонажа this.CurentPosition = (GameAPI.Point)newPosition; } }
/// <summary>Обработчик Столкновений</summary> static void Collision(GameAPI.GameMap map, GameAPI.Point p, Object NewObj, Object ExistObj) { if ((NewObj is GameAPI.Snake) && (ExistObj is GameAPI.Mouse)) { //Удалим яблочко map.Remove(p); (NewObj as Snake).Grow(map); // Вырастим if ((NewObj as Snake).Count >= 12) { throw new GameWinExeption(); //Віиграли } RandomAppleGeneration(); // Сгенерим новое яблочко } else { throw new GameOverExeption(); } }
/// <summary>Метод движения</summary> public void Move(GameMap map) { Point?newPosition; //Шагнем героем по карте newPosition = map.Add(this.CurentPosition.Move(Vektor), this); if (newPosition != null) { //Если удалось шагнуть удалим себя со старой позиции map.Remove(this.CurentPosition); //Сохраним текущюю позицию персонажа this.CurentPosition = (Point)newPosition; //Событие //if (onMove != null) onMove(this, map); } }