멘토링 첫 코딩 과제였던 주사위 게임입니다.
처음에는 c로 구현하려다 Java에 익숙해지고자 (객체지향을 완벽히 구현 못 해서ㅎ) Java로 구현했습니다.
어떻게 구현할까 하는 고민은 딱히 없었습니다. 클래스를 뭘 만들어야 하고 그 안에 어떤 기능을 구현해야 하는지 이미 요구사항에 나와있다고 생각했기에, 요구사항에 나와있는 순서대로 구현했습니다.
요구사항
첫번째 과제 : 주사위게임
2명의 플레이어가 주사위를 각각 5번씩 번갈아 던져서 주사위 눈금의 총합이 높은 플레이어가 승자가 되는 프로그램입니다.
아래에 요구사항에 근거하여 프로그램을 작성해주세요.
1. 주사위(Dice, FraudDice)
- 주사위를 던지면 1~6 사이의 정수가 랜덤하게 나옵니다.
- 주사위는 아무 특징이 없는 일반 '주사위'와 '사기주사위'가 있습니다. 2종류입니다.
- 사기주사위에는 세기(레벨?)를 정할수 있습니다. 일반모드, 약함모드, 강함모드
- 사기주사위의 특징입니다
일반모드 : 보통 주사위와 동일합니다.
약함모드 : 5이상의 눈금이 나오면 다시 던집니다.
강함모드 : 2이하의 눈금이 나오면 다시 던집니다.
2. 플레이어(Player, FraudPlayer)
- 플레이어는 이름을 정할수 있고, 주사위를 들고있습니다. 또한 본인의 합계득점을 기억합니다.
- 플레이어도 일반 '플레이어'가 있으며, 사기주사위를 사용하는 '사기플레이어'가 있습니다.
- 사기플레이어는 지고있을경우 사기주사위의 얍삽하게도 주사위 레벨을 높입니다(강함모드).
- 6점이상차이로 이기고 있는경우엔 거만해져서 주사위 레벨을 낮춥니다(약함모드).
- 위의 경우가 아닌경우엔 일반모드로 플레이합니다.
3. 심판(Judge)
- 심판을 통해 선수등록을 할 수 있습니다.
- 심판을 통해 게임을 진행합니다. 주사위를 서로 몇번 던질것인지에 대해 지정할 수 있습니다.
- 심판은 기록원을 통해서 매 라운드마다 주사위 총합을 기록(출력)할 수 있으며, 모든 라운드가 종료되면 승자를 판정합니다.
4. 기록원(Recorder)
- 기록원은 게임의 진행상황과 결과를 기록하는 역할을 담당합니다.
- 기록은 System.out.println(); 으로 처리합니다.
- 두가지를 기록할 수 있습니다.
모든 플레이어의 스코어를 기록하며, 사기주사위를 쓰는 플레이어의 경우 주사위의 상태까지 보여줍니다.
ex)
[ 최강훈:6[NORMAL] 김준하:6 ]
[ 최강훈:8[NORMAL] 김준하:10 ]
[ 최강훈:13[STRONG] 김준하:14 ]
[ 최강훈:16[STRONG] 김준하:17 ]
[ 최강훈:21[STRONG] 김준하:23 ]
승자를 기록합니다.
ex) 김준하가 승리했습니다!
5. 메인(GameMain)
- 메인메소드가 존재하며 여기서 프로그램이 실행됩니다.
- 플레이어의 이름을 정할 수 있습니다.
- 주사위는 5번 던지는것으로 하겠습니다.
요구사항
1) 클래스이름은 위 설명에서 괄호안의 이름을 사용하면 됩니다.
2) 패키지를 꼭 구분하여 작성해 주세요.
3) 배열은 사용하지 않습니다. 컬렉션 프레임워크(List 또는 Map)를 사용해주세요.
4) 어떤메소드든 10줄이상 넘어가지 않도록 작성해주세요.
코드가 정상적으로 작동! 이게 가장 중요한 포인트였습니다. 코드가 어떻게 생겼든 일단 작동하게 만들어야 하는 것이죠...
전체 코드
https://github.com/CDG-2022/gayeon-dicegame
GitHub - CDG-2022/gayeon-dicegame: 1. dice game
1. dice game. Contribute to CDG-2022/gayeon-dicegame development by creating an account on GitHub.
github.com
처음으로 PR을 해보고 코드 리뷰도 진행했습니다.
멘토님들과 온라인으로 코드 리뷰를 하는데 회사 사무실에 앉아 제 자리 뒤로 사람이 쫘르륵 있는 느낌이었습니다.
지금 와서 다시 보니 이상하네요. 그때는 이 코드가 최선이었습니다.
코드의 대한 설명보다는 PR을 이용해 멘토님께 받은 피드백 위주로 살펴보겠습니다.
첫 번째로 받은 피드백입니다.
원래도 flag를 좋아하지만 c언어 습관이 나온 거 같습니다.
학교 임베디드시스템공학과 수업을 들을 때 유용하게 썼는데 이제부턴 버려야겠습니다.
아... enum... 그냥 아무 생각 없이 mode를 썼는데 enum이 코드 가독성, 이해도에서 더 좋을 거 같습니다.
저는 우테코 글을 보고 이해하는데 많은 도움이 되었습니다.
https://techblog.woowahan.com/2527/
Java Enum 활용기 | 우아한형제들 기술블로그
{{item.name}} 안녕하세요? 우아한 형제들에서 결제/정산 시스템을 개발하고 있는 이동욱입니다. 이번 사내 블로그 포스팅 주제로 저는 Java Enum 활용 경험을 선택하였습니다. 이전에 개인 블로그에 E
techblog.woowahan.com
이 외에도 더 많은 피드백이 있긴 하지만 여기까지만..
멘토링이 끝난 이후에 보니 확실히 자바 문법을 많이 알게 된 거 같습니다. 제가 보기에도 아쉬운 부분이 몇 있습니다.
끝맺음을 어떻게 해야 할지 모르겠습니다. 그럼 이만...
'멘토링 22.06 ~ 22.12' 카테고리의 다른 글
[JAVA] 로그분석기 (0) | 2023.03.28 |
---|---|
Git (0) | 2023.02.16 |
ORM, SQL Mapper, JDBC (영속성 삼총사) (0) | 2023.02.06 |