Player 1과 Player 2의 코드가 일대일로 대결하는 방식이며, 프로그래밍 언어는 JAVASCRIPT 입니다.
게임의 규칙을 확인하시고, Player 1과 Player 2의 코드를 작성하신 후, 게임시작 버튼을 누르면 배틀이 시작됩니다.
1 Game은 5 Round로 구성되고, 1 Round는 200 Turn으로 구성됩니다.
각 Game, Round, Turn의 시작과 끝에서 onGameStart, onRoundStart, onTurnStart, onTurnEnd, onRoundEnd, onGameEnd 함수가 호출되며, 사용자는 각 함수에 자신의 로직을 구현하면 됩니다.
게임의 규칙에 맞게 기본 전략을 세우고, 상대의 패턴을 분석하여 onTurnStart에서 최선의 선택을 반환하는 것이 승리의 핵심요소입니다.
게임 규칙
- 각 Turn에서 공격수단과 공격위치를 선택합니다.
- 공격수단: 주먹(1), 발차기(2)
- 공격위치: 머리(1), 몸통(2), 다리(3)
- 머리, 몸통, 다리 공격의 성공여부는 가위바위보 룰과 같습니다.
- 머리 공격(1)은 몸통 공격(2)에게 진다.
- 몸통 공격(2)은 다리 공격(3)에게 진다.
- 다리 공격(3)은 머리 공격(1)에게 진다.
- 공격수단이 주먹(1)인 경우,
- 머리 공격(1) 성공시, 4점
- 몸통 공격(2) 성공시, 3점
- 다리 공격(3) 성공시, 2점
- 공격수단이 발차기(2)인 경우,
- 머리 공격(1) 성공시, 6점
- 몸통 공격(2) 성공시, 5점
- 다리 공격(3) 성공시, 4점
- 공격위치가 같은 경우,
- 공격수단도 같으면 비긴다. (점수 없음)
- 주먹(1) vs 발차기(2) 에서, 주먹(1)이 이긴다.
class {
/**
* 코드는 JAVASCRIPT 로 작성해 주시고, 위의 첫줄과 on...() 메소드의 이름은 변경하지 말아주세요.
*/
/**
* 플레이어의 이름 또는 닉네임을 입력해 주세요.
* 그대로 두면 Player1 또는 Player2로 replace 됩니다.
* player_name은 printLog 할때 누구의 로그인지를 구분하기 위해 사용할 수 있고,
* TURN / ROUND / GAME 현황판에 표시됩니다.
*/
player_name = "_will be replaced_";
/**
* 게임이 시작되면 호출됩니다.
* 게임 중에 사용할 변수들의 초기화를 여기서 합니다.
*/
onGameStart() {
// printLog(string)는 플레이 영역 하단의 게임 로그 영역에 텍스트를 출력하는 함수입니다.
printLog(this.player_name+": onGameStart!");
}
/**
* 라운드가 시작되면 호출됩니다.
* 1번의 게임은 5번의 라운드를 실행합니다.
*/
onRoundStart() {
printLog(this.player_name+": onRoundStart!");
}
/**
* 턴이 시작되면 호출됩니다.
* 1번의 라운드는 200번의 턴을 실행합니다.
* @return [공격수단, 공격위치]
* 공격수단: 1(주먹), 2(발차기)
* 공격위치: 1(머리), 2(몸통), 3(다리)
*/
onTurnStart() {
// 공격수단 1 or 2 중 랜덤 선택
let punch_or_kick = Math.floor((Math.random() * 2) + 1);
// 공격위치 1 or 2 or 3 중 랜덤 선택
let hitting_area = Math.floor((Math.random() * 3) + 1);
printLog(this.player_name+": onTurnStart! punch_or_kick:"+punch_or_kick+", hitting_area:"+hitting_area);
return [punch_or_kick, hitting_area];
}
/**
* 턴이 끝나면 호출되며, 턴의 결과를 받아봅니다.
* @param result
* result.win: -1(졌을때) or 0(비겼을때) or 1(이겼을때)
* result.opponentchoice: 이번 턴에 상대가 리턴한 값. [공격수단, 공격위치]
* result.winscore: 이번 턴을 이겨서 획득한 점수가 몇점인가
* result.losescore: 이번 턴을 져서 잃은 점수가 몇점인가
*/
onTurnEnd(result) {
printLog(this.player_name+": onTurnEnd! win:"+result.win+", opponent's choice:"+result.opponentchoice
+", winscore:"+result.winscore+", losescore:"+result.losescore);
}
/**
* 라운드가 끝나면 호출되며, 라운드의 결과를 받아봅니다.
* @param result
* result.win: -1(졌을때) or 0(비겼을때) or 1(이겼을때)
* result.wincnt: 이번 게임에서 몇번의 라운드를 이겼는가
* result.losecnt: 이번 게임에서 몇번의 라운드를 졌는가
*/
onRoundEnd(result) {
printLog(this.player_name+": onRoundEnd! win:"+result.win+", wincnt:"+result.wincnt+", losecnt:"+result.losecnt);
}
/**
* 게임이 끝나면 호출되며, 게임의 결과를 받아봅니다.
* @param result
* result.win: -1(졌을때) or 0(비겼을때) or 1(이겼을때)
*/
onGameEnd(result) {
printLog(this.player_name+": onGameEnd! win:"+result.win);
}
}