Ejemplo n.º 1
0
        public void MoveMonster(Direction direction, Monster monster)
        {
            Cell currentCell = Cells[monster.Y, monster.X];
            Cell newCell = NewCell(direction, monster);

            if (newCell != null) {
                var newPlayer = newCell.GetPlayer(this);
                var newPotion = newCell.GetPotion(this);
                var newMonster = newCell.GetMonster(this);

                List<StateChange> changes = new List<StateChange>();

                if (newPlayer != null) {
                    newPlayer.Health -= monster.Damage;
                    if (newPlayer.Health <= 0) {
                        monster.Gold += newPlayer.Gold;
                        newPlayer.Gold = 0;
                        SpawnCharacters(newPlayer);
                        monster.X = newCell.X;
                        monster.Y = newCell.Y;

                        changes.Add(StateChange.Update(monster));
                    }

                    changes.Add(StateChange.Update(newPlayer));
                } else if (newPotion != null) {
                    monster.Health += newPotion.Health;
                    potions.Remove(newPotion);
                    monster.X = newCell.X;
                    monster.Y = newCell.Y;

                    changes.Add(StateChange.Update(monster));
                    changes.Add(StateChange.Remove(newPotion));
                } else if (newCell.IsWalkable(this)) {
                    monster.Gold += newCell.Gold;
                    newCell.Gold = 0;
                    monster.X = newCell.X;
                    monster.Y = newCell.Y;

                    changes.Add(StateChange.Update(monster));
                    changes.Add(StateChange.Update(newCell));
                }

                if (changes.Count > 0) {
                    OnChanged(changes.ToArray());
                }
            }
        }
Ejemplo n.º 2
0
        public void MonsterSpawner(object arg)
        {
            double lastSpawn = 0.0;
            while (true) {
                if (TimeSpan.FromTicks(DateTime.Now.Ticks).TotalMilliseconds - lastSpawn > SPAWN_TIME_MONSTER_MS && monsters.Count < MAX_MONSTERS) {
                    var monster = new Monster(Monster.IdCounter++, random.Next(20, 40), random.Next(5, 12), random.Next(0, 1000));
                    SpawnCharacters(monster);
                    lock (monsters) {
                        monsters.Add(monster);
                    }
                    lastSpawn = TimeSpan.FromTicks(DateTime.Now.Ticks).TotalMilliseconds;

                    OnChanged(StateChange.Add(monster));
                }
            }
        }