Un juego de aventura desarrollado usando Vue.js;

git clone https://github.com/bastarder/Endless.git
cd Endless
npm install
npm run devSi eres como yo, un estudiante, como el desarrollo front-end, sufre de proyectos que no practican, o ya eres un gran tiro, también podrías completar un juego tan pequeño conmigo. El sistema de combate más complejo en este juego se ha completado básicamente, y quedan algunas funciones relativamente fáciles para darle un buen ejercicio.
Este es un juego de aventura simple, y también espero hacer un mejor ejercicio durante el proceso de escritura;
Realmente no soy bueno en el diseño de datos y el diseño de la interfaz de usuario. Si siente que está dispuesto a ayudar cuando está libre, puede contactarme;
QQ:85257684 , Wechat: I85257
El sistema de combate en el juego utiliza技能冷却, enviando una habilidad a un objetivo a la vez y calculando el efecto de una acción como lógica de combate.
En primer lugar, la lógica general: (Fight.js)
Cuando技能被释放, se le dará prioridad para ingresar este método. Este método acepta 3 parámetros,技能对象,攻击方y被攻击方. Puede personalizarlo en función de estas tres partes para determinar si esta habilidad se puede liberar;
Cuando se determina que la habilidad puede liberarse con éxito, la habilidad entrará en el tiempo de reutilización;
Extraiga el estado de type : 1 del atacante y extraiga el estado del type : 2 del atacante;
type : 1 son todos los estados que pueden afectar esta habilidad, y deben crearse de acuerdo con esta regla al personalizar el estado, de lo contrario no se reconocerá;
type : 2 son todos los estados que pueden afectar los cambios causados al enemigo por esta habilidad, y deben crearse de acuerdo con esta regla al personalizar el estado, de lo contrario no se reconocerá;
Extraer y fusionar los eventos en el objeto de habilidad y estado, ordenar por prioridad;
Los objetos de acción de habilidad se calculan a partir de todos los estados y efectos de acción de habilidad y se clasifican según los pesos;
Reglas para pesos tentativos
1-10 Capa de acción, el valor de peso debe definirse en este rango para eventos relacionados con condiciones previas como Critical暴击,命中,闪避etc.;11-89 Capa normal, efectos ordinarios, como daños causados por habilidades, adición de estado, eliminación, actualización, etc., la mayoría de ellos están en la capa normal;>90 En el nivel 90 , el resultado final de esta habilidad bajo todas las bonificaciones reconocibles (como causar daños, recuperar la salud, etc.). Si su estado debe causar un最终加成, como un aumento del 50% en el daño final, entonces este evento debe definirse en el nivel 90, después de determinar el resultado del cálculo;9999 , todos los pesos no deben exceder el 9999. Al calcular esta capa, el objeto de acción se convertirá en parámetros que pueden ser ejecutados directamente por unit y no se cambiará;Después de generar el objeto de acción, determine si el ataque es válido (como Must-Win, Miss, etc. PS: se preferirá la ganancia imprescindible por más del 100%de Miss);
Después de confirmar que es válido, el objeto de acción se representará攻击者y被攻击者para tratar;
En este punto, la habilidad se libera por completo, y cada habilidad se libera es 1s , lo que significa que después de liberar una habilidad, todas las habilidades recibirán un tiempo de reutilización de 1 segundo (si el tiempo de tiempo de reutilización es inferior a 1 segundo, se verá obligado a aumentar a 1 segundo);
Un lanzamiento de habilidad termina. Si uno de los partidos atacantes y el partido atacado mueren, devuelve falso
Cálculo de consumo
La fórmula utilizada actualmente es: (Nivel * Cantidad base) * (Nivel de resistencia + 1) * Parámetros de grado
Cálculo de probabilidad
La probabilidad es fija: [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]
Cálculo de amplitud de atributos
Procesamiento después de la falla de fortalecimiento
Proceso general: juzga las condiciones previas -> juzgar la probabilidad de fortalecer -> recalcular los atributos
En el mapa, siempre podemos activar eventos para obtener efectos específicos. Actualmente hay dos eventos incorporados:
Evento de batalla : cuando el héroe ingrese a esta cuadrícula de eventos, usará el objeto del evento para crear un evento de batalla y saltar a la interfaz de batalla. Cuando termine la batalla, volverá al mapa;
Evento de diálogo : cuando el héroe ingrese a esta cuadrícula de eventos, usará el objeto del evento para crear un evento de diálogo y tendrá algunas interacciones de diálogo con el héroe, los eventos de la rama, el intercambio de elementos, etc.;
Reglas de definición de eventos:
1. 事件将在判定允许被移动后,直接执行;
2. 在执行阶段可捕获的参数有: 当前格子对象,目标格子对象,英雄对象
3. 事件必须为一个可执行的函数;
4. 详细可以参考内置事件(event-class.js)
Aquí, citamos ejemplos para explicar las reglas de definición de los objetos de habilidad;
Datos (habilidad-data.js, state-data.js), todos los formularios de cadena se convertirán en funciones ejecutables战斗技能释放,计算行动对象时;
ejemplo
{
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],
},
},
| llave | valor | DSC |
|---|---|---|
| identificación | Número | La identificación única de una habilidad |
| nombre | Cadena | El nombre de la habilidad |
| etiqueta | [Cadena] | Etiquetas de habilidad |
| tiempo predeterminado | Número | Tiempo de reescío de habilidad, Unidad Millisegundos |
| restringir | [Cadena o función] | La condición previa para el lanzamiento de habilidades. Al analizar como una función, puede acceder a 3 parámetros,技能,攻击者y被攻击者. Cuando la función devuelve verdadera, esta regla se pasa. Reglas de resolución de cadena: [对象]{属性名1} 标识符{值} , el identificador admite > < >= <= nothas has , el valor final de la expresión se juzgará como verdadero y falso se juzgará como verdadero y falso |
| lista de eventos | [Cadena o función] | La lista de eventos puede ser una función, que acepta 3 parámetros,行动对象, atacante,攻击者,被攻击者, reglas de análisis de formulario de cadena [权重]参数名@{前置条件语句}#参数名@事件@事件参数, se deben usar múltiples elementos ; separado, y la entrada final no necesita agregar un separador |
| evidente del estado | función | Estado continuo, esta función se ejecutará cuando se agrega un estado al objeto. En esta función, se puede acceder a la unidad que se actúa y se realiza un poco de procesamiento. |
| encendido | objeto | La mejora de los atributos traídas por el estado, el análisis del valor de la matriz, [值, 类型: 0:基础值1:基础百分2:高级值3:高级百分] , Fórmula de cálculo de atributos ((默认+ 基础值) * (1 + 基础百分) + 高级值) * (1 + 高级百分) |
Felicitaciones, ahora puedes crear una habilidad propia
// 装备
{
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 : '很常见的东西,或许能用来做一些东西'
},
| llave | valor | DSC |
|---|---|---|
| nivel | Número | Nivel de equipo |
| calificación | Número | El grado de equipo es白0 ,绿1 ,蓝2 ,紫3 ,橙4 |
| EQUIPTYPE | Número | 武器0 ,护肩1 ,鞋子2 ,腰带3 ,上衣4 ,绑腿5 ,戒指6 ,项链7 ,手镯8 , |
| equipar | objeto | El valor del parámetro de atributo del equipo es el mismo que el encendido del状态. |
| Intensificar | Número | Nivel de fortalecimiento |
| intpowerup | Objeto | El beneficio traído por la mejora es de $atk , y el resto de la armadura es de $dmgDown (porcentaje de reducción de daño) |
| montón | Booleano | ¿Es posible superponer? |
| precio | Número | El valor del artículo |
| Usar | objeto | El efecto del elemento se puede utilizar defaultTime :冷却时间, restrict 前置条件列表,接受函数为单个条件,this指向使用者, effect 造成的效果列表,接受函数为单个事件,this指向使用者 |
| ¿Qué tal? ¿Has descubierto que todavía no puedes crear tu propio equipo ~ no importa, es porque no lo expresé bien ~ |