본문 바로가기

#IT #생산성 #공부/프로젝트

자바 어몽어스 소켓 프로그래밍

자바 소켓을 이용해 서버와 멀티 클라이언트들 간의 네트워킹에 대한 감을 익히기 위해  같은 클래스 팀원들과 초간단 게임을 구현했다. 초심플 어몽어스!

 

 

아쉬운 점:

1. Client와 Server 각각의 컨트롤러와 모델을 따로 다른 폴더 다른 파일로 구현했으면 더 가독성 좋은 코드였을 듯.

2. 처음 View에 서버 버튼을 만들지 않고 그냥  프로그램 실행시켜서 서버만 열어주는 파일이 따로 있었으면 좋았을 듯

3. 좀 더 여유로우면 진짜 어몽어스처럼 구현할 수 있을 것 같음. 이건 너무 초간단 심플 버전. 그래도 적어도 투표 결과나 누가 임포스터였는지 알려주는 것 정도는 구현해주는 디테일이 많이 부족함. 아무리 심플이지만.

4. 너무 신경 쓰지 않은 그래픽.

 

 

결과물:

1. 우선 프로그램을 실행시키면 이런 화면이 뜬다. Server 버튼을 누르면 서버를 생성한다. 

 

 

2.  스타트 버튼을 누르면 아이디를 입력할 수 있다.

 

 

\\3. Enter 누르고 접속하면 이렇게 로비로 가고 다른 플레이어들을 기다린다. 자신의 캐릭터는 민트색이고 나머지 애들은 그냥 다 검은색으로 만들었다. 사실 모두 각자 캐릭터를 고를 수 있게 로비에 구현할 수도 있긴 하지만 귀찮아서 그렇게 안했다. 그리고 어쩌다보니 다운로드한 캐릭터 검정색 어몽어스가 엄청 개미처럼 작아 보이는데 이 또한 맞추기 귀찮아서 그냥 냅뒀다. 이 게임은 그저 네트워킹 파트를 구현할 수 있는지 체크하기 위한 게임이다..... 고로 UI는 구리다.

 

 

4. 5명의 플레이어가 모두 모이면 게임이 자동으로 시작된다. 

 

 

5. Ok 버튼을 누르면, 자신이 Imposter인지 Normal인지 메시지 창이 뜬다.

 

 

6. 만약 5명이 다 찼는데 누군가가 또 접속을 하려고 하면 "Game has already started. Please wait at the lobby until the game ends." 라는 문구의 창이 뜬다.

 

 

7. 노멀로 게임을 시작하는 플레이어의 뷰는 이렇다. 우선 게임을 최고 간단하게 하기 위해 실제 어몽어스의 카페테리아만 가져다 놓고 대신 모든 플레이어가 자신의 주변만 보이도록 쉐도우를 만들어놨다. 캐릭터들은 키보드 방향키로 움직일 수 있다. 노멀 플레이어는 use 버튼이 있고, 좌상단 위에는 Task progress bar와 어떤 미션들을 수행해야 하는지 뜬다. 자기의 임무를 수행하면 폰트 색이 초록색으로 바뀌고 progress bar가 찬다. 다른 노멀들이 미션을 수행할때마다도 progress bar가 업데이트된다. 화면의 저기 핑크색 부분은 "Process Data" 미션을 수행하는 장소이다. 

 

 

8. 가서 use 버튼을 클릭하면 다음과 같이 미션을 수행할 수 있다. Close 버튼을 누르면 미션 수행하는 창을 닫을 수 있다.

 

 

9. 이것은 임포스터의 뷰이다. 임포스터는 따로 미션이 주어지지 않기 때문에 현재까지 완료된 미션만 알 수 있게 progress bar만 보이고 미션 블록은 보이지 않는다. 그리고 kill 버튼은 주변에 노멀이 있으면 노멀을 죽일 수 있는 기능이 있다. 그리고 사진에서 플레이어1이 위치한 자리는 "Unlock Manifolds"라는 미션을 수행하는 자리이다.

 

 

10. 만약 노멀이  "Unlock Manifolds" 미션 위치에서 use 버튼을 누르면 다음과 같이 숫자를 1부터 10까지 순서대로 눌러야 하는 미션을 수행해야 하는 scene으로 바뀐다. 만약 순서를 틀리게 누르면 처음부터 다시 눌러야 한다. 모든 미션들은 한 플레이어가 같은 미션을 여러 번 수행할 수 있으나 task progress bar는 미션을 한번 수행하고 게이지가 채워지면 똑같은 미션을 중복 수행해도 더 이상 채워지지는 않는다.

 

 

11. 임포스터에게 죽임 당하거나 투표에서 eject 된 플레이어는 다음처럼 캐릭터가 고스트로 바뀌고 다른 플레이어에게는 이 고스트가 보이지 않는다. 고스트는 죽었지만 그래도 계속 미션을 수행할 수 있고 progress bar를 채울 수 있다. 그리하여 모든 노멀들이 각자 자신의 임무를 모두 수행하면 노멀이 게임에서 이길 수 있다.

 

 

12. 임포스터가 노멀을 죽이면 바로 리포팅된다. 실제 게임과 다르게 죽이자마자 바로 리포팅되는 시스템이다. DEAD BODY REPORTED 애니메이션이 플레이어들에게 실행된다.

 

 

13. 리포팅된 후 살아있는 플레이어들에게만 voting scene이 뜬다. 플레이어들끼리 채팅을 할 수 있고, 자기 자신과 이미 죽은 사람에게는 투표할 수 없도록 VOTE 버튼이 disable 되어있다. 투표 시간이 끝나면 자동으로 결과를 산출하여 모든 플레이어들에게 결과를 메시지로 알려준다.

 

 

14. 만약 투표 결과가 tie로 끝나거나 과반수 이상이 투표를 하지 않는 등의 결과에서는 아무도 퇴출당하지 않고 게임이 진행된다.

 

 

15. 만약 임포스터와 노멀이 한 명씩만 살아남으면 결국 임포스터가 이기게 된다. 그리고 모든 플레이어의 창에 임포스터가 이겼다는 창이 뜬다.

 

 

16. 다들 오케이 버튼을 누르면 게임 오버 화면으로 넘어간다.

 

 

점수는 98/100으로 꽤나 괜찮은 점수를 받긴 했는데, 게임이 끝나고 나서 소켓을 종료시킬 때 에러가 나는 것 같다. 이 부분을 고치면 좋을 것 같다.