[시작]
- 시작할 때 플레이어와 딜러 모두 카드를 2장씩 뽑는다
- 카드의 합을 출력해준다.
[플레이어의 턴]
- 카드 뽑기 권유(y/n)
- 카드를 뽑는다면(y):
- 뽑은 카드 출력
- 현재 총합 출력
- 플레이어의 총합이 21을 넘는지 확인
- 넘는다면 바로 게임 종료
- 카드를 뽑지 않는다면:
- 플레이어의 턴 종료
[딜러의 턴]
- 딜러의 총합이 17 미만이라면
- 카드 뽑기
- 뽑은 카드 출력
- 현재 총합 출력
- 딜러의 총합이 21을 넘는지 확인
- 넘는다면 바로 게임 종료
- 17 이상이라면
- 카드 뽑지 않고 넘기기 (턴 종료)
[두 사람 모두 턴 종료를 선언]
- 플레이어와 딜러의 총합 비교
- 플레이어 > 딜러:
- 플레이어의 승리입니다!
- 플레이어 < 딜러:
- 딜러의 승리입니다!
- 플레이어 == 딜러:
- 무승부입니다!
- 카드 뽑기
- 뽑은 카드 출력
- 현재 총합 출력
- 딜러의 총합이 21을 넘는지 확인
- 넘는다면 바로 게임 종료
카드를 뽑고, 뽑은 카드와 총합을 출력하는 Draw
메서드:
DrawCardFromDeck
매서드로 덱에서 카드를 뽑은 뒤, 출력해준다.GetTotalValue
매서드를 총해 player의 총합을 받아오고, 출력해준다.public void Draw(Player player)
{
//이름 받아오기
string name = player.name;
//카드 뽑기 실행 및 뽑은 카드 저장
string cardName = player.DrawCardFromDeck(deck).ToString();
//현재 총합 받아오기
int total = player.Hand.GetTotalValue();
//누구의 턴인지 명시
Console.WriteLine($"{name}의 차례입니다.");
//뽑은 카드 출력, 현재 총합 출력
Console.WriteLine($"{name}는 '{cardName}'을(를) 뽑았습니다. 현재 총합은 {total}점 입니다.");
}
두 플레이어가 21점을 초과했는지 확인하는 메서드:
true
가 반환되면 게임이 종료되도록 설계했다.true
를 반환해준다.ScoreCheck
메서드를 실행하고, ScoreCheck
메서드에서 반환된 값을 그대로 다시 반환한다.public bool CheckGameOver(Player player)
{
//플레이어나 딜러가 21점을 초과했는지 확인하는 메서드
int total = player.Hand.GetTotalValue();
string name = player.name;
string enemy = player.enemyName;
if (total > 21)
{
Console.WriteLine($"{name}의 카드 합이 21점을 초과했습니다. {enemy}의 승리입니다.");
return true;
}
else
{
return ScoreCheck();
}
}
두 플레이어의 총합을 비교하는 메서드:
CheckGameOver
메서드에서 카드 합이 21이하인 것을 확인한 후에 진입하는 메서드true
혹은 false
를 반환한다.drawEnd
: 카드 뽑기를 중단할 경우 true가 되는 변수ture
를 반환함.false
를 반환함.public bool ScoreCheck()
{
//플레이어와 딜러의 총합을 비교해주는 메서드
int playerTotal = player.Hand.GetTotalValue();
int dealerTotal = dealer.Hand.GetTotalValue();
if (dealer.drawEnd && player.drawEnd)
{
if (playerTotal > dealerTotal)
{
Console.WriteLine("플레이어의 승리입니다.");
}
else if (playerTotal < dealerTotal)
{
Console.WriteLine("딜러의 승리입니다.");
}
else
{
Console.WriteLine("무승부입니다.");
}
return true;
}
return false;
}
블랙잭 클래스를 구현하려는데 오류가 뜸 :
abstract
를 사용하지도 않았는데 같은 오류가 떠서 굉장히 당황했음…abstract
의 문제가 아니라 클래스의 본문에 Console을 작성해서였다.카드가 제대로 더해지지 않는 오류 발생 :
딜러 행동 로직 구현 중 override 실패 :
override
를 사용해보려고 했는데, DrawCardFromDeck
메서드는 Card를 반환해야 종료되는 메서드였기 때문에,내가 반환하고 싶지 않은 상황(딜러의 총합이 17 이상인 상황)에서도 무의미하게 Card를 반환해주어야 하는 문제가 생겼음.override
를 하려면 매개변수와 반환 타입이 같아야하므로 결국 override
를 사용하는 방법은 포기할 수 밖에 없었다.override
가 아니라도 일반 메서드로 구현했으면 되지 않았을까? 하는 생각이 들어서 뒤늦게 아차 했다.