day14_DeckTest

육희영·2021년 10월 28일
0

랜덤카드 뽑기

package com.java1.day14;

public class DeckTest {

	public static void main(String[] args) {
		Deck d = new Deck();				//카드 한벌(Deck)을 만든다.
		System.out.println(d.cardArr[0]);	//Deck의 0번째 카드의 값을 출력 해본다.
		
		Card c = d.pick(0);			//섞기 전에 제일 위에 카드를 뽑느다.
		System.out.println(c);		//System.out.println(c.toString());와 같다..
		
		d.shuffle();			//카드를 섞는다.
		c = d.pick(0);			//섞은후 제일위에 카드를 뽑는다.
		System.out.println(c);	//System.out.println(c.toString());와 같다..
	}
}

class Deck {
	final int CARD_NUM = 52;	//카드의 개수	
	Card cardArr[] = new Card[CARD_NUM];	//Card객체 배열을 포함..
	
	Deck() {
		int i=0;
		
		//4행 13열 짜리 2차 배열이다..
		for(int k=Card.KIND_MAX; k>0; k--) {		//k의 값은 4 3 2 1 (KIND_MAX = 4)
			for(int n=0; n<Card.NUM_MAX; n++) {		//Num_MAX = 13;
				cardArr[i++] = new Card(k, n+1);	//k=4, n=0 일때 Card(4, 0+1) 의 값을 cardArr[0] 에 넣는다.
													// 배열안에 i++ 이므로 cardArr[1] 이 아니고  cardArr[0]에 값이 들어간다.
			}
		}
	}
	
	Card pick(int index) {	//지정된 위치(index)에 있는 카드 하나를 꺼내서 반환..
		return cardArr[index];
	}
	
	Card pick() {	//Deck 에서 랜덤으로 카드 하나를 선택한다.
		int index = (int)(Math.random() * CARD_NUM);	// 0 ~ 51 
		return pick(index);
	}
	
	void shuffle() {	//카드의 순서를 섞는다
		for(int i=0; i<cardArr.length; i++) {
			int r = (int)(Math.random() * CARD_NUM);
			
			Card temp = cardArr[i];
			cardArr[i] = cardArr[r];
			cardArr[r] = temp;
		}
	}
}

class Card {
	static final int KIND_MAX = 4;	//카드 무늬의 수
	static final int NUM_MAX = 13;	//무늬별 카드의 수
	static final int SPADE = 4;
//	static final int DIAMOND = 3; //안쓰이는 코드 필요 x 지워도 됨
//	static final int HEART = 2; //안쓰이는 코드 필요 x 지워도 됨
//	static final int CLOVER = 1; //안쓰이는 코드 필요 x 지워도 됨
	
	int kind;
	int number;
	
	Card(){
		this(SPADE, 1);
	}
	
	Card(int kind, int number){
		this.kind = kind;
		this.number = number;
	}

	@Override
	public String toString() {
		String[] kinds = {"", "CLOVER", "HEART", "DIAMOND", "SPADE"};
		String numbers = "0123456789XJQK";	//숫자 10은 X로 표현..
		
		return "kind : " + kinds[this.kind] +", number : " + numbers.charAt(this.number); 
	}
}

출력결과

kind : SPADE, number : 1
kind : SPADE, number : 1
kind : DIAMOND, number : J

0개의 댓글

관련 채용 정보