vue.js를 사용하여 개발 된 모험 게임;

git clone https://github.com/bastarder/Endless.git
cd Endless
npm install
npm run dev당신이 나와 같은 경우, 프론트 엔드 개발과 같은 학생이 연습하지 않는 프로젝트로 고통 받거나 이미 큰 샷을 겪고 있다면, 당신은 나와 함께 작은 게임을 완성 할 수 있습니다. 이 게임에서 가장 복잡한 전투 시스템은 기본적으로 완료되었으며, 좋은 운동을하기 위해 비교적 쉬운 기능이 남아 있습니다.
이것은 간단한 모험 게임이며 글쓰기 과정에서 더 나은 운동을하기를 희망합니다.
나는 데이터 디자인과 UI 디자인에 능숙하지 않습니다. 당신이 자유로울 때 기꺼이 도와 줄 것이라고 생각한다면, 당신은 저에게 연락 할 수 있습니다.
QQ:85257684 , Wechat: I85257
게임의 전투 시스템은技能冷却모드를 사용하여 한 번에 하나의 대상에 하나의 기술을 보내고 한 가지 행동의 효과를 전투 논리로 계산합니다.
우선, 일반 논리 : (Fight.js)
技能被释放되면이 방법을 입력하는 것이 우선 순위가 부여됩니다. 이 방법은 3 개의 매개 변수,技能对象,攻击方및被攻击方수용합니다. 이 세 당사자를 기반으로이 기술을 공개 할 수 있는지 여부를 결정할 수 있습니다.
기술이 성공적으로 출시 될 수 있다고 결정되면이 기술은 재사용 대기 시간에 들어갑니다.
type : 1 공격자로부터 1을 추출하고 type : 2 의 상태를 추출하십시오.
type : 1 기술에 영향을 줄 수있는 모든 주이며, 상태를 사용자 정의 할 때이 규칙에 따라 만들어 져야합니다. 그렇지 않으면 인식되지 않습니다.
type : 2 는이 기술에 의해 적에게 발생하는 변화에 영향을 줄 수있는 모든 주이며, 상태를 사용자 정의 할 때이 규칙에 따라 만들어 져야합니다. 그렇지 않으면 인식되지 않습니다.
기술과 상태 대상의 이벤트를 추출하고 병합하여 우선 순위별로 정렬하십시오.
기술 액션 객체는 모든 주 및 기술 행동 효과에서 계산되며 가중치에 따라 분류됩니다.
잠정적 인 무게에 대한 규칙
1-10 액션 층, 중량 값은 Critical暴击,命中,闪避등과 같은 전제 조건과 관련된 이벤트에 대해이 범위에서 정의되어야합니다.;11-89 정상 레이어, 기술로 인한 손상, 상태 추가, 제거, 업데이트 등과 같은 일반적인 효과, 대부분은 일반 레이어에 있습니다.>90 90 수준에서는 모든 인식 가능한 보너스 (예 : 손상을 유발, 건강 회복 등) 에서이 기술의 최종 결과입니다. 상태가最终加成일으켜야하는 경우 계산 결과가 결정된 후이 이벤트를 90 레벨로 정의해야합니다.9999 의 최종 레이어에서 모든 가중치는 9999를 초과해서는 안됩니다.이 레이어를 계산할 때 액션 객체는 unit 인터페이스에 의해 직접 실행될 수있는 매개 변수로 변환되며 변경되지 않습니다.액션 객체가 생성 된 후, 공격이 유효한지 여부를 결정하십시오 (예 : Must-Win, Miss 등 등. PS : 100%이상 미스가 선호됩니다).
그것이 유효하다는 것을 확인한 후에, 행동 대상은攻击者와被攻击者에게 대비 될 것이다.
이 시점에서 기술이 완전히 출시되고 각 기술이 출시됩니다 1s 즉, 기술을 공개 한 후 모든 기술이 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]
속성 진폭 계산
강화 실패 후 처리
일반 프로세스 : 전제 조건 판단 -> 강화 확률 -> 속성을 다시 계산할 수 있습니다.
지도에서는 항상 이벤트를 트리거하여 특정 효과를 얻을 수 있습니다. 현재 두 가지 내장 이벤트가 있습니다.
배틀 이벤트 : 영웅 이이 이벤트 그리드에 들어가면 이벤트 객체를 사용하여 전투 이벤트를 만들고 전투 인터페이스로 점프합니다. 전투가 끝나면 그는지도로 돌아갑니다.
대화 이벤트 : 영웅 이이 이벤트 그리드에 들어가면 이벤트 객체를 사용하여 대화 이벤트를 만들고 영웅, 지점 이벤트, 항목 교환 등과 대화 할 수 있습니다.
이벤트 정의 규칙 :
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 표현식의 최종 값이 true 및 false로 판단됩니다. |
| 이벤트리스트 | [문자열 또는 함수] | 이벤트 목록은 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指向使用者 |
| 어때? 당신은 여전히 당신이 당신의 나만의 장비를 만들 수 없다는 것을 알았습니까? ~ 그것은 중요하지 않습니다. 그것은 내가 그것을 잘 표현하지 않았기 때문입니다 ~ |