public override void OnUse(ref CPet user, ref CMonster opponent) { opponent.Info.DownDur(1, true); ConsoleUtil.WriteColor($"{opponent.Name}의 물리 방어력이 감소 했습니다. {opponent.Info.curAdDurDown}"); opponent.Info.DownDur(1, false); ConsoleUtil.WriteColor($"{opponent.Name}의 마법 방어력이 감소 했습니다. {opponent.Info.curApDurDown}"); }
public override void OnUse(ref CPet user, ref CMonster opponent) { user.Info.DownDur(-1, true); user.Info.DownDur(-1, false); ConsoleUtil.WriteColor("방어력이 증가했습니다."); }
public void OnTriggerEnter(Collider other) { CMonster monster = game.getLevel().getMonster(); if (other.gameObject == monster.getGameObject()) { monster.detectedPlayerAudio(); } }
public override void OnUse(ref CPet user, ref CMonster opponent) { var dmg = BattleManager.CalDamage( this.Damage, EntityTypeExtension.CheckCompacity(user.Type, opponent.Type), user.Info.AdAtk, user.Info.ApAtk, DmgType.ATTACK_DAMAGE ); opponent.Info.DealDmg(dmg); this.Point--; }
/// <summary> /// Initializes a new instance of the <see cref="CLevel"/> class. /// </summary> public CLevel() { game = GameObject.Find("_Game").GetComponent <CGame>(); Vector2 posPlayer = new Vector2(0.0f, 0.0f); Vector2 posMonster = new Vector2(100.0f, 0.0f); m_Player = new CPlayer(posPlayer, true); //m_Player2 = new CPlayer(); //m_Player3 = new CPlayer(); m_Monster = new CMonster(posMonster); m_bTimerLightSwitch = 0; // all game elements ? m_pElement = new List <CElement>(); }
private void InitTheGame() { CMonster curMonster = null; Random rnd = new Random(); //sample random if ((rnd.Next() % 2) == 0) { curMonster = new CGollum(); } else { curMonster = new CUgly_Spider(); } curMonster.Run(); //when (rnd.Next() % 2) == 0 then the Gollum is doing else the Ugly_Spider curMonster.Attach(); //when (rnd.Next() % 2) == 0 then the Gollum is doing else the Ugly_Spider curMonster.CastSpell(); //when (rnd.Next() % 2) == 0 then the Gollum is doing else the Ugly_Spider }
public override IPositionable CreateUnit(XElement traderData) { if (traderData == null) { throw new ArgumentNullException(nameof(traderData)); } XElement itemsData = traderData.Element("items"); var traderItems = new List <IInventoryItem>(); if (itemsData != null) { traderItems = itemsData.Elements("item") .Select(itemElement => { String type = itemElement.Attribute("type")?.Value; var itemType = (EItemTypes)Enum.Parse(typeof(EItemTypes), type, true); CItemFactoryMethod itemFactory = CItemFactoryMethod.GetFactory(itemType); return(itemFactory.Create(itemElement)); }) .ToList(); } var maxHpData = traderData.Element("MaxHp")?.Value ?? throw new Exception("Element 'MaxHp' must by on Monster"); var maxHp = Int32.Parse(maxHpData); var damageData = traderData.Element("Damage")?.Value ?? throw new Exception("Element 'Damage' must by on Monster"); var damage = Int32.Parse(damageData); var trader = new CMonster(maxHp, damage); return(trader); }
public RoadMonster(CMonster monster, double frequency) { this.monster = monster; this.frequency = frequency; }
protected void AddMonster(CMonster monster, double frequency) { var rm = new RoadMonster(monster, frequency); Monsters.Add(rm); }
public abstract void OnUse(ref CPet user, ref CMonster opponent);
public static void StartBattle(CMonster opponent, double expCoe = 1.15) { if (CurrentPlayer.Pets.Length < 1 || CurrentPlayer.IsAllPetDead) { ConsoleUtil.WriteColor("전투가능한 펫이 없슴니다."); ConsoleUtil.Pause(); return; } var random = new Random(); var firstAtk = random.Next(0, 2) == 0; Console.Clear(); ConsoleUtil.WriteColor("전투가 시작되었습니다."); ConsoleUtil.WriteColor(opponent.ToString()); ConsoleUtil.Pause(); var pet = SelectPet(); if (pet == -1) { return; } CurrentPlayer.Pets[pet].Info.Reset(); opponent.Info.Reset(); do { if (CurrentPlayer.Pets[pet].IsDead) { int switched; do { switched = SelectPet(); }while (CurrentPlayer.Pets[switched].IsDead); pet = switched; } Console.Clear(); ShowRound(pet, opponent); int action = -1; while (true) { action = SelectAction(); if ( (action == 1 && CurrentInventory.Items.Count < 1) || (action == 2 && CurrentPlayer.GetPetsCount() < 2) ) { ConsoleUtil.WriteColor("불가능한 선택입니다."); ConsoleUtil.Pause(); } else { break; } } #nullable enable SSkill?skill = null; switch (action) { case 0: // Attack skill = SelectSkill(pet); break; case 1: // Use Item var result = false; do { var item = SelectItem(); var usable = CurrentInventory.Items[item].Item as IUsableItem; result = usable !.OnUse(CurrentPlayer.Pets[pet], opponent); CurrentInventory.MinusItem(CurrentInventory.Items[item].Item, 1); if (!result) { ConsoleUtil.WriteColor("아이템 사용에 실패했습니다."); ConsoleUtil.Pause(); } else { ConsoleUtil.WriteColor("아이템을 사용했습니다."); ConsoleUtil.Pause(); } }while (!result); break; case 2: // Swap Pet int switched; do { switched = SelectPet(); }while (pet == switched); pet = switched; ConsoleUtil.WriteColor($"펫을 {CurrentPlayer.Pets[switched].Name}으로 교체했습니다."); ConsoleUtil.Pause(true); break; } if (firstAtk) { if (action == 0) { PetAttack(pet, opponent, skill !); } if (opponent.IsDead) { break; } MonsterAttack(pet, opponent); } else { MonsterAttack(pet, opponent); if (CurrentPlayer.Pets[pet].IsDead) { return; } if (action == 0) { PetAttack(pet, opponent, skill !); } } }while (!CurrentPlayer.IsAllPetDead && !opponent.IsDead);