コード例 #1
0
    /// <summary>
    /// 戦闘準備
    /// お互いの与ダメージと
    /// オブジェクト、Characterスクリプト、命中率のセット
    /// </summary>
    /// <param name="_attack">攻撃側のオブジェクト</param>
    /// <param name="_interceptor">迎撃側のオブジェクト</param>
    public void BattleSetup(GameObject _attack, GameObject _interceptor)
    {
        Attack_manager _attacker = new Attack_manager();
        Attack_manager _def      = new Attack_manager();

        _battleend = false;

        //初期化
        _attacker.Initialize();
        _def.Initialize();

        //クラスセット
        _attacker.set_chara(_attack);
        _def.set_chara(_interceptor);

        //与ダメセット
        _attacker.set_atk(_def._chara._totaldef, 1);
        _def.set_atk(_attacker._chara._totaldef, 1);

        //命中率セット
        _attacker.set_hit(_def._chara._avoidance);
        _def.set_hit(_attacker._chara._avoidance);

        //必殺率セット
        _attacker.set_critical(_def._chara._totalluk);
        _def.set_critical(_attacker._chara._totalluk);

        //スキルチェック
        //_attacker.Skill_Check();
        //_def.Skill_Check();

        //戦闘処理開始
        Battle(_attacker, _def);
    }
コード例 #2
0
    /// <summary>
    /// 与ダメージ
    /// </summary>
    /// <param name="_attack">攻撃側のオブジェクト</param>
    /// <param name="_interceptor">攻撃される側のオブジェクト</param>
    public int GetDamage(GameObject _attack, GameObject _interceptor)
    {
        Attack_manager _attacker = new Attack_manager();
        Attack_manager _def      = new Attack_manager();

        //与ダメセット
        _attacker.set_atk(_def._chara._totaldef, 1);
        return(_attacker._atk);
    }
コード例 #3
0
    /// <summary>
    /// 戦闘詳細表示用
    /// 戻り値[A:HP,A:威力,A:命中,A:必殺率,D:HP,D:威力,D:命中,D:必殺率]
    /// </summary>
    /// <param name="_attack">攻撃側のオブジェクト</param>
    /// <param name="_interceptor">迎撃側のオブジェクト</param>
    /// <returns>表示用配列</returns>
    public int[] GetBattleState(GameObject _attack, GameObject _interceptor)
    {
        int[]          i         = { 0, 0, 0, 0, 0, 0, 0, 0 };
        Attack_manager _attacker = new Attack_manager();
        Attack_manager _def      = new Attack_manager();

        _battleend = false;

        //初期化
        _attacker.Initialize();
        _def.Initialize();

        //クラスセット
        _attacker.set_chara(_attack);
        _def.set_chara(_interceptor);

        //与ダメセット
        _attacker.set_atk(_def._chara._totaldef, 1);
        _def.set_atk(_attacker._chara._totaldef, 1);

        //命中率セット
        _attacker.set_hit(_def._chara._avoidance);
        _def.set_hit(_attacker._chara._avoidance);

        //必殺率セット
        _attacker.set_critical(_def._chara._totalluk);
        _def.set_critical(_attacker._chara._totalluk);

        i[0] = _attacker._chara._totalhp;
        i[1] = _attacker._atk;
        i[2] = (int)_attacker._Totalhit;
        i[3] = (int)_attacker._critical;

        i[4] = _def._chara._totalhp;
        i[5] = _def._atk;
        i[6] = (int)_def._Totalhit;
        i[7] = (int)_def._critical;

        return(i);
    }
コード例 #4
0
    /// <summary>
    /// 戦闘実行
    /// </summary>
    /// <param name="_attacker">攻撃側の構造体</param>
    /// <param name="_def">防御側の構造体</param>
    void Battle(Attack_manager _attacker, Attack_manager _def)
    {
        //それぞれの武器の耐久減少量
        var atk_stock = 0;
        var def_stock = 0;
        //それぞれの取得経験値
        var atk_exp = 0;
        var def_exp = 0;

        //カウンター時
        if (_def._counter)
        {
            for (var i = 0; i < _def._chara._attack_count; i++)
            {
                //迎撃側の攻撃
                def_exp += BattleSystem(_def, _attacker, _def._revenge, def_stock);
                def_stock++;
                if (_battleend)
                {
                    break;
                }
            }

            for (var i = 0; i < _attacker._chara._attack_count; i++)
            {
                //攻撃側の攻撃
                atk_exp += BattleSystem(_attacker, _def, 0, atk_stock);
                atk_stock++;
                if (_battleend)
                {
                    break;
                }
            }
        }
        else
        {
            for (var i = 0; i < _attacker._chara._attack_count; i++)
            {
                //攻撃側の攻撃
                atk_exp += BattleSystem(_attacker, _def, 0, atk_stock);
                atk_stock++;
                if (_battleend)
                {
                    break;
                }
            }

            for (var i = 0; i < _def._chara._attack_count; i++)
            {
                //迎撃側の攻撃
                def_exp += BattleSystem(_def, _attacker, _def._revenge, def_stock);
                def_stock++;
                if (_battleend)
                {
                    break;
                }
            }
        }



        //追撃判定
        if ((_attacker._chara._attack_speed > _def._chara._attack_speed + 3) && (_attacker._chara._totalskl > _def._chara._totalskl + 3) && _battleend == false)
        {
            for (var i = 0; i < _attacker._chara._attack_count; i++)
            {
                //攻撃側の追撃
                atk_exp += BattleSystem(_attacker, _def, 0, atk_stock);
                atk_stock++;
                if (_battleend)
                {
                    break;
                }
            }
        }
        else if ((_attacker._chara._attack_speed + 3 < _def._chara._attack_speed) && (_attacker._chara._totalskl + 3 < _def._chara._totalskl) && _battleend == false)
        {
            for (var i = 0; i < _def._chara._attack_count; i++)
            {
                //迎撃側の追撃
                def_exp += BattleSystem(_def, _attacker, _def._revenge, def_stock);
                def_stock++;
                if (_battleend)
                {
                    break;
                }
            }
        }
        //経験値加算
        _attacker.addexp(atk_exp);
        _def.addexp(def_exp);
        //装備の耐久を使った分だけ減らす
        _attacker._chara.UseEquipment(atk_stock);
        _def._chara.UseEquipment(def_stock);

        _attacker._chara.BattleEnd();
        _def._chara.BattleEnd();
    }
コード例 #5
0
    /// <summary>
    /// 戦闘処理
    /// </summary>
    /// <param name="_atkside">攻撃側</param>
    /// <param name="_defside">迎撃側</param>
    /// <param name="_addcri">必殺補正</param>
    /// <param name="weapon_stock">今の戦闘での武器の消耗</param>
    /// <returns>経験値</returns>
    int BattleSystem(Attack_manager _atkside, Attack_manager _defside, int _addcri, int weapon_stock)
    {
        if (!_battleend && _atkside._stock - weapon_stock >= 1)
        {
            //攻撃側の攻撃
            //命中判定
            if (Random.Range(0, 100) <= _atkside._Totalhit)
            {
                //命中
                //無敵判定
                if (_defside._fortress == true && Random.Range(0, 101) < _defside._chara._level)
                {
                    Debug.Log(_defside._chara._name + ":無敵!");
                }
                else
                {
                    //必殺判定
                    if (Random.Range(0, 100) <= _atkside._critical + _addcri)
                    {
                        //必殺発動
                        //力を2倍にして攻撃力を再計算
                        _defside.set_atk(_atkside._chara._totaldef, 2);
                        _defside._chara._totalhp -= _atkside._atk;
                        Debug.Log(_atkside._chara._name + ":必殺!" + _atkside._atk);
                        //吸収判定
                        if (_atkside._drain && Random.Range(0, 101) < _atkside._chara._totalskl)
                        {
                            _atkside._chara._totalhp += (_atkside._atk) / 2;
                        }
                        _defside.set_atk(_atkside._chara._totaldef, 1);
                    }
                    else
                    {
                        //通常
                        _defside._chara._totalhp -= _atkside._atk;
                        Debug.Log(_atkside._chara._name + ":命中!" + _atkside._atk);
                        //吸収判定
                        if (_atkside._drain && Random.Range(0, 101) < _atkside._chara._totalskl)
                        {
                            _atkside._chara._totalhp += _atkside._atk / 2;
                        }
                    }

                    if (_defside._chara._totalhp <= 0)
                    {
                        //根性判定
                        if (_defside._fightingspirit && Random.Range(0, 101) < _defside._chara._totalluk)
                        {
                            _defside._chara._totalhp = 1;
                        }
                        else
                        {
                            _battleend = true;
                            //戦闘終了処理
                            return(_atkside.addexpwin(_defside._chara._totalLevel));
                        }
                    }
                    else
                    {
                        return(_atkside.addexpdraw(_defside._chara._totalLevel, _atkside._atk));
                    }
                }
            }
            else
            {
                //外れ
                Debug.Log(_atkside._chara._name + ":ミス");
                return(0);
            }
        }
        return(0);
    }