لعبة مغامرة تم تطويرها باستخدام Vue.js ؛

git clone https://github.com/bastarder/Endless.git
cd Endless
npm install
npm run devإذا كنت مثلي ، فإن طالبًا ، مثل التطوير الأمامي ، يعاني من مشاريع لا تمارس ، أو كنت بالفعل لقطة كبيرة ، فقد تكمل هذه اللعبة الصغيرة معي. تم الانتهاء من النظام القتالي الأكثر تعقيدًا في هذه اللعبة بشكل أساسي ، وهناك بعض الوظائف السهلة نسبيًا المتبقية لإعطائك تمرينًا جيدًا.
هذه لعبة مغامرة بسيطة ، وآمل أيضًا أن أحصل على تمرين أفضل أثناء عملية الكتابة ؛
أنا حقًا لست جيدًا في تصميم البيانات وتصميم واجهة المستخدم. إذا كنت تشعر أنك على استعداد للمساعدة عندما تكون حراً ، فيمكنك الاتصال بي ؛
QQ:85257684 ، Wechat: I85257
يستخدم نظام القتال في اللعبة وضع技能冷却، وإرسال مهارة واحدة إلى هدف واحد في وقت واحد ، وحساب تأثير إجراء واحد كمنطق القتال.
بادئ ذي بدء ، المنطق العام: (Fight.js)
عندما技能被释放، سيتم إعطاء الأولوية لإدخال هذه الطريقة. تقبل هذه الطريقة 3 معلمات ،技能对象،攻击方،被攻击方. يمكنك تخصيصها بناءً على هذه الأطراف الثلاثة لتحديد ما إذا كان يمكن إصدار هذه المهارة ؛
عندما يتم تحديد المهارة لتكون قادرة على إطلاقها بنجاح ، ستدخل المهارة التباطؤ ؛
استخراج حالة type : 1 من المهاجم ، واستخراج حالة type : 2 من المهاجم ؛
type : 1 هي جميع الحالات التي يمكن أن تؤثر على هذه المهارة ، ويجب إنشاءها وفقًا لهذه القاعدة عند تخصيص الدولة ، وإلا فلن يتم الاعتراف بها ؛
type : 2 هي جميع الحالات التي يمكن أن تؤثر على التغييرات الناتجة عن العدو من خلال هذه المهارة ، ويجب إنشاءها وفقًا لهذه القاعدة عند تخصيص الدولة ، وإلا فلن يتم الاعتراف بها ؛
استخراج ودمج الأحداث في كائن المهارة والدولة ، فرز حسب الأولوية ؛
يتم حساب كائنات عمل المهارة من جميع الدول وتأثيرات عمل المهارة وفرزها وفقًا للأوزان ؛
قواعد الأوزان المبدئية
1-10 طبقة الإجراء ، يجب تحديد قيمة الوزن في هذا النطاق للأحداث المتعلقة بالشروط المسبقة مثل暴击الحرجة命中闪避وما إلى ذلك ؛11-89 الطبقة العادية ، والآثار العادية ، مثل الأضرار الناجمة عن المهارات ، وإضافة الحالة ، والإزالة ، والتحديث ، وما إلى ذلك ، معظمها في الطبقة العادية ؛>90 في المستوى 90 ، والنتيجة النهائية لهذه المهارة تحت جميع المكافآت المعروفة (مثل التسبب في أضرار ، واستعادة الصحة ، وما إلى ذلك). إذا احتاجت حالتك إلى التسبب في最终加成، مثل زيادة بنسبة 50 ٪ في الضرر النهائي ، فيجب تحديد هذا الحدث في المستوى 90 ، بعد تحديد نتيجة الحساب ؛9999 ، يجب ألا تتجاوز جميع الأوزان 9999. عند حساب هذه الطبقة ، سيتم تحويل كائن الإجراء إلى معلمات يمكن تنفيذها مباشرة بواسطة واجهة unit ولن يتم تغييرها ؛بعد إنشاء كائن الإجراء ، حدد ما إذا كان الهجوم صالحًا (مثل الفوز ، والملكة ، إلخ.
بعد التأكيد على أنه صالح ، سيتم تكييف كائن العمل攻击者والشخص被攻击者للتعامل معه ؛
في هذه المرحلة ، يتم إصدار المهارة بالكامل ، ويتم إصدار كل مهارة هي 1s ، مما يعني أنه بعد إطلاق مهارة ، ستتلقى جميع المهارات تباطؤًا ثانية واحدة (إذا كان وقت التباطؤ في المهارة أقل من ثانية واحدة ، فسيتم إجباره على الزيادة إلى ثانية واحدة) ؛
ينتهي إطلاق المهارات. إذا توفي أحد الحزب المهاجم والحزب الذي تم الهجوم ، فإنه يعود كاذب
حساب الاستهلاك
الصيغة المستخدمة حاليًا هي: (المستوى * المبلغ الأساسي) * (مستوى القوة + 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]
حساب السمة حساب
المعالجة بعد فشل تعزيز
العملية العامة: الحكم على الشروط المسبقة -> الحكم على احتمال تعزيز -> إعادة حساب السمات
في الخريطة ، يمكننا دائمًا تشغيل الأحداث للحصول على تأثيرات محددة. يوجد حاليًا حدثان مدمجان:
حدث المعركة : عندما يدخل البطل شبكة الحدث هذه ، سيستخدم كائن الحدث لإنشاء حدث معركة والقفز إلى واجهة المعركة. عندما تنتهي المعركة ، سيعود إلى الخريطة ؛
حدث الحوار : عندما يدخل البطل شبكة الحدث هذه ، سيستخدم كائن الحدث لإنشاء حدث حوار ، ولديه بعض تفاعلات الحوار مع البطل ، أحداث الفرع ، تبادل العناصر ، إلخ.
قواعد تعريف الحدث:
1. 事件将在判定允许被移动后,直接执行;
2. 在执行阶段可捕获的参数有: 当前格子对象,目标格子对象,英雄对象
3. 事件必须为一个可执行的函数;
4. 详细可以参考内置事件(event-class.js)
هنا ، نقتبس أمثلة لشرح قواعد تعريف كائنات المهارة ؛
البيانات (المهارات data.js ، الحالة-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 |
|---|---|---|
| بطاقة تعريف | رقم | تحديد فريد من المهارة |
| اسم | خيط | اسم المهارة |
| ملصق | [خيط] | علامات المهارات |
| وقت الافتراض | رقم | وقت التباطؤ في المهارة ، وحدة ميلي ثانية |
| يقيد | [سلسلة أو وظيفة] | الشرط المسبق لإطلاق المهارات. عند التحليل كدالة ، يمكنه الوصول إلى 3 معلمات技能攻击者被攻击者. عندما تُرجع الوظيفة بشكل صحيح ، يتم تمرير هذه القاعدة. قواعد دقة السلسلة: [对象]{属性名1} 标识符{值} ، يدعم المعرف > < >= <= nothas has ، سيتم الحكم على القيمة النهائية للتعبير على أنها صحيحة وكاذبة |
| قائمة الأحداث | [سلسلة أو وظيفة] | يمكن أن تكون قائمة الأحداث وظيفة ، تقبل 3 معلمات ،行动对象، المهاجم ،攻击者،被攻击者، قواعد تحليل النموذج [权重]参数名@{前置条件语句}#参数名@事件@事件参数، يجب استخدام عناصر متعددة ; منفصل ، ولا يحتاج الإدخال النهائي إلى إضافة فاصل |
| الدولة | وظيفة | الحالة المستمرة ، سيتم تنفيذ هذه الوظيفة عند إضافة دولة إلى الكائن. في هذه الوظيفة ، يمكن الوصول إلى الوحدة التي يتم تصرفها ويتم إجراء بعض المعالجة. |
| powerup | هدف | تحسين السمة الذي جلبته الحالة ، تحليل قيمة الصفيف ، [值, 类型: 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指向使用者 |
| ماذا عن ذلك؟ هل اكتشفت أنه لا يزال بإمكانك إنشاء أجهزتك الخاصة - لا يهم ، فذلك لأنني لم أعبر عنها جيدًا ~ |