게임 소개

이 게임은 바닐라 자바스크립트로 구현된 2d RPG게임이다. 총 10 단계의 스테이지가 있고 각 스테이지마다 몬스터가 한 마리 있다. 플레이어는 마법으로 몬스터를 무찔러야한다.

게임 링크

조작법

마법

이 게임은 코딩으로 마법을 만들 수 있다. 특정한 코드를 작성하여 다양한 게임 오브젝트를 생성하고, 이들의 속도와 크기 등의 속성을 조정할 수 있다. 또한 만들어진 물질들은 서로 상호작용을 하여 더욱 다양한 효과를 만들 수 있도록 하였다.

마법은 자바스크립트와 유사한 형식의 언어로 만들어진다. 이것을 매직코드라 하며 매직코드를 자바스크립로 파싱한 후 eval함수로 실행가능한 마법 함수가 생성된다. 단 여기서 악성 스크립트를 심을 수 없도록 몇가지 장치를 해두었다.

또한 마법의 성능에 따라 쿨타임필요한 매직포인트를 자동으로 평가해주는 시스템을 만들었다. 이 둘을 평가하는 기준은 대표적으로 “물질이 얼마만큼의 데미지를 주는지”, “마법이 얼마동안 지속되는지”가 있다.

아래는 매직코드에서 사용가능한 함수이다.

create(typenum=BLOCK,vx=0,vy=0,w=30,h=30) // typenum에 해당하는 물질을 생성하여, 속도를 vx,vy만큼 크기를 w,h만큼 조정
    //typenum = FIRE, ELECTRICITY, ICE, ARROW, ENERGY, WIND, BLOCK, TRIGGER
setTrigger(t,f) // 트리거 t에 효과 f를 부여
giveForce(e,ax,ay) // 게임유닛 e에 ax, ay만큼 속력을 부여
giveLife(e,d) // 게임유닛 e에 d만큼 라이프를 추가
invisible(e,time) // 게임유닛 e를 time시간(100분의 1초)만큼 보이지 않게 함
ove(e,x,y) // 게임유닛 e를 x,y만큼 이동시킴
addAction(e,startTime,endTime,f) // 게임유닛 e에대해 startTime(100분의 1초)부터 endTime(100분의 1초)까지 행동 f를 하게 함
getX(e) // 플레이어 기준으로 게임유닛 e의 X위치를 반환 
getY(e) // 플레이어 기준으로 게임유닛 e의 Y위치를 반환 
getVX(e) // 게임유닛 e의 X속력을 반환
getVY(e) // 게임유닛 e의 Y속력을 반환
front(d=1) // 플레이어가 보는 방향이 오른쪽이면 d, 왼쪽이면 -d를 반환

아래는 불을 쏘아보내는 매직코드의 예시이다.

@e=create(FIRE,front(10),1);
giveLife(e,10);
move(e,front(30), 0);

게임 화면

image