728x90
반응형
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | package com.human.ex; import java.util.Random; import java.util.Scanner; public class BlackjackDemo { public static void main(String[] args) { int deck[] = new int[52]; // 덱(deck) 저장공간 생성 String cardShape[] = { "스페이스", "크로바", "다이아", "하트" }; // 카드 모양 선언 String cardNumber[] = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; // 카드 숫자 선언 // 카드 생성 for (int i = 0; i < 52; i++) { // deck[0]=0;deck[1]=1;의 작업을 for문으로 빠르게 선언함 deck[i] = i; // deck[0]=0;deck[1]=1;의 작업을 for문으로 빠르게 선언함 } // 카드 섞기 Random rd = new Random(); for (int i = 0; i < 10000; i++) { // 카드를 만번 섞는다는 의미. 10000대신 다른 숫자를 넣어도 무방 int rNumber = rd.nextInt(52); int temp; temp = deck[0]; deck[0] = deck[rNumber]; deck[rNumber] = temp; } // 카드를 한장씩 뽑아서 플레이어에게 나눠주는 작업 (중복되면 안되므로 나눠준 카드와 나눠줄 카드를 구분해야 한다) // -1이란 값은 -1이라는 숫자를 랜덤하게 나눠받은 카드에 대입하고자 사용함 int deckIndex = 0; int userADeck[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; // 유저 A가 플레이할동안 카드를 받을 횟수를 10번으로 잡고 배열 선언 int userBDeck[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 }; // 유저 B가 플레이할동안 카드를 받을 횟수를 10번으로 잡고 배열 선언 int userAIndex = 0; int userBIndex = 0; boolean userAFlag = true; boolean userBFlag = true; Scanner sc = new Scanner(System.in); int ScoreASum = 0; int ScoreBSum = 0; for (int j = 0; j < 10; j++) { // 분배받을 카드의 횟수를 10으로 지정함 if (userAFlag) { System.out.println("user A님, 카드를 계속 받으시겠습니까? 0-NO/1-YES"); if (sc.nextLine().equals("0")) { userAFlag = false; } } if (userBFlag) { System.out.println("user B님, 카드를 계속 받으시겠습니까? 0-NO/1-YES"); if (sc.nextLine().equals("0")) { userBFlag = false; } } if (!(userAFlag || userBFlag)) { break; } if (userAFlag) { userADeck[userAIndex] = deck[deckIndex]; // deck[deckIndex]는 0이니까 userADeck[userAIndex]에 0을 넣어 userADeck[0]값이 된다 deckIndex++; // 0 더하기 1 userAIndex++; // 1을 더해서 값이 1로 변경된다 } if (userBFlag) { userBDeck[userBIndex] = deck[deckIndex]; userBIndex++; deckIndex++; } // userADeck 점수계산 ScoreASum=0; for (int i = 0; i < userAIndex; i++) { int ScoreA = 0; ScoreA = userADeck[i] % 13 + 1; if (ScoreA > 10) { ScoreA = 10; } ScoreASum = ScoreASum + ScoreA; } // A카드의 점수를 1점으로 정할것인지 11점으로 정할것인지 선택하자 for (int i = 0; i < userAIndex; i++) { if (userADeck[i] % 13 == 0) { // 만약 A카드가 있다면 10을 더할텐데, 여기서 22가 넘지 않으면 10을 더해주고 넘으면 더하지 않으면 된다 if ((ScoreASum + 10) <= 21) { ScoreASum = ScoreASum + 10; } } } System.out.println(" "); System.out.println("***total userA 점수:" + ScoreASum); if(ScoreASum>21) { System.out.println("21점을 초과했군요...."); break; } // userBDeck 점수계산 ScoreBSum=0; for (int i = 0; i < userAIndex; i++) { int ScoreB = 0; ScoreB = userBDeck[i] % 13 + 1; if (ScoreB > 10) { ScoreB = 10; } ScoreBSum = ScoreBSum + ScoreB; } if(ScoreASum>21) { System.out.println("21점을 초과했군요...."); break; } // A카드의 점수를 1점으로 정할것인지 11점으로 정할것인지 선택하자 for (int i = 0; i < userAIndex; i++) { if (userADeck[i] % 13 == 0) { // 만약 A카드가 있다면 10을 더할텐데, 여기서 22가 넘지 않으면 10을 더해주고 넘으면 더하지 않으면 된다 if ((ScoreASum + 10) <= 21) { ScoreASum = ScoreASum + 10; } } } // userA와 userB가 어떤 카드를 받았는지 출력해보자 System.out.println("[A user] Card"); for (int i : userADeck) { if (i != -1) { // System.out.println(i + " "); A유저가 뽑은 카드 덱 번호 (출력되지 않아도 무관하므로 주석처리) System.out.println("카드 모양: " + cardShape[i / cardNumber.length]); System.out.println("카드 숫자: " + cardNumber[i % cardNumber.length]); System.out.println("--------------"); } } System.out.println(" "); System.out.println("[B user] Card"); for (int i = 0; i < userBIndex; i++) { // System.out.println(userBDeck[i] + " "); B유저가 뽑은 카드 덱 번호 (출력되지 않아도 무관하므로 주석처리) System.out.println("카드 모양: " + cardShape[userBDeck[i] / cardNumber.length]); System.out.println("카드 숫자: " + cardNumber[userBDeck[i] % cardNumber.length]); System.out.println("--------------"); } System.out.println("***total userB 점수:" + ScoreBSum); System.out.println(" "); } // 승패 결정 String playState = "계속 진행하세요 ===>"; if(ScoreASum>21){ playState = "B user 승리!"; }else{ if (ScoreBSum > 21) { playState = "A user 승리!"; } else { if (ScoreASum > ScoreBSum) { playState = "A user 승리!"; } else if (ScoreASum == ScoreBSum) { playState = "무승부!"; } else { playState = "B user 승리!"; } } } System.out.println(playState); } } | cs |
728x90
반응형
'개발자였던 것 > JAVA 프로그래밍' 카테고리의 다른 글
[java] 은행 회원관리 프로그램(메소드 구현) (0) | 2020.05.08 |
---|---|
[java] 다마고치 게임 (0) | 2020.05.08 |
사용자로부터 국어, 영어, 수학 점수를 입력 받아, 각 과목별 점수가 평균 이상인지 이하인지 구현하는 조건문 (0) | 2020.03.28 |
사각형의 넓이와 둘레를 구하는 메소드 구현 (0) | 2020.03.26 |
블랙잭 게임 메소드 구현 (0) | 2020.03.23 |