코린이의 개발 일지

[자바] 콘솔로 간단한 보드게임 만들기 - 구현편 본문

프로젝트/콘솔 프로그램

[자바] 콘솔로 간단한 보드게임 만들기 - 구현편

폴라민 2022. 6. 19. 01:15
반응형

저번에 보드게임 만들기 설계에 이어 구현편을 들고 왔습니다.

 

설계한 내용이 궁금하시면 아래 링크를 참고해 주세요!

 

https://polarmin.tistory.com/39

 

[자바] 콘솔로 간단한 보드게임 만들기 - 설계편

학교 소프트웨어 공학 수업에서 중간고사 대체 텀 프로젝트가 나왔습니다. 중간고산데 왜 이제 블로그를 올리느냐구요? 최근에 겨우 다했거든요...ㅋㅋㅋㅋㅋ 벼락치기 국룰이잖아요. 농담이구

polarmin.tistory.com

 

 

1. 구현 코드

 

우선 객체지향 언어로 구현하기 위해 자바나 c++언어를 사용해야 했는데, 제가 c++만 사용할 줄 알지만 c++은 .exe파일로 내라고 하셔서 하는 수 없이 자바 공부를 했습니다. (맥북 사용중이라서 visual studio를 사용할 수 없었어요)

 

또 m1맥북이여서 이클립스도 안되고 강제 인텔리제이 사용했습니다. 근데 써보니까 엄청 편하더라구요? 자주 애용하게 될 거 같습니다. (앞으로 자바 쓸 일이 또 있다면?)

 

우선 인텔리제이 깔고, 자바도 깔고, 개발 환경 세팅 해줍니다. 이 부분은 구글링하면 저보다 더 자세히 설명 많이 해주신 분들이 많으니 참고하시면 될 거 같아요.

 

설치가 끝났다면 인텔리제이를 실행해 봅시다.

 

 

저는  이렇게 main_program 패키지 안에 소스코드를 저장했구요.

data라는 폴더를 만들어서 저기에 지도 파일을 저장해 두고 읽어오는 방식으로 코드를 짰습니다.

 

 

 

 

저도 이번에 프로젝트 하면서 자바 처음 공부하는거라 처음에는 정말 막막했습니다.. 저 main함수 보이세요? 복잡한 형태에 정말 기겁을 했습니다..

 

근데 쓰다 보니 별거 없더라구요? 객체지향에 잘 알고 계신다면 c++과 정말 별차이 없습니다. 저 main함수만 그냥 유난히 이상하게 생겼구나로 끝이에요.

 

우선 자바는 main함수 조차 클래스로 감싸야한다는 특징이 있고, 모든 .java파일들을 같은 패키지에 넣어둔다면 따로 import를 하지 않아도 다른 파일 클래스들을 사용할 수 있습니다.

 

그리고 c++에 비교해서 제가 느낀 가장 큰 장점.

헤더파일을 안만들어도 됩니다!!!!!!

네 너무 편합니다. 

 

아 대신 맨 위에 저 패키지 적어주셔야 합니다.

 

package main_program;

보이시나요? 저는 패키지 이름을 main_program으로 해놨습니다.

 

아 그리고 main함수 끝에 throws IOException은 그 txt파일을 읽어와야 하는 코드가 있어서 붙여준 겁니다. 파일을 못읽었을 때, 예외 처리 해주려고 붙여 준거라 안 붙이셔도 됩니다.

 

아무튼 main함수에서는 MainGame객체만 생성 후 호출해줍니다.

 

 

MainGame에서는 이렇게 6개의 멤버 변수와 5개의 멤버 함수가 있습니다. 

저 Scanner sc변수는 자바에서 표준 입력 받을 때 필요해서 넣어놨습니다.

 

 

 

MainGame생성자는 전체적인 게임 로직입니다. 

우선 MainGame 객체를 생성하면 생성자에서 유저에게 플레이어 수를 입력 받습니다. 그리고 GameManager 객체를 생성해서 플레이어를 생성하죠.

그 다음 printBoard를 해서 게임 보드를 출력하고

반복문을 통해 여러번 플레이어 턴을 돕니다. 그리고 게임이 끝나면 winner를 호출하여 우승자를 가립니다.

전체 로직은 참 간단하죠?ㅎㅎ 모듈화를 나름 신경 써봤습니다.

 

이제 저 함수들을 하나 하나 만드는게 관건이죠.

 

 

 

가장 핵심이 되는 GameManager 코드입니다. 

저기 최종 줄수 300줄 넘어가는거 보이시나요. 차마 블로그 글에 다 담을 수는 없어서 자세한 코드는 깃에 올려놓았으니 참고 하시길 바랍니다.

 

메소드 이름들을 보시면 다 설계에서 짰던 이름들인 걸 확인 하실 수 있습니다. 몇가지 구현 하면서 필요한 함수들은 따로 private메소드로 만들었습니다. 

 

여기 GameManager에서 Map내용을 해석(?)해서 다루기 쉽도록 일정한 규칙을 만들어 2차원 배열로 만들었습니다. 그 기능을 하는 메소드가 MakeBoard입니다.

그리고 MainGame 클래스에서 있었던 게임판을 출력하는 Printboard는 이 이차원 배열을 가져다가 다시 해석해서 콘솔로 출력하는 작업을 합니다.

이렇게 분리를 한 이유는 시스템 내에서 편하게 다룰 게임판이 필요한 이유도 있었고 콘솔 출력 입력 부분은 따로 구분해서 나중에 GUI로 바꾸기도 용이하도록 하고 싶어서 구분을 해봤습니다.

 

 

이건 Map클래스인데 Map파일을 읽어와서 벡터에 저장하는 역할만 합니다.

 

 

 

 

이 코드는 Player클래스 입니다. 각각의 Player를 객체 형태로 만들어서 저장하기 위해 클래스를 만들었습니다.

각각의 플레이어들의 정보를 저장해두는 역할입니다.

 

 

자세한 코드는 아래 깃허브 링크를 첨부하도록 하겠습니다. 필요하신 분들은 참고하세요.

https://github.com/leesunmin1231/Board_game

 

GitHub - leesunmin1231/Board_game: Board game with Java, Term Project in Software Engineering Class

Board game with Java, Term Project in Software Engineering Class - GitHub - leesunmin1231/Board_game: Board game with Java, Term Project in Software Engineering Class

github.com

 

 

2. 실행 화면

 

 

처음에는 이렇게 화면이 뜹니다. 플레이어 수를 입력하면,

 

 

이렇게 게임판과 함께 플레이어 4명의 정보가 뜹니다.

 

게임판은 이렇게 입력한 플레이어 수에 따라 사이즈가 변합니다.

 

 

 

이렇게 차례가 돌아가며 게임을 진행하게 됩니다.

 

이상으로 자바 콘솔 프로젝트 -보드게임 만들기 포스팅을 마치겠습니다.

 

감사합니다!

반응형
Comments