Skip to content

yhcho0405/CodeMos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

header

CodeMos - 착륙 알고리즘(PS) 게임

  • CodeMos는 추락하는 우주선을 안전하게 착륙시키는 착륙 알고리즘을 작성하는 게임입니다. 🚀
  • 우주선의 착륙 안정성과, 착륙 시간으로 다른 유저들과 경쟁할 수 있습니다.
  • 우주선은 매 판 랜덤하게 추락하기 때문에 어떠한 상황에서도 안전하게 착륙하는 범용적인 알고리즘을 작성해보세요.
  • lunar-lander프로젝트Elevator Saga, 그리고 BOJ로 부터 영감을 얻었습니다.

Table of Contents

  1. Getting Started
  2. How to Play
    1. 게임 입장 화면
    2. 게임 시작 화면
    3. API Docs와 Code Editor
    4. Code Apply
    5. 게임 결과 화면
  3. API Function Docs
  4. 기술 스택
  5. Reference
  6. License

Getting Started

Running on LocalHost

$> npx http-server

실행 영상

Video Label

How to play

게임 입장 화면

image

게임 시작 화면

image

API Docs와 Code Editor

image

  • 좌측 하단의 Docs 버튼을 누르면 우주선의 상태를 받아오고 엔진을 조작하는 API 함수에 대한 설명을 제공합니다.

image

  • 우측 하단의 Code 버튼을 누르면 코드 에디터가 열립니다. 코드 에디터에 우주선 착륙 알고리즘을 작성할 수 있습니다.

image

  • 경계선을 드래그하여 크기를 조절할 수 있습니다.

Code Apply

image

  • Apply 버튼을 클릭해 코드 에디터에 작성한 코드를 우주선에 적용할 수 있습니다. 이후부터 우주선은 적용된 알고리즘에 따라 제어됩니다.

image

게임 결과 화면

image

  • 착륙 속도 12.0 MPH, 착륙 각도 11.0° 미만일 때 착륙으로 간주합니다.

image

  • 초과한 상태로 지면에 닿는다면 추락으로 간주합니다. 추락일 경우에는 점수가 음수로 환산되어 리더보드에 등록됩니다.

리더보드

image

  • 게임이 끝나면 이번 게임에 적용된 알고리즘과 결과를 서버에 저장할지 선택할 수 있습니다.(알고리즘을 통해 조작된 결과만 가능, 키보드 조작시 저장 불가)
  • 저장하면 해당 코드와 결과는 서버에 저장되고, 내 프로필에서 코드들을 볼 수 있습니다.

image

  • 프로필에 들어가면 저장한 알고리즘들을 확인할 수 있습니다.
  • 이 중 마음에 드는 결과를 리더보드에 계정당 한 개 등록할 수 있습니다.

image

  • 리더보드에는 플레이어가 등록한 알고리즘과 점수 순위를 표시합니다.
  • 1등부터 10등까지는 알고리즘이 비공개됩니다.

image

  • 11등 이후 기록은 어떤 알고리즘인지 직접 확인할 수 있습니다.

API Function Docs

게임 내에서 우주선 착륙 알고리즘을 작성 할 때 사용 가능한 함수들에 대한 설명입니다.API Docs

Tip

  1. JS ES6의 모든 문법을 사용해 CodeMos 우주선 알고리즘을 작성할 수 있습니다.
  2. 알고리즘이 작동하지 않는다면 코드를 잘못 짠게 아닐지 고민해 보세요.
  3. 버그가 발견되었다면 이스터에그입니다.

main loop

CodeMos 알고리즘에서 main loop는 아래와 같이 "newInterval"에 할당되어야 합니다. "newInterval"에 할당하지 않고 setInterval을 호출할 시 초기화 오류가 발생할 수 있습니다. interval 간격은 수정할 수 있습니다.

// TODO: 
newInterval = setInterval(() => {
    // TODO: 
}, 1); // 1ms loop
// TODO: 
// Incorrect Example

setInterval(() => {
    // something something
}, 1);

Algorithm Writing Example

전역 스코프에서 함수와 변수를 정의할 수 있습니다. 아래는 착륙 알고리즘 예제 입니다.(고득점 불가)

var targetHeight = 0; // Landing altitude

function engineCtrl() { // Engine control depending on altitude
    if (getVelocityY() * 5 > (getHeight() - targetHeight))
        engineOn();
    else
        engineOff();
}

newInterval = setInterval(() => { // main loop
    if (getAngle() > 0) { // Adjusting the angle of the spaceship
        stopRightRotation();
        rotateLeft();
    } else {
        stopLeftRotation();
        rotateRight();
    }
    engineCtrl();
}, 1);

Well-Written Landing Algorithm Example

landing_sample (1)

// 비밀 ~

Get Methods

getVelocityX

이 함수는 우주선의 현재 수평 속도를 실수형으로 반환합니다.

  • 음수 : 우주선이 좌로 이동 중
  • 양수 : 우주선이 우로 이동 중
getVelocityX()

getVelocityY

이 함수는 우주선의 현재 수직 속도를 실수형으로 반환합니다.

  • 음수 : 우주선이 위로 이동 중
  • 양수 : 우주선이 아래로 이동 중
getVelocityY()

getAngle

이 함수는 우주선의 현재 각도를 실수형으로 반환합니다.(-180.0 ~ +180.0)

getAngle()

getHeight

이 함수는 우주선의 현재 고도(ft, 피트)를 정수형으로 반환합니다. 착륙지점의 고도는 0ft 입니다.

getHeight()

getRotationVelocity

이 함수는 우주선의 현재 각속도를 실수형으로 반환합니다.

  • 음수 : 우주선이 반시계 방향으로 회전 중
  • 양수 : 우주선이 시계 방향으로 회전 중
getRotationVelocity()

Set Methods

engineOn

이 함수를 호출하면 우주선의 주 엔진을 작동시킵니다.

image
engineOn()

engineOff

이 함수를 호출하면 우주선의 주 엔진을 정지합니다.

engineOff()

rotateLeft

이 함수를 호출하면 우주선의 좌측 추진체을 작동합니다. (우주선의 각속도가 증가합니다.)

image
rotateLeft()

stopLeftRotation

이 함수를 호출하면 우주선의 좌측 추진체을 정지합니다.

stopLeftRotation()

rotateRight

이 함수를 호출하면 우주선의 우측 추진체을 작동합니다. (우주선의 각속도가 감소합니다.)

image
rotateRight()

stopRightRotation

이 함수를 호출하면 우주선의 우측 추진체을 정지합니다.

stopRightRotation()

Utility Methods

logging

이 함수는 Get Method 들의 반환값을 console에 표시합니다.

logging()

/*
f12 -> [console output]

getVelocityX()        : 11.39214005489352
getVelocityY()        : 27.95145243876781
getAngle()            : -60.2
getHeight()           : 239
getRotationVelocity() : 0.37505750000014804
*/

TMI

  1. CodeMos 행성은 중력(4.29158 m/s²) 외에는 어떠한 힘도 작용하지 않습니다.
  2. 주 엔진 thrust : Δ10.729 m/s
  3. 좌, 우측 엔진 thrust: Δ1.2 rotational velocity/s
  4. 착륙 속도 0.0 MPH, 착륙 각도 0.0° 일 때, 100점을 획득합니다.

기술 스택

image

Reference

License

This project is licensed under the MIT License

About

우주선 착륙 알고리즘 구현 게임

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •