Vue.jsを使用して開発されたアドベンチャーゲーム。

git clone https://github.com/bastarder/Endless.git
cd Endless
npm install
npm run devあなたが私のようである場合、フロントエンドの開発のような学生が練習しないプロジェクトに苦しんでいるか、あなたがすでに大物であるか、あなたは私と一緒にそのような小さなゲームを完了するかもしれません。このゲームで最も複雑な戦闘システムが基本的に完了しており、良いエクササイズをするためにいくつかの比較的簡単な関数が残っています。
これは簡単なアドベンチャーゲームであり、執筆プロセス中により良い運動をすることも望んでいます。
私はデータデザインとUIデザインが本当に上手ではありません。あなたが自由なときに喜んで助けてくれると感じたら、あなたは私に連絡することができます。
QQ:85257684 、 Wechat: I85257
ゲームの戦闘システムは、技能冷却モードを使用して、一度に1つのターゲットに1つのスキルを送信し、1つのアクションの効果を戦闘ロジックとして計算します。
まず第一に、一般ロジック:( fight.js)
技能被释放と、この方法を入力することが優先されます。この方法は、3つのパラメーター、技能对象、攻击方、および被攻击方を受け入れます。これらの3つのパーティーに基づいてカスタマイズして、このスキルをリリースできるかどうかを判断できます。
スキルを正常にリリースできると判断されると、スキルはクールダウンに入ります。
攻撃者からtype : 1の状態を抽出し、攻撃者からtype : 2の状態を抽出します。
type : 1は、このスキルに影響を与える可能性のあるすべての状態であり、状態をカスタマイズするときにこの規則に従って作成する必要があります。そうしないと、認識されません。
type : 2は、このスキルによって敵に引き起こされる変化に影響を与える可能性のあるすべての状態であり、状態をカスタマイズするときにこの規則に従って作成する必要があります。
スキルと状態のオブジェクトのイベントを抽出してマージし、優先順位でソートします。
スキルアクションオブジェクトは、すべての状態とスキルアクション効果から計算され、重みに従ってソートされます。
暫定的な重みのルール
1-10アクションレイヤー、クリティカル暴击、命中、闪避などの前提条件に関連するイベントについて、この範囲で重量値を定義する必要があります。11-89通常のレイヤー、スキルの追加、削除、更新などによって引き起こされる損傷など、通常の効果、それらのほとんどは通常の層にあります。>90 90では、すべての認識可能なボーナスの下でのこのスキルの最終結果(損傷の引き起こし、健康の回復など)。ステータスが最终加成ダメージの50%増加など、最終ボーナスを引き起こす必要がある場合、計算結果が決定された後、このイベントは90レベルで定義する必要があります。9999の最終層では、すべての重みが9999を超えてはなりません。このレイヤーを計算すると、アクションオブジェクトはunitインターフェイスによって直接実行され、変更されないパラメーターに変換されます。アクションオブジェクトが生成されたら、攻撃が有効かどうかを判断します(必見、ミスなど。PS:必見は100%ミスよりも優先されます)。
それが有効であることを確認した後、行動の対象は攻击者と被攻击者に対処するためにaxyされます。
この時点で、スキルは完全にリリースされ、各スキルがリリース1sれます。つまり、スキルをリリースした後、すべてのスキルが1秒のクールダウンを受け取ります(スキルクールダウン時間が1秒未満の場合、1秒に増加することを余儀なくされます)。
スキルリリースは終了します。攻撃者の1人と攻撃されたパーティーが死ぬと、それは偽りに戻ります
消費計算
現在使用されている式は次のとおりです。(レベル *ベース量) *(強度レベル + 1) *グレードパラメーター
偶然の計算
確率は固定されています:[1、1、1、0.95、0.9、0.8、0.75、0.62、0.54、0.41、0.33、0.28、0.2、0.17、0.13、0.1、0.04、0.03、0.01、0.01]]
属性振幅計算
強化障害後の処理
一般的なプロセス:前提条件を判断 - >強化する確率を判断 - >属性を再計算する
マップでは、特定の効果を得るために常にイベントをトリガーできます。現在、2つの組み込みイベントがあります。
バトルイベント:ヒーローがこのイベントグリッドに入ると、イベントオブジェクトを使用してバトルイベントを作成し、バトルインターフェイスにジャンプします。戦いが終わったら、彼は地図に戻ります。
ダイアログイベント:ヒーローがこのイベントグリッドに入ると、イベントオブジェクトを使用してダイアログイベントを作成し、ヒーロー、ブランチイベント、アイテム交換などとの対話のやり取りを行います。
イベント定義ルール:
1. 事件将在判定允许被移动后,直接执行;
2. 在执行阶段可捕获的参数有: 当前格子对象,目标格子对象,英雄对象
3. 事件必须为一个可执行的函数;
4. 详细可以参考内置事件(event-class.js)
ここでは、スキルオブジェクトの定義ルールを説明するための例を引用します。
データ(Skill-data.js、state-data.js)、すべての文字列フォームは战斗技能释放,计算行动对象时実行可能ファイル関数に変換されます。
例
{
id: 1000002,
name: '净化',
dsc : '净化中毒效果~',
label : ['测试2','伤害2'],
defaultTime : 3000,
restrict : [
"[attacker]{$mp} >= {60}",
"[attacker]{$hp} <= {250}",
"[attacker]{$skills} nothas {1000003,1000001}",
"[attacker]{$status} has {2000001}",
"[skill]{coolTime} > {0}",
function(skill, attacker, enemy){
return true;
}
],
eventList : [
`[1]enemy@changeHp@attacker.$atk`,
`[2]attacker@changeHp@2`,
`[3]
action@{action.state.isCritical === true};
attacker@{attacker.$hp > (attacker.$hp * 0.5)}
#
enemy@changeState@[{ id: 2000001, state: "ADD" }];
enemy@changeHp@attacker.$atk
`
,
`[4]action@{action.state.isCritical = true}`,
],
// 当为状态时还可以添加下面2个属性;
stateEvent : function(hero) {
var self = this;
var duration = 5;
var per = 1;
var current = 1;
self.stateEventTimer = setInterval(function(){
hero.changeHp(-30);
current +=1;
if(current > 5){
clearInterval(self.stateEventTimer);
hero.removeList('$status',self);
}
}, per * 1000);
this.actived = true;
},
powerUp : {
$maxHp : [0,0,0,0],
},
},
| 鍵 | 価値 | DSC |
|---|---|---|
| id | 番号 | スキルのユニークな識別 |
| 名前 | 弦 | スキルの名前 |
| ラベル | [弦] | スキルタグ |
| デフォルトタイム | 番号 | スキルクールダウン時間、ユニットミリ秒 |
| 制限 | [文字列または関数] | スキルリリースの前提条件。関数として解析するとき、3つのパラメーター、技能、攻击者、被攻击者にアクセスできます。関数がtrueを返すと、このルールは渡されます。文字列解像度ルール: [对象]{属性名1} 标识符{值} > < >= <= nothas has識別子サポート |
| イベントリスト | [文字列または関数] | イベントリストは、3つのパラメーター、行动对象、攻撃者、攻击者、被攻击者、文字列形式の解析ルール[权重]参数名@{前置条件语句}#参数名@事件@事件参数使用して、複数のアイテムを使用する関数にすることができます;独立しており、エンドエントリはセパレーターを追加する必要はありません |
| StateEvent | 関数 | 連続状態、この関数は、状態がオブジェクトに追加されると実行されます。この関数では、作用中のユニットにアクセスでき、一部の処理が行われます。 |
| パワーアップ | 物体 | 州が提起した属性の改善、アレイ値分析、 [值, 类型: 0:基础值1:基础百分2:高级值3:高级百分] 、属性計算式((默认+ 基础值) * (1 + 基础百分) + 高级值) * (1 + 高级百分) |
おめでとうございます、あなたは今あなた自身のスキルを作ることができます
// 装备
{
id: 30000012,
name: '精致的铁剑',
level: 1,
grade: 1,
equipType : 0,
label: [
'武器'
],
intensify : 1,
intPowerUp : {
$atk: 123
},
equip : {
$def: 2,
$atk: 15,
$maxHp : 5,
$maxMp : 5,
},
dsc : '用野草编制的手镯'
}
// 物品
{
id: 3000001,
name: '野草',
pile : true,
price : 10,
use : {
defaultTime : 1000,
restrict :[
function(){
return this.$hp > 500;
}
],
effect :[
function(){
this.changeHp(30);
}
]
},
label : [
'材料'
],
dsc : '很常见的东西,或许能用来做一些东西'
},
| 鍵 | 価値 | DSC |
|---|---|---|
| レベル | 番号 | 機器のレベル |
| 学年 | 番号 | 機器のグレードは白0 、绿1 、蓝2 、紫3 、橙4です |
| equiptype | 番号 | 機器タイプの武器0 、护肩1 、鞋子2 、腰带3 、上衣4 、绑腿5 、戒指6 、项链7 、手镯8 、 |
| 装備 | 物体 | 機器の属性パラメーターの値は状态のパワーアップと同じです。 |
| 強化 | 番号 | 強化レベル |
| intpowerup | 物体 | 拡張によって持ち込まれたバフは$atkで、残りの鎧は$dmgDownです(ダメージの減少率) |
| パイル | ブール | 重ね合わせることは可能ですか? |
| 価格 | 番号 | アイテムの値 |
| 使用 | 物体 | アイテムの効果はdefaultTime :冷却时间、 restrict 前置条件列表,接受函数为单个条件,this指向使用者、 effect 造成的效果列表,接受函数为单个事件,this指向使用者 |
| それはどうですか?あなたはまだあなた自身の機器を作ることができないことを知りましたか〜それは私がそれをうまく表現しなかったからです〜〜 |