멘토링 22.06 ~ 22.12

[JAVA] 주사위 게임

E58C 2023. 2. 25. 20:47

멘토링 첫 코딩 과제였던 주사위 게임입니다. 

처음에는 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