Ein Abenteuerspiel, das mit Vue.js entwickelt wurde;

git clone https://github.com/bastarder/Endless.git
cd Endless
npm install
npm run devWenn Sie wie ich sind, leiden Sie wie ich, wie ein Student, wie Front-End-Entwicklung, an Projekten, die nicht üben, oder Sie sind bereits ein großer Schuss, Sie könnten ein so kleines Spiel mit mir genauso gut vervollständigen. Das komplexeste Kampfsystem in diesem Spiel wurde im Grunde genommen abgeschlossen, und es gibt einige relativ einfache Funktionen, um Ihnen eine gute Übung zu bieten.
Dies ist ein einfaches Abenteuerspiel, und ich hoffe auch, während des Schreibprozesses bessere Bewegung zu erhalten.
Ich bin wirklich nicht gut in Datendesign und UI -Design. Wenn Sie das Gefühl haben, bereit zu helfen, wenn Sie frei sind, können Sie mich kontaktieren.
QQ:85257684 , Wechat: I85257
Das Kampfsystem im Spiel verwendet技能冷却-Modus, der jeweils eine Fähigkeit an ein Ziel sendet und den Effekt einer Aktion als Kampflogik berechnet.
Zunächst die allgemeine Logik: (Fight.js)
Wenn技能被释放, wird es Priorität erteilt, diese Methode einzugeben. Diese Methode akzeptiert 3 Parameter,技能对象,攻击方und被攻击方. Sie können es anhand dieser drei Parteien anpassen, um festzustellen, ob diese Fähigkeit veröffentlicht werden kann.
Wenn die Fähigkeit entschlossen ist, erfolgreich veröffentlicht zu werden, wird die Fähigkeit in die Abklingzeit eintreten.
Extrahieren Sie den Zustand des type : 1 aus dem Angreifer und extrahieren Sie den Zustand des type : 2 vom Angreifer;
type : 1 ist alle Zustände, die diese Fähigkeit beeinflussen können und nach dieser Regel beim Anpassen des Staates erstellt werden sollten, sonst wird er nicht erkannt.
type : 2 sind alle Zustände, die die durch diese Fähigkeit dem Feind verursachten Änderungen beeinflussen können, und sollten nach dieser Regel erstellt werden, wenn der Staat angepasst wird, sonst wird er nicht erkannt.
Extrahieren und fusionieren Sie die Ereignisse in der Fähigkeit und im Zustandsobjekt, sortieren Sie nach Priorität.
Auswirkungen auf die Effekte von Skill -Action -Objekten werden aus allen Zuständen und Fertigkeitsaktionen berechnet und nach Gewichten sortiert.
Regeln für vorläufige Gewichte
1-10 Aktionsschicht, der Gewichtswert muss in diesem Bereich für Ereignisse in Bezug auf Voraussetzungen wie kritischer暴击,命中,闪避usw. definiert werden;11-89 Normale Schicht, gewöhnliche Effekte wie Schäden, die durch Fähigkeiten, Statusabschluss, Entfernung, Update usw. verursacht werden, befinden sich in der normalen Schicht;>90 In der 90 Ebene, das Endergebnis dieser Fähigkeit unter allen erkennbaren Boni (wie Schäden, Gesundheitser sichern usw.). Wenn Ihr Status einen最终加成verursachen muss, z. B. eine Erhöhung des endgültigen Schadens um 50%, muss dieses Ereignis nach Ermittlung des Berechnungsergebnisses auf der 90. Ebene definiert werden.9999 sollten alle Gewichte 9999 nicht überschreiten. Bei der Berechnung dieser Schicht wird das Aktionsobjekt in Parameter konvertiert, die direkt von unit Einheitsschnittstelle ausgeführt werden können und nicht geändert werden.Nachdem das Aktionsobjekt generiert wurde, stellen Sie fest, ob der Angriff gültig ist (z. B. Must-Win, Miss usw. PS: Das Must-Win wird über 100%FILL bevorzugt).
Nachdem bestätigt wurde, dass es gültig ist, wird das Handlungsgegenstand攻击者und被攻击者zum Bewältigung des Angreifers verfolgt.
Zu diesem Zeitpunkt ist die Fähigkeit vollständig veröffentlicht, und jede Fähigkeit wird 1s veröffentlicht, was bedeutet, dass nach der Veröffentlichung einer Fähigkeit alle Fähigkeiten eine 1 -Sekunde -Abklingzeit erhalten (wenn die Zeit für die Abklingzeit von Fähigkeiten weniger als 1 Sekunde beträgt, wird sie gezwungen, sich auf 1 Sekunde zu erhöhen).
Eine Fertigkeitsfreigabe endet. Wenn eine der angreifenden Partei und die angegriffene Partei sterben, gibt es falsch zurück
Verbrauchsberechnung
Die derzeit verwendete Formel lautet: (Ebene * Basismenge) * (Stärkestufe + 1) * Gradparameter
Zufallsberechnung
Die Wahrscheinlichkeit ist festgelegt: [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]
Attributamplitudenberechnung
Verarbeitung nach dem Verstärkungsversagen
Allgemeiner Prozess: Beurteilen Sie die Voraussetzungen -> die Wahrscheinlichkeit einer Stärkung beurteilen -> die Attribute neu berechnen
In der Karte können wir immer Ereignisse auslösen, um spezifische Effekte zu erhalten. Derzeit gibt es zwei integrierte Veranstaltungen:
Battle Event : Wenn der Held dieses Ereignisraster betritt, wird er das Ereignisobjekt verwenden, um ein Battle -Ereignis zu erstellen und zur Schlachtschnittstelle zu springen. Wenn der Kampf vorbei ist, wird er zur Karte zurückkehren;
Dialogereignis : Wenn der Held in dieses Ereignisraster eintritt, wird er das Ereignisobjekt verwenden, um ein Dialogereignis zu erstellen und einige Dialoginteraktionen mit dem Helden, den Zweig -Ereignissen, dem Elementaustausch usw. zu haben;
Ereignisdefinitionsregeln:
1. 事件将在判定允许被移动后,直接执行;
2. 在执行阶段可捕获的参数有: 当前格子对象,目标格子对象,英雄对象
3. 事件必须为一个可执行的函数;
4. 详细可以参考内置事件(event-class.js)
Hier zitieren wir Beispiele, um die Definitionsregeln von Skill -Objekten zu erläutern.
Daten (Skill-data.js, State-data.js), alle String-Formulare werden in ausführbare Funktionen umgewandelt战斗技能释放,计算行动对象时.
Beispiel
{
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],
},
},
| Schlüssel | Wert | DSC |
|---|---|---|
| Ausweis | Nummer | Die eindeutige Identifizierung einer Fähigkeit |
| Name | Saite | Der Name der Fähigkeit |
| Etikett | [String] | Fertigkeitsschilds |
| Standardzeit | Nummer | Zeitabklingzeit, Einheit Millisekunden |
| beschränken | [String oder Funktion] | Die Voraussetzung für die Freigabe von Fähigkeiten. Bei der Parsen als Funktion kann es auf 3 Parameter,技能,攻击者und被攻击者zugreifen. Wenn die Funktion wahr zurückgibt, wird diese Regel übergeben. String -Resolution -Regeln: [对象]{属性名1} 标识符{值} , Identifier unterstützt > < >= <= nothas has , der endgültige Wert des Ausdrucks wird als wahr und falsch beurteilt |
| Eventliste | [String oder Funktion] | Die Ereignisliste kann eine Funktion sein, die 3 Parameter,行动对象, Angreifer,攻击者,被攻击者, Zeichenformformular Parsen -Regeln [权重]参数名@{前置条件语句}#参数名@事件@事件参数, mehrere Elemente verwendet werden ; getrennt, und der Endeintrag muss keinen Separator hinzufügen |
| StateEvent | Funktion | Durch kontinuierlicher Zustand wird diese Funktion ausgeführt, wenn dem Objekt ein Zustand hinzugefügt wird. In dieser Funktion kann auf die zugegriffene Einheit zugegriffen werden und es erfolgt auf eine gewisse Verarbeitung. |
| Powerup | Objekt | Die Attributverbesserung, die nach Zustand, Array -Wertanalyse, [值, 类型: 0:基础值1:基础百分2:高级值3:高级百分] , Attributberechnung Formel ((默认+ 基础值) * (1 + 基础百分) + 高级值) * (1 + 高级百分) |
Herzlichen Glückwunsch, Sie können jetzt eine eigene Fähigkeit schaffen
// 装备
{
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 : '很常见的东西,或许能用来做一些东西'
},
| Schlüssel | Wert | DSC |
|---|---|---|
| Ebene | Nummer | Ausrüstungsniveau |
| Grad | Nummer | Die Ausrüstungsqualität ist白0 ,绿1 ,蓝2 ,紫3 ,橙4 |
| EquipType | Nummer | Ausrüstungstyp武器0 ,护肩1 ,鞋子2 ,腰带3 ,上衣4 ,绑腿5 ,戒指6 ,项链7 ,手镯8 , |
| ausrüsten | Objekt | Der Wert des Attributparameters des Geräts entspricht dem Einschalten状态. |
| Intensivieren | Nummer | Stärkung des Niveaus |
| intpowerup | Objekt | Der Buff, der durch die Verbesserung gebracht wurde, ist $atk und der Rest der Rüstung ist $dmgDown (prozentuale Schadensreduzierung) |
| Stapel | Boolean | Ist es möglich zu überlagern? |
| Preis | Nummer | Der Wert des Elements |
| Verwenden | Objekt | Der Effekt des Elements kann verwendet werden defaultTime :冷却时间, restrict 前置条件列表,接受函数为单个条件,this指向使用者, effect 造成的效果列表,接受函数为单个事件,this指向使用者 |
| Wie wäre es damit? Haben Sie herausgefunden, dass Sie Ihre eigene Ausrüstung immer noch nicht erstellen können ~ es spielt keine Rolle, es liegt daran, dass ich es nicht gut ausdrücken ~ ~ |