블랙잭 카드 게임: 자바 구현
1. 내용 설명
블랙잭은 카드 게임으로, 플레이어와 딜러가 카드의 합이 21에 가깝게 만드는 것을 목표로 합니다. 21을 초과하지 않는 한도 내에서 카드의 합을 최대로 만들어야 합니다. 이 게임은 플레이어가 'Hit' 또는 'Stand'를 선택할 수 있습니다.
2. 프로그램 간 사용 함수 설명
- dealCard(): 카드를 무작위로 분배합니다.
- calculateScore(): 현재 손패의 점수를 계산합니다.
- checkWinner(): 승자를 결정합니다.
- playerTurn(), dealerTurn(): 플레이어와 딜러의 턴을 처리합니다.
3. 코딩 내용
import java.util.*;
public class BlackjackGame {
private List<String> deck = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A");
private List<String> playerHand = new ArrayList<>();
private List<String> dealerHand = new ArrayList<>();
private Scanner scanner = new Scanner(System.in);
private Random random = new Random();
public BlackjackGame() {
startGame();
}
private void startGame() {
shuffleDeck();
playerHand.add(dealCard());
playerHand.add(dealCard());
dealerHand.add(dealCard());
dealerHand.add(dealCard());
System.out.println("Your hand: " + playerHand);
playerTurn();
dealerTurn();
checkWinner();
}
private void shuffleDeck() {
Collections.shuffle(deck, random);
}
private String dealCard() {
return deck.get(random.nextInt(deck.size()));
}
private int calculateScore(List<String> hand) {
int score = 0;
int aceCount = 0;
for (String card : hand) {
if (card.equals("A")) {
aceCount++;
score += 11;
} else if (Arrays.asList("J", "Q", "K").contains(card)) {
score += 10;
} else {
score += Integer.parseInt(card);
}
}
while (score > 21 && aceCount > 0) {
score -= 10; // Count Ace as 1 instead of 11
aceCount--;
}
return score;
}
private void playerTurn() {
while (true) {
System.out.println("Your score: " + calculateScore(playerHand));
System.out.print("Hit or Stand? (h/s): ");
String action = scanner.nextLine();
if (action.toLowerCase().startsWith("h")) {
playerHand.add(dealCard());
System.out.println("You hit.");
System.out.println("Your hand: " + playerHand);
if (calculateScore(playerHand) > 21) {
System.out.println("You busted!");
break;
}
} else {
System.out.println("You stand.");
break;
}
}
}
private void dealerTurn() {
while (calculateScore(dealerHand) < 17) {
dealerHand.add(dealCard());
}
System.out.println("Dealer's hand: " + dealerHand);
System.out.println("Dealer's score: " + calculateScore(dealerHand));
}
private void checkWinner() {
int playerScore = calculateScore(playerHand);
int dealerScore = calculateScore(dealerHand);
System.out.println("Your score: " + playerScore);
System.out.println("Dealer's score: " + dealerScore);
if (playerScore > 21) {
System.out.println("Dealer wins!");
} else if
(dealerScore > 21 || playerScore > dealerScore) {
System.out.println("You win!");
} else if (playerScore == dealerScore) {
System.out.println("It's a tie!");
} else {
System.out.println("Dealer wins!");
}
}
public static void main(String[] args) {
new BlackjackGame();
}
}
4. 전문용어
- Deck: 카드 덱, 게임에 사용되는 카드의 집합입니다.
- Hand: 손패, 플레이어 또는 딜러가 가지고 있는 카드들입니다.
- Hit: 추가 카드를 받는 행동입니다.
- Stand: 현재 손패를 유지하고 턴을 종료하는 행동입니다.
- Random: 난수를 생성하는 자바 클래스입니다.
5. 라이브러리 추가 및 실행 방법
- 본 프로그램은 자바 표준 라이브러리만 사용합니다.
컴파일:
javac BlackjackGame.java
실행:
java BlackjackGame
'자바(java)' 카테고리의 다른 글
투표 통계 분석: 투표 결과를 분석하고 그래프로 시각화하여 표시합니다. (0) | 2023.12.20 |
---|---|
퀴즈 게임: 다양한 주제의 퀴즈를 제공하고 사용자의 정답을 평가하는 게임을 만듭니다. (0) | 2023.12.20 |
미로 탐험 게임: 미로 내에서 캐릭터를 움직여 목적지에 도달하는 게임을 제작합니다. (0) | 2023.12.20 |
타자 연습 게임: 랜덤 단어를 화면에 표시하고 사용자의 타자 속도를 측정하는 게임을 개발합니다. (0) | 2023.12.20 |
사용자 관리 시스템: 사용자 정보를 관리하고 등록, 수정, 삭제할 수 있는 시스템을 만듭니다. (0) | 2023.12.20 |