티스토리에 python 관련 개념정리를 하다가 django에 대해 공부를 하면서 티스토리 정리에 소홀했었다.
django강의가 어느정도 정리가 되어서 이제는 python 과 django를 병행하며 주기적으로 게시물을 올리려 한다.
화이팅!!!
이번 글은 파이썬 코드를 이용하여 블랙잭 게임을 작성해보는 것이다.
블랙잭 게임에서는 각각 카드의 숫자가 점수를 나타내며,
Ace 카드는 1 또는 11을, J, Q, K은 모두 10을 나타낸다.
블랙잭 게임 시작할 때, 2개의 카드를 플레이어와 컴퓨터가 랜덤으로 받게 되고 컴퓨터의 카드는 첫번째 카드만 공개한다.
2개의 카드 합산 점수를 확인하고 한 장의 카드를 더 받을지 말지 결정한다.
게임에서 승리하려면,
1) 처음 내가 받은 2개의 카드 점수 합이 21이 되거나,
2) 모든 카드의 합이 21이 되거나,
3) 컴퓨터의 점수가 21을 초과하거나, 혹은
4) 내 점수와 컴퓨터의 점수가 21이 넘지 않았고, 내가 점수가 컴퓨터의 점수보다 클 경우
승리를 할 수 있다.
처음에 카드를 랜덤으로 돌리는 것은 아래와 같다.
dealCard 함수를 선언하여, cards에서 랜덤으로 설정되도록 return 했다.
카드의 점수를 계산하는 함수 calculateScore를 선언한다.
cards를 인자로 받으며, 처음 2장에서의 상황( 합이 21인지, 21일 초과인지 )과
에이스 카드가 1 혹은 11로 계산될 수 있는 상황을 if 조건문을 사용해서 설정한다.
이 때, 처음 받은 2장의 카드만으로 21을 만들었을 경우( Ace와 10에 해당하는 카드 )는 임의의 변수 0으로 할당한다.
(뒤에서 활용할 예정)
이제 플레이어의 점수와 컴퓨터의 점수를 비교하는 함수를 선언할 차례이다.
userScore과 computerScore을 인자로 받는 compare 함수를 선언한다.
이 단계에서 if문으로 상황을 다 구분해줘야하는데, 가장 큰 꼭지지는 플레이어와 컴퓨터 모두 21을 초과했을 경우이다.
이 경우는 플레이어가 졌다고 return한다.
(아래의 상황은 플레이어와 컴퓨터가 모두 21을 초과하는 상황이 아닌 상황을 깔고 가는 것)
두 번쨰로, 점수가 동점일 경우, 동점을 출력하고,
세 번쨰는 컴퓨터가 블랙잭을 만들었을 경우이다.
네 번째는 플레이어가 블랙잭을 만들었을 경우이고,
다섯 번째는 모두 블랙잭에는 실패했지만, 플레이어만 21을 초과한 경우이다.
그 다음은 반대로 컴퓨터만 21을 초과한 경우와
모두 21을 넘기지 않았고, 블랙잭은 아니지만, 단순히 플레이어의 점수가 높은 경우이다.
그 이외엔 모두 플레이어가 진 것으로 설정했다.
이제 실제 게임을 진행하는 함수를 선언할 것이다.
이 함수는 playGame으로 선언했다.
랜덤으로 뽑힐 카드가 저장될 리스트 userCards와 computerCards를 선언하고, 나중에 게임 진행여부를 결정할 변수로 boolean값인 isGameOver를 선언한다. (지금은 False)
게임이 시작하면서 2번 random으로 카드를 받는 것을 for 반복문으로 표현했다.
그 다음, isGameOver이 False 상태에서 계속 게임을 반복하도록 while 문을 사용한다.
userScore과 computerScore를 계산하고 print 문을 사용하여 출력해준다.
이 상황에서 합한 점수가 위에서 선언한 0 상태인 것이 있는지 if 문으로 체크하고 있다면 바로 isGameOver을 True로 설정, 게임을 종료한다.
아닐 경우, 추가로 카드를 더 받을 것인지 isUserDeal 변수로 입력받고, 더 받는다면, 이 카드 역시 userCards에 append하고 점수도 같이 계산하도록 설정한다.
컴퓨터의 경우, 0 상태가 아닐 경우, 그리고 (우리에게 출력되지는 않지만) 합한 점수가 17이 되지 않는 다면, 추가로 한장 받을 수 있도록 while 문을 하나 더 추가한다.
모든 과정이 끝나고 마지막 최종 결과를 보여주는 print 문을 출력하고, 위에서 선언한 compare 함수를 사용하여 점수를 비교, 결과를 출력한다.
결과까지 정해지고 난 후에는, 게임을 더 이어갈 것인지 묻고, 답에 해당하는 초기화 및 게임 재시작 함수를 입력한다.
'Studying > Python' 카테고리의 다른 글
12. miniProject(3) - Higher or Lower 게임 (0) | 2022.07.14 |
---|---|
11. miniProject(2) - 랜덤 숫자 맞추기 게임 (0) | 2022.07.14 |
9. logging(로깅) - (1) (0) | 2022.03.04 |
8. descriptor(디스크립터) (0) | 2022.03.03 |
7. meta class(메타 클래스) (0) | 2022.03.03 |