지금까지 배운 언어들을 활용해서 블랙잭 게임을 만들어 보자.
참고> namu.wiki/w/%EB%B8%94%EB%9E%99%EC%9E%AD(%EC%B9%B4%EB%93%9C%EA%B2%8C%EC%9E%84)
블랙잭(카드게임) - 나무위키
인셔런스(Insurance) 딜러의 오픈된 카드가 에이스일 경우, 딜러가 블랙잭이 나올 가능성에 대비해 보험을 들어두는 것을 말한다. 건 금액의 절반(절반은 상한일뿐이고 절반이하를 지불하는것도
namu.wiki
전부 다 구현하기는 어려워 기본적인 게임 기능만 구현해 보았다.
<아이디어>
1. 트럼프 카드 만들기 - 카드의 숫자와 문양 출력하기 - 구조체 활용
2. 플레이어의 손패(손에 들고 있는 패)와 손패의 합(카드의 숫자의 총합) 만들기 - 구조체 활용
3. 카드 섞기 - 스왑, 셔플함수 활용
4. 플레이어가 카드 여러장 받기 -동적배열 사용
5. 딜러와 플레이어의 카드를 비교해서 승부 가리기 - 반복문과 조건문 사용

플레이어의 수는 5명으로 정한다. define 숫자를 바꾸면 언제든지 플레이어 수를 조정할 수 있다.
구조체와 동적배열을 사용할 것이므로 vector와 string을 선언해준다.
이넘문을 활용해, 트럼프 카드의 문양이 A일 경우 1을, J일 경우 11을, Q와K일 경우 각각 12와 13을 가리키도록 만든다.

카드 구조체를 만들고 그 안에 멤버변수를 선언한다.
Shape 모양, number 숫자, void Print() 멤버함수는 switch문을 통해 카드를 출력하는 명령을 수행한다.
카드는 모양과 숫자를 순서대로 출력할 것이고,
11, 12, 13, 14카드의 문양은 앞선 이넘문을 활용해서 A, J, Q, K로 출력할 것이다.

플레이어 구조체를 만든다.
동적배열 vector <CARD> hand를 선언해서 플레이어가 두 장 이상의 카드를 동적으로 계속 받을 수 있도록 만들어준다.
sum을 통해 카드의 숫자합(승부를 정하는 곳에 쓰인다)에 쓰일 변수를 선언한다.
멤버함수 void PrintHandSum()을 통해 카드의 합을 출력해준다.
(멤버함수의 장점, 어떤 객체인지의 접근이 필요 없기에 편리하다는 점, 자기 멤버를 그냥 부르면 되니까!)
조건문 if를 통해 카드의 숫자가 10 이상이면 10을 더할 수 있도록 해주고, 나머지 숫자의 경우 숫자만큼 더하도록 한다.
마지막으로 합 sum을 출력한다.
-명심할 점>> 구조체를 만들 때, 구조체는 아직 크기를 갖지 않는다는 사실!-

셔플함수의 가인수를 주이해준다. CARD자료형을 받아주되, 포인터를 선언해주어야 한다.
그 이유는, 배열은 첫주소로 접근하는 방식이기 때문이다. deck 은 CARD자료형의 배열을 선언해주었는데(밑에 메인함수를 볼 것),
여기에 접근하려면 주소의 값을 바꿔주어야 하고, 이는 포인터를 하나만 붙여주면 접근할 수 있다. (주의해야 할 점: Call by Value 라는 점)

메인함수다. CARD deck[52]!
NULL초기화를 명심하자.

덱을 초기화해준다. 첫 카드 0~12의 13장의 문양은 다이아몬드를, 나머지도 순서대로 13장씩 각각의 문양을 가지도록 출력시켜주는 조건문을 선언한다.



끝!
'C++ 코딩 > C++ 게임만들기' 카테고리의 다른 글
<C++ 응용> 섯다 게임 만들기 02.18 (0) | 2021.02.18 |
---|
지금까지 배운 언어들을 활용해서 블랙잭 게임을 만들어 보자.
참고> namu.wiki/w/%EB%B8%94%EB%9E%99%EC%9E%AD(%EC%B9%B4%EB%93%9C%EA%B2%8C%EC%9E%84)
블랙잭(카드게임) - 나무위키
인셔런스(Insurance) 딜러의 오픈된 카드가 에이스일 경우, 딜러가 블랙잭이 나올 가능성에 대비해 보험을 들어두는 것을 말한다. 건 금액의 절반(절반은 상한일뿐이고 절반이하를 지불하는것도
namu.wiki
전부 다 구현하기는 어려워 기본적인 게임 기능만 구현해 보았다.
<아이디어>
1. 트럼프 카드 만들기 - 카드의 숫자와 문양 출력하기 - 구조체 활용
2. 플레이어의 손패(손에 들고 있는 패)와 손패의 합(카드의 숫자의 총합) 만들기 - 구조체 활용
3. 카드 섞기 - 스왑, 셔플함수 활용
4. 플레이어가 카드 여러장 받기 -동적배열 사용
5. 딜러와 플레이어의 카드를 비교해서 승부 가리기 - 반복문과 조건문 사용

플레이어의 수는 5명으로 정한다. define 숫자를 바꾸면 언제든지 플레이어 수를 조정할 수 있다.
구조체와 동적배열을 사용할 것이므로 vector와 string을 선언해준다.
이넘문을 활용해, 트럼프 카드의 문양이 A일 경우 1을, J일 경우 11을, Q와K일 경우 각각 12와 13을 가리키도록 만든다.

카드 구조체를 만들고 그 안에 멤버변수를 선언한다.
Shape 모양, number 숫자, void Print() 멤버함수는 switch문을 통해 카드를 출력하는 명령을 수행한다.
카드는 모양과 숫자를 순서대로 출력할 것이고,
11, 12, 13, 14카드의 문양은 앞선 이넘문을 활용해서 A, J, Q, K로 출력할 것이다.

플레이어 구조체를 만든다.
동적배열 vector <CARD> hand를 선언해서 플레이어가 두 장 이상의 카드를 동적으로 계속 받을 수 있도록 만들어준다.
sum을 통해 카드의 숫자합(승부를 정하는 곳에 쓰인다)에 쓰일 변수를 선언한다.
멤버함수 void PrintHandSum()을 통해 카드의 합을 출력해준다.
(멤버함수의 장점, 어떤 객체인지의 접근이 필요 없기에 편리하다는 점, 자기 멤버를 그냥 부르면 되니까!)
조건문 if를 통해 카드의 숫자가 10 이상이면 10을 더할 수 있도록 해주고, 나머지 숫자의 경우 숫자만큼 더하도록 한다.
마지막으로 합 sum을 출력한다.
-명심할 점>> 구조체를 만들 때, 구조체는 아직 크기를 갖지 않는다는 사실!-

셔플함수의 가인수를 주이해준다. CARD자료형을 받아주되, 포인터를 선언해주어야 한다.
그 이유는, 배열은 첫주소로 접근하는 방식이기 때문이다. deck 은 CARD자료형의 배열을 선언해주었는데(밑에 메인함수를 볼 것),
여기에 접근하려면 주소의 값을 바꿔주어야 하고, 이는 포인터를 하나만 붙여주면 접근할 수 있다. (주의해야 할 점: Call by Value 라는 점)

메인함수다. CARD deck[52]!
NULL초기화를 명심하자.

덱을 초기화해준다. 첫 카드 0~12의 13장의 문양은 다이아몬드를, 나머지도 순서대로 13장씩 각각의 문양을 가지도록 출력시켜주는 조건문을 선언한다.



끝!
'C++ 코딩 > C++ 게임만들기' 카테고리의 다른 글
<C++ 응용> 섯다 게임 만들기 02.18 (0) | 2021.02.18 |
---|