예제 #1
0
 public void ActInConflict(ICreature conflictedObject, IAliveCreature aliveConflictedObject, int mapWidth, int mapHeight)
 {
     if (conflictedObject is Box)
     {
         aliveConflictedObject.AddScore(10);
     }
 }
예제 #2
0
 private void DrawAliveCreature(IAliveCreature creature, PaintEventArgs e)
 {
     foreach (var part in creature.GetBody())
     {
         e.Graphics.FillRectangle(creatureColor[creature.GetName()],
                                  part.X * ElementSize, part.Y * ElementSize,
                                  ElementSize, ElementSize);
     }
 }
예제 #3
0
 public void ActInConflict(IAliveCreature conflictedObject, int mapWidth, int mapHeight)
 {
     if (conflictedObject is Snake)
     {
         var dir = DirectionToPoint[conflictedObject.GetDirection()];
         var x   = (pos.X + dir.X + mapWidth) % mapWidth;
         var y   = (pos.Y + dir.Y + mapHeight) % mapHeight;
         pos = new Point(x, y);
     }
 }
예제 #4
0
 public void Destroy(object body = null)
 {
     QueueFree();
     if (body != null)
     {
         IAliveCreature hit  = body as IAliveCreature;
         Ball           ball = body as Ball;
         if (hit != null)
         {
             hit.DealDamage(damage);
         }
         if (ball != null)
         {
             ball.SetSpeed(ball.speed * ballSpeedMultiplier);
         }
     }
 }
예제 #5
0
        private void CheckSecondCollision(IAliveCreature snake, ICreature creature)
        {
            var cPos = creature.GetPosition();
            var conflictedCreature = map[cPos.X, cPos.Y];

            if (conflictedCreature != null)
            {
                if (conflictedCreature.DeadInConflict(creature))
                {
                    conflictedCreature.ActInConflict(creature, snake, MapWidth, MapHeight);
                    creature.ActInConflict(conflictedCreature, snake, MapWidth, MapHeight);
                    map[cPos.X, cPos.Y] = creature;
                    if (conflictedCreature is Destiny)
                    {
                        Add("destiny");
                    }
                    return;
                }
                isOver        = true;
                finishReason += snake.GetName() + " dead,";
                return;
            }
            map[cPos.X, cPos.Y] = creature;
        }
예제 #6
0
 public bool DeadInConflict(IAliveCreature conflictedObject) => true;
예제 #7
0
 public void ActInConflict(ICreature conflictedObject, IAliveCreature aliveConflictedObject, int mapWidth, int mapHeight)
 {
 }
예제 #8
0
 public void ActInConflict(IAliveCreature conflictedObject, int mapWidth, int mapHeight) =>
 conflictedObject.AddScore(1);