글: 오상문 (sualchi@daum.net)
작성일자 : 2004. 5. 20
최종수정 : 2004. 5. 22 (베타 1)
시스템과 언어 : GNEX 환경, Mobile C
블랙잭 프로그래밍 안내
-------------------
게임의 기본 동작만 구현하므로 그래픽 디자인이나 음향 처리까지는 다루지 않는다.
단, 카드도 없이 블랙잭 게임이라고 우길 수 없으므로 사용할 카드만큼은 프로그래밍으로 처리해서 만들 것이다.
블랙잭 게임 설명을 참조하다보니 블랙잭 게임 규칙이 잘못 적용된 부분이 있어 다시 작성했는데 아마도 규칙에서는 수정할 부분이 있으리라 생각한다. 하지만 이 부분은 "배 째!"라는 심정으로 그냥 무시하고 일단 게임을 만들어보았다. 나중에 수정하게 된다면 그 내용에 대해 다시 글을 올리도록 하겠다(믿거나 말거나...).
본 게임에 적용된 블랙잭 규칙
------------------------
- 컴퓨터는 딜러 역할을 하고 사람이 플레이어가 된다.
(컴퓨터와 사람 사이의 1:1 게임 진행 형식이다.)
- 카드 숫자의 합이 21점에 더 가까운 쪽이 이긴다.
21점을 넘어가면 0점 처리된다.
- 모두 21점 이내이면 가장 높은 점수를 얻은 쪽이 이긴다.
- 카드 점수 계산은 다음 규칙을 따른다.
2에서 9까지의 숫자는 숫자 그대로 적용된다.
A(Ace)는 1 또는 11의 숫자를 적용할 수 있다.
J, Q, K는 10으로 계산한다.
- 처음에는 딜러가 두 장(한 장은 비공개)을 받고 플레이어는 한 장을 받아 공개한다.
- 두 장의 카드가 A와 10점 카드(J, Q, K)이면 블랙잭이 되어 승리한다.
- 양쪽이 블랙잭이거나 점수가 같으면 무승부이다.
- 플레이어는 1장씩 계속 카드를 얻을 수 있다.
단, 플레이어 점수가 21점을 넘어가면 딜러 카드와 상관없이 자동으로 패한다.
- 플레이어가 카드를 모두 얻으면 딜러가 카드를 받는다.
딜러의 점수가 17점 이상일 때까지 카드를 가져간다.
카드를 받다가 21점이 넘어가면 0점이 되어 패배한다.
- 본 게임에서 딜러와 플레이어는 각각 7장의 카드까지 받을 수 있다.
배팅 금액과 더블 규칙
---------------------
- 사람은 초기에 일정액(칩)을 받는다. 이 게임에서는 20칩을 제공한다.
- 최소 배팅은 1이며 최대 10칩까지 배팅 할 수 있다.
- 이긴 사람이 블랙잭이거나 카드를 5장 이상 가졌으면 배팅액의 두 배를 받는다.
사용하는 키
----------
상하 키 : 배팅할 금액 조절
왼쪽 키 : 카드 추가
오른쪽 키 : 다음 진행으로
프로그램 동작 순서
----------------
1) 시작 및 실행 초기화
카드 이미지와 보드 만들기, 초기 변수 설정 등
2) 초기 도움말 출력
게임 규칙 설명
3) 판 초기화와 출력
카드 섞기, 보드 출력, 기본 카드 출력, 금액 표기 등
화면1 : 처음에 카드를 받은 게임 장면
4) 플레이어 배팅액 증감 (1~10칩)
"한장 더!" 또는 "다음으로!"를 선택하면
배팅액이 선택되면서 플레이어는 한 장을 더 받는다.
5) 블랙잭 체크와 플레이어 카드 추가
처음 받은 두 장의 카드만 있을 때에는 블랙잭을 체크한다.
블랙잭(A와 "10, J, K, Q" 카드를 가진 경우)
카드를 추가하다가 21점을 넘어가면 플레이어는 패배한다.
6) 컴퓨터 카드 추가
컴퓨터는 17점 이상일 때까지는 무조건 더 받아야 한다.
7) 결과 출력
승부 결과를 출력한다.
게임 결과에 따른 배당금을 계산한다.
블랙잭이거나 5장 이상인 사람이 이긴 경우에는 더블 적용
가진 금액이 0이면 게임 종료하고 아닌 경우에는 다음 판을 다시 시작한다.
화면2 : 플레이어와 딜러의 카드 받기가 끝나고 결과 출력
8) 게임 오버
게임 오버 출력과 함께 종료한다.
소스에서 알아둘 부분
------------------
카드는 총 52장이다. (4종류 무늬당 13장씩)
카드를 0~51번까지 버퍼 배열에 저장한다.
각 숫자는 다음 무늬 순서로 할당된다.
♠ : 0~12
◆ : 13~25
♥ : 26~38
♣ : 39~51
- 숫자를 이용하여 무늬 종류를 알려면?
숫자 / 13 = 무늬 종류 (0=♠, 1=◆, 2=♥, 3=♣)
- 숫자를 이용하여 카드에 적힌 숫자를 알려면?
(숫자 % 13) + 1 = 카드 번호 (1...10, J, Q, K)
- 카드를 어떻게 섞을까?
버퍼 배열에서 임의의 두 요소 위치를 서로 바꾼다. (횟수는 100번)
단, 동일한 위치 교환을 의미가 없으므로 첫 번째 카드와 바꾸어준다.
그러면 배열 버퍼에 있는 숫자들의 위치가 불규칙하게 배치된다.
- 카드 이미지는 어떻게 해결했는가?
프로그램에서 직접 만들었다.
카드 이미지에 맞게 선을 그려주고 무늬별로 4종과 뒷면 이미지를 이미지 배열에 저장했다.
숫자는 실제로 카드를 출력할 때만 별도로 추가해서 처리한다.
개선할 점은 무엇인가?
-------------------
블랙잭의 규칙이 모두 적용된 게임이 아니므로 이 점은 개선이 필요하다.
그리고 잘못 적용된 규칙이 발견된다면 수정해야 한다.
(또는 이 게임만의 독특한 규칙이라고 우긴다. -.-;;)
가장 크게 개선할 부분은 그래픽 디자인과 음향 효과 부분이다.
게임의 꽃인 부분들인데 프로그래머 입장에서 이 부분을 처리하기보다는
해당 전문가들이 참여해서 개선해주었으면 한다.
GNEX IDE상의 문제인지 Mobile C 프로그램 코드 문제인지 모르겠지만 메모리 누수가 발생하는 것 같다. 프로그램을 컴파일하고 실행하다보면 간혹 "메모리 부족" 현상이 나타났다. 그 원인이나 해결책에 대해 알고 계신 분의 덧말을 부탁드린다.
코드 상의 개선할 점도 꽤 많이 있을 것이다. 이 부분의 조언도 언제나 환영한다.
<이상>
'Mobile APP' 카테고리의 다른 글
브루 만년력 프로그래밍 (0) | 2011.03.27 |
---|---|
[모바일C] 블랙잭 게임 만들기 (1) (0) | 2011.03.27 |
[모바일C] 블랙잭 게임 만들기 (3) (0) | 2011.03.27 |
256색상표 (모바일C) (0) | 2011.03.27 |
16색상표 (모바일C) (0) | 2011.03.27 |