Beispiel #1
0
    // Start is called before the first frame update
    void Start()
    {
        Character Player1 = Character1.GetComponent <Character>();
        Character Player2 = Character2.GetComponent <Character>();
        Character Player3 = Character3.GetComponent <Character>();
        Character Player4 = Character4.GetComponent <Character>();
        Enemy     Enemy1  = EnemyBattler.GetComponent <Enemy>();

        //Jag vet inget mer effektivt sätt att samla allt i en Public lista än det här
        CharacterList.Add(Player1);
        CharacterList.Add(Player2);
        CharacterList.Add(Player3);
        CharacterList.Add(Player4);

        EnemyList.Add(Enemy1);

        PositionList.Add(Character1);
        PositionList.Add(Character2);
        PositionList.Add(Character3);
        PositionList.Add(Character4);

        attackButton.onClick.AddListener(Attack);
        skillButton.onClick.AddListener(Skills);
        personaButton.onClick.AddListener(Personas);
        guardButton.onClick.AddListener(Guard);

        cancel.onClick.AddListener(Cancel);

        dataHandler = dataHandlerOBJ.GetComponent <Ownership>();
    }
Beispiel #2
0
    public Skill DetermineSkill(BattleContext context, Skill[] skills)
    {
        (Skill, int priority)candidate = (null, -context.Enemy.Hp);

        // シミュレーション中に発動するスキルのメッセージを表示しないようにするためのクローン
        var cloneContext = new BattleContext(new NullView())
        {
            Enemy  = context.Enemy,
            Player = context.Player
        };

        foreach (var skill in skills)
        {
            // シミュレーション中に敵が受けるダメージを実際には反映しないためのクローン
            // 割愛しているが、実際はプレイヤーのクローンも生成しておいたり、
            // バトラーのクローンはBattleContext.Enemyなどにもsetしておいたほうが
            // 独特なスキルをたくさん実装する際に安全
            var clone = new EnemyBattler()
            {
                Hp      = context.Enemy.Hp,
                Defense = context.Enemy.Defense
            };

            skill.Run(cloneContext, clone);

            var priority = -clone.Hp;
            if (candidate.priority < priority)
            {
                candidate = (skill, priority);
            }
        }

        return(candidate.Item1);
    }
Beispiel #3
0
    public static void Main()
    {
        var enemy1 = new EnemyBattler()
        {
            Hp      = 45,
            Defense = 25,
        };
        var enemy2 = new EnemyBattler()
        {
            Hp      = 100,
            Defense = 0,
        };
        var enemy3 = new EnemyBattler()
        {
            Hp      = 100,
            Defense = 19,
        };

        var context = new BattleContext(new ConsoleView())
        {
            Enemy  = enemy2,
            Player = new PlayerBattler()
            {
                Hp      = 100,
                Defense = 0,
                Skills  = new Skill[]
                {
                    new SingleAttackSkill(87),
                    new TripleAttackSkill(39),
                }
            }
        };

        context.View.Talk($"プレイヤーのHP:{context.Player.Hp}");
        context.View.Talk($"敵のHP:{context.Enemy.Hp}");

        while (true)
        {
            context.Player.Act(context);
            if (context.Enemy.Hp <= 0)
            {
                context.View.Talk("敵は倒れた!");
                context.View.Talk("プレイヤーの勝ち");
                return;
            }

            context.Enemy.Act(context);
            if (context.Player.Hp <= 0)
            {
                context.View.Talk("プレイヤーは倒れた!");
                context.View.Talk("敵の勝ち");
                return;
            }
        }
    }
 public override void Awake(StateMachine stateMachine)
 {
     _enemyTrans   = GameObject.FindGameObjectWithTag("Player").transform;
     _enemyBattler = stateMachine.GetComponent <EnemyBattler>();
 }
 public override void Awake(StateMachine stateMachine)
 {
     _enemyBattler = stateMachine.GetComponent <EnemyBattler>();
 }