지금까지 배운 C++ 코딩을 최대한 활용해서 섯다 게임을 만들어 보자.
먼저 필요한 변수들을 생각해 본 후, 게임이 어떤 식으로 진행될지 생각해 본다.
<IDEA>
1. 섯다 게임을 플레이할 플레이어 숫자를 정하는데, 플레이어 숫자를 플레이어가 직접 정하도록 한다.
2. 화투 카드를 구현해야 한다. 화투 카드는 1부터 10까지 존재하고, 총 20장을 사용할 것이다.
3. 광땡, 떙, 끗의 족보를 구현해야 한다. 구현한 족보를 통해 승부를 내야 한다.
4. 배팅금과 소지금을 정해야 한다.
구조체로 카드의 숫자와 광 유무를 한번에 정할 수 있다. 또한 플레이어별로 족보값을 가지게 할 수 있다.
플레이어 수는 동적할당을 통해서 런타임에 정하도록 만들어 줄 것이다.
이넘문을 사용해서 정수형으로 족보를 쉽게 비교해서 승부를 정할 수 있다.
함수 전방선언을 활용하여 코딩 진행을 깔끔하게 할 수 있다.
구조체를 사용하여 카드의 모양을 정하고,
플레이어가 각각의 이름, 2장의 패, 조합된 족보, 소지금까지 가지도록 정할 수 있다.
함수 전방선언을 사용하여, 최대한 코드를 깔끔하게 만들어 주려 노력했다.
메인함수의 진행 순서는 다음과 같을 것이다.
포인터 사용에 주의하자! 플레이어 숫자는 동적할당을 해야 하는 점에 유의해서,
구조체의 주소를 가리키는 포인터 User를 사용한다.
또한 이를 통해 User.name과 Card.number, Card.shape등등을 지정해 줄 수 있다!
다음은, 플레이어 숫자를 정해주자.
플레이어 수가 10을 넘어갈 경우와 혼자일 경우, 다시 반복하도록 continue 를 넣어 만들어 주었다.
new PLAYER(구조체-포인터!!) 를 사용해서 플레이어 수를,
동적할당을 통해 플레이어가 런타임에 직접 정할 수 있도록 만들어 주자.
게임의 순서는, 배팅을 하고, 카드를 나눠주고, 승부를 보는 식이 될 것이다.
최고족보를 구하는 방법은, 최대값을 구하는 max 함수를 활용해 주면 된다.
맨 밑에 설명해 놓은,
족보를 만드는 함수 MakeJokbo() 를 활용해 이넘문을 활용해서 가장 숫자(정수)가 높은 족보와 낮은 족보로 나타내어,
최대값을 구하는 Max식을 통해 가장 높은(최대값) 족보를 가진 플레이어가 승리하고 돈을 가져가는 식으로 코드를 짰다.또한 이긴 사람 수를 WinCount를 올리는 식으로 구한다.
다만, 정수형이기 때문에 소수점 이하는 버린다는 생각으로 코드를 짰다.
승리한 플레이어(최대값을 가진)의 이름을 출력해 주고, 동시 승리할 경우에는 배팅 금액을 나눠 갖는다.
플레이어 정보를 출력해 준다. 함수로 묶고 싶었지만,
그러기 위해서는 전역 변수를 설정해 주어야 하기에 그냥 메인함수 안에 코드를 짰다.
계속 플레이할 것인지 물어봐 주고 반복해서 플레이할 수 있도록 조건문을 설정해 준다.
동적할당을 해제해 준다.
마지막에 깜빡하기 쉬우니, 처음 동적할당을 해 줄 때 해제도 동시에 작성해 주는 것이 좋다.
메인함수가 종료되었으니, 전방선언 해 주었던 함수들을 정의해준다.
덱 초기화 함수. 총 20장의 화투패가 있고, 1~10까지의 패가 2개씩 존재한다.
1월 3월 8월에는 광이 존재한다. 광떙을 구현하기 위해 만들었다!
셔플함수이다! 주의할 점은, CARD* 형 Deck을 가인수로 받아주는 함수라는 점을 명심해야 한다.
다음 2장의 사진 중 밑 사진은 족보를 조합해주는 함수이고,
위 사진은 이넘문이다.
이넘문은 정수의 숫자 순서를 정해주기 때문에, 이를 통해 족보의 우선순위를 구분해 줄 수 있다.
족보를 만들어 주는 핵심 아이디어는 이넘ENUM문이다.
이넘문을 통해 족보의 순서를 정수형으로 쉽게 비교할 수 있기 때문이다.
for문을 활용해 각각의 플레이어가 가지고 있는 2장의 패가,
광떙(조건문을 활용해 13땡, 18때이, 38땡)일 경우와 떙일 경우, 그리고 나머지 끗일 경우를 나눠줄 수 있다.
족보를 만든 후에, 메인 함수 안에서는 위에서 설명했던 대로, 최대값을 구하는 함수를 통해 승부를 내게 된다.
마지막 함수는 족보를 출력해주는 PrintJokbo 함수이다.
끝!
'C++ 코딩 > C++ 게임만들기' 카테고리의 다른 글
<C++ 응용> 블랙잭 게임 만들기 (0) | 2021.02.19 |
---|