Ejemplo n.º 1
0
        public override void Use(BattleGladiator player, BattleGladiator target)
        {
            int damage = player.Strength - target.Defense;

            if (damage < 0)
            {
                damage = 0;
            }
            target.Health -= damage;
            Console.WriteLine($"{player.Name} attacks {target.Name} for {damage}dmg");
        }
Ejemplo n.º 2
0
 public override void Use(BattleGladiator player, BattleGladiator target)
 {
     //if buff exist renew (remove and add it again)
     if (player.Buffs.Exists(x => x.Name == "Guarded"))
     {
         var buff = player.Buffs.Find(x => x.Name == "Guarded");
         buff.DeActivate(player);
         player.Buffs.Remove(buff);
         player.AddBuff(new Guarded());
         player.Buffs.Find(x => x.Name == "Guarded").Activate(player);
     }
     else
     {
         player.AddBuff(new Guarded());
         player.Buffs.Find(x => x.Name == "Guarded").Activate(player);
     }
     Console.WriteLine($"{player.Name} raises his guard");
 }
Ejemplo n.º 3
0
 public static GameReturn GetReturnMessage(BattleGladiator gladiator, int turnCount)
 {
     var result = new GameReturn()
     {
         MailType = "gamereturn",
         GOneHealth = gladiator.Health.ToString(),
         GTwoHealth = gladiator.Health.ToString(),
         //Turn = "gladiatorOne",
         TurnCount = turnCount.ToString(),
         Winner = "None",
         Buffs = new List<string>()
     };
     
     foreach (Buff buff in gladiator.Buffs)
     {
         result.Buffs.Add(buff.Name.ToLower());
     }
     return result;
 }
Ejemplo n.º 4
0
        public static GameStart GetStartMessage(BattleGladiator player, BattleGladiator enemy, PID turn)
        {
            var result = new GameStart()
            {
                MailType = "gamestart",
                PlayerName = player.Name,
                PlayerHealth = player.Health.ToString(),
                PlayerSkills = new List<string>(),
                EnemyName = enemy.Name,
                EnemyHealth = enemy.Health.ToString(),
                Turn = turn.ToString()
                
            };

            foreach (Skill skill in player.Skills)
            {
                result.PlayerSkills.Add(skill.Name.ToLower());
            }

            return result;
        }
Ejemplo n.º 5
0
        public static ActorMeth GameManager(PID pid)
        {
            BattleGladiator gladiatorOne = new BattleGladiator();

            gladiatorOne.Name = "gladiatorOne";
            BattleGladiator gladiatorTwo = new BattleGladiator();

            gladiatorTwo.Name = "gladiatorTwo";

            int turnCount = 0;
            PID parent    = pid;
            PID playerOne = new PID();
            PID playerTwo = new PID();

            bool isFinished = false;


            ActorMeth behaviour = (rt, self, _, msg) =>
            {
                GameReturn pOneMsg = new GameReturn();
                GameReturn pTwoMsg = new GameReturn();


                switch (msg.mtype)
                {
                case Symbol.Init:
                    playerOne = msg.content[0];
                    playerTwo = msg.content[1];

                    var startOneMsg = GameManagerService.GetStartMessage(gladiatorOne, gladiatorTwo, playerOne);
                    GameManagerService.SendStartMessage(rt.GetWebSocket(playerOne), startOneMsg);

                    var startTwoMsg = GameManagerService.GetStartMessage(gladiatorTwo, gladiatorOne, playerOne);
                    GameManagerService.SendStartMessage(rt.GetWebSocket(playerTwo), startTwoMsg);
                    break;

                case Symbol.GameAction:
                    GameAction gAction = msg.content;
                    var        skills  = new SkillRepository();

                    if ((turnCount & 1) == 0)    // gladiator a
                    {
                        if (new PID(long.Parse(gAction.PId)).ToString() == playerOne.ToString())
                        {
                            skills.UseSkill(gAction.Action, gladiatorOne, gladiatorTwo);
                            //deactive then remove buff if the turns == zero
                            if (gladiatorOne.Buffs.Count > 0)
                            {
                                foreach (Buff buff in gladiatorOne.Buffs)
                                {
                                    buff.Turns--;
                                    if (buff.Turns <= 0)
                                    {
                                        buff.DeActivate(gladiatorOne);
                                    }
                                }
                                gladiatorOne.Buffs.RemoveAll(x => x.Turns <= 0);
                            }
                        }
                        else
                        {
                            //send back msg to sync?
                        }
                    }
                    else if ((turnCount & 1) != 0)     // gladiator b
                    {
                        if (new PID(long.Parse(gAction.PId)).ToString() == playerTwo.ToString())
                        {
                            skills.UseSkill(gAction.Action, gladiatorTwo, gladiatorOne);
                            if (gladiatorTwo.Buffs.Count > 0)
                            {
                                foreach (Buff buff in gladiatorTwo.Buffs)
                                {
                                    buff.Turns--;
                                    if (buff.Turns <= 0)
                                    {
                                        buff.DeActivate(gladiatorTwo);
                                    }
                                }
                                gladiatorTwo.Buffs.RemoveAll(x => x.Turns <= 0);
                            }
                        }
                        else
                        {
                            //send back msg to sync?
                        }
                    }
                    turnCount++;
                    //send synced userdata back to user
                    pOneMsg = GameManagerService.GetReturnMessage(gladiatorOne, turnCount);
                    pTwoMsg = GameManagerService.GetReturnMessage(gladiatorTwo, turnCount);
                    if ((turnCount & 1) == 0)
                    {
                        pOneMsg.Turn       = playerOne.ToString();
                        pTwoMsg.Turn       = playerOne.ToString();
                        pOneMsg.GOneHealth = gladiatorOne.Health.ToString();
                        pTwoMsg.GOneHealth = gladiatorTwo.Health.ToString();
                        pOneMsg.GTwoHealth = gladiatorTwo.Health.ToString();
                        pTwoMsg.GTwoHealth = gladiatorOne.Health.ToString();
                    }
                    else if ((turnCount & 1) != 0)
                    {
                        pOneMsg.Turn       = playerTwo.ToString();
                        pTwoMsg.Turn       = playerTwo.ToString();
                        pOneMsg.GOneHealth = gladiatorOne.Health.ToString();
                        pTwoMsg.GOneHealth = gladiatorTwo.Health.ToString();
                        pOneMsg.GTwoHealth = gladiatorTwo.Health.ToString();
                        pTwoMsg.GTwoHealth = gladiatorOne.Health.ToString();
                    }
                    if (!isFinished)
                    {
                        if (gladiatorOne.Health <= 0)
                        {
                            pOneMsg.Winner = gladiatorTwo.Name;
                            pTwoMsg.Winner = gladiatorTwo.Name;
                            isFinished     = true;
                        }
                        if (gladiatorTwo.Health <= 0)
                        {
                            pOneMsg.Winner = gladiatorOne.Name;
                            pTwoMsg.Winner = gladiatorOne.Name;
                            isFinished     = true;
                        }
                    }

                    GameManagerService.SendReturnMessage(rt.GetWebSocket(playerOne), pOneMsg);
                    GameManagerService.SendReturnMessage(rt.GetWebSocket(playerTwo), pTwoMsg);

                    if (isFinished)
                    {
                        PID[] players = new PID[] { playerOne, playerTwo };
                        rt.Send(parent, new Mail(Symbol.Killed, players));
                        rt.Die();
                    }
                    break;

                default:
                    break;
                }

                return(null);
            };

            return(behaviour);
        }
Ejemplo n.º 6
0
 public void UseSkill(string skillName, BattleGladiator player, BattleGladiator target)
 {
     Skills[skillName].Use(player, target);
 }
Ejemplo n.º 7
0
 public override void DeActivate(BattleGladiator player)
 {
     player.Defense -= (originalDefense / 2);
 }
Ejemplo n.º 8
0
 public override void Activate(BattleGladiator player)
 {
     originalDefense = player.Defense;
     player.Defense += (originalDefense / 2);
 }