Um jogo de aventura desenvolvido usando o vue.js;

git clone https://github.com/bastarder/Endless.git
cd Endless
npm install
npm run devSe você é como eu, um aluno, como o desenvolvimento do front-end, sofre de projetos que não praticam, ou você já é um figurão, você também pode completar um jogo tão pequeno comigo. O sistema de combate mais complexo neste jogo foi basicamente concluído, e restam algumas funções relativamente fáceis para lhe dar um bom exercício.
Este é um jogo de aventura simples, e também espero fazer um exercício melhor durante o processo de escrita;
Eu realmente não sou bom em design de dados e design de interface do usuário. Se você sente que está disposto a ajudar quando estiver livre, entre em contato comigo;
QQ:85257684 , Wechat: I85257
O sistema de combate no jogo usa技能冷却, enviando uma habilidade para um alvo de cada vez e calculando o efeito de uma ação como a lógica de combate.
Primeiro de tudo, a lógica geral: (Fight.js)
Quando技能被释放, terá prioridade para inserir esse método. Este método aceita 3 parâmetros,技能对象,攻击方e被攻击方. Você pode personalizá -lo com base nessas três partes para determinar se essa habilidade pode ser lançada;
Quando a habilidade estiver determinada a ser capaz de ser liberada com sucesso, a habilidade entrará em recarga;
Extraia o estado do type : 1 do invasor e extraia o estado do type : 2 do invasor;
type : 1 são todos os estados que podem afetar essa habilidade e devem ser criados de acordo com esta regra ao personalizar o estado, caso contrário, não será reconhecida;
type : 2 são todos os estados que podem afetar as mudanças causadas ao inimigo por essa habilidade e devem ser criadas de acordo com esta regra ao personalizar o estado, caso contrário, ela não será reconhecida;
Extrair e mesclar os eventos no objeto de habilidade e estado, classificar por prioridade;
Os objetos de ação de habilidade são calculados a partir de todos os estados e efeitos da ação da habilidade e classificados de acordo com os pesos;
Regras para pesos tentativos
1-10 Camada de ação, o valor do peso precisa ser definido nesse intervalo para eventos relacionados a pré-condições, como暴击crítico,命中,闪避etc.;11-89 Camada normal, efeitos comuns, como danos causados por habilidades, adição de status, remoção, atualização etc., a maioria deles está na camada normal;>90 No 90 nível, o resultado final dessa habilidade em todos os bônus reconhecíveis (como causar danos, recuperar a saúde etc.). Se o seu status precisar causar um最终加成, como um aumento de 50% no dano final, esse evento deverá ser definido no 90º nível, após o resultado do resultado do cálculo;9999 , todos os pesos não devem exceder 9999. Ao calcular essa camada, o objeto de ação será convertido em parâmetros que podem ser executados diretamente pela interface unit e não serão alterados;Depois que o objeto de ação for gerado, determine se o ataque é válido (como must-win, erra, etc. ps: o must-win será preferido com mais de 100%de falta);
Depois de confirmar que é válido, o objeto de ação será procurado ao攻击者e被攻击者para lidar;
Nesse ponto, a habilidade é totalmente liberada e cada habilidade é lançada é 1s , o que significa que, depois de liberar uma habilidade, todas as habilidades receberão um segundo segundo tempo (se o tempo de recarga de habilidade for menor que 1 segundo, será forçado a aumentar para 1 segundo);
Uma liberação de habilidade termina. Se uma das partes atacantes e a parte atacada morre, ela retorna falsa
Cálculo do consumo
A fórmula atualmente usada é: (Nível * Quantidade base) * (nível de força + 1) * Parâmetros de grau
Cálculo acaso
A probabilidade é fixa: [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 da amplitude do atributo
Processamento após a falha do fortalecimento
Processo geral: julgue as condições prévias -> julgar a probabilidade de fortalecer -> recalcular os atributos
No mapa, sempre podemos desencadear eventos para obter efeitos específicos. Atualmente, existem dois eventos internos:
Evento de batalha : quando o herói entrar nesta grade do evento, ele usará o objeto de evento para criar um evento de batalha e pular para a interface de batalha. Quando a batalha terminar, ele retornará ao mapa;
Evento de diálogo : quando o herói entrar nesta grade do evento, ele usará o objeto de evento para criar um evento de diálogo e ter algumas interações de diálogo com o herói, eventos de ramificação, troca de itens, etc.;
Regras de definição de evento:
1. 事件将在判定允许被移动后,直接执行;
2. 在执行阶段可捕获的参数有: 当前格子对象,目标格子对象,英雄对象
3. 事件必须为一个可执行的函数;
4. 详细可以参考内置事件(event-class.js)
Aqui, citamos exemplos para explicar as regras de definição de objetos de habilidade;
Dados (Skill-Data.js, State-Data.js), todos os formulários de string serão convertidos em funções executáveis战斗技能释放,计算行动对象时;
exemplo
{
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],
},
},
| chave | valor | dsc |
|---|---|---|
| eu ia | Número | A identificação única de uma habilidade |
| nome | Corda | O nome da habilidade |
| rótulo | [Corda] | Tags de habilidade |
| padrão de padrão | Número | Tempo de recarga de habilidade, unidade milissegundos |
| restringir | [String ou função] | A pré -condição para liberação de habilidades. Ao analisar como uma função, ele pode acessar 3 parâmetros,技能,攻击者e被攻击者. Quando a função retorna true, essa regra é aprovada. Regras de resolução da string: [对象]{属性名1} 标识符{值} , o identificador suporta > < >= <= nothas has , o valor final da expressão será julgado como verdadeiro e falso |
| Eventlist | [String ou função] | A lista de eventos pode ser uma função, que aceita 3 parâmetros,行动对象, invasor,攻击者,被攻击者, formulário de cordas de análise de regras [权重]参数名@{前置条件语句}#参数名@事件@事件参数, vários itens devem ser usados ; separado, e a entrada final não precisa adicionar um separador |
| StateEvent | função | Estado contínuo, essa função será executada quando um estado for adicionado ao objeto. Nesta função, a unidade que está sendo acionada pode ser acessada e algum processamento é feito. |
| PowerUp | objeto | A melhoria do atributo trazida pelo estado, análise de valor da matriz, [值, 类型: 0:基础值1:基础百分2:高级值3:高级百分] , fórmula de cálculo de atributos ((默认+ 基础值) * (1 + 基础百分) + 高级值) * (1 + 高级百分) |
Parabéns, agora você pode criar uma habilidade própria
// 装备
{
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 : '很常见的东西,或许能用来做一些东西'
},
| chave | valor | dsc |
|---|---|---|
| nível | Número | Nível de equipamento |
| nota | Número | O grau de equipamento é白0 ,绿1 ,蓝2 ,紫3 ,橙4 |
| EquipType | Número | 武器0 ,护肩1 ,鞋子2 ,腰带3 ,上衣4 ,绑腿5 ,戒指6 ,项链7 ,手镯8 , |
| equipar | objeto | O valor do parâmetro de atributo do equipamento é o mesmo que a potência do状态. |
| Intensificar | Número | Nível de fortalecimento |
| IntPowerup | Objeto | O buff trazido pelo aprimoramento é $atk , e o restante da armadura é $dmgDown (redução percentual de danos) |
| pilha | Booleano | É possível sobrepor |
| preço | Número | O valor do item |
| Usar | objeto | O efeito do item pode ser usado defaultTime :冷却时间, restrict 前置条件列表,接受函数为单个条件,this指向使用者, effect 造成的效果列表,接受函数为单个事件,this指向使用者 |
| Que tal? Você descobriu que ainda não pode criar seu próprio equipamento ~ não importa, é porque eu não o expressei bem ~ |