본문 바로가기
  • think normal
새로워지기/서른의 생활코딩

JAVA 초급, 카드 게임 초안

by 청춘만화 2018. 6. 26.

JAVA 초급, 카드 게임 초안

package f_oop2;
import java.util.Arrays;

public class DeckTest {
 public static void main(String[] args) {
  Card c = new Card(2,3);
  System.out.println(c.toString());
  Deck d= new Deck();
  System.out.println(Arrays.toString(d.c));
 }
}

class Card{
 static final int KIND_MAX=4;
 static final int NUM_MAX=13;
 static final int SPADE=1; //숫자로 종류 관리 //상수
 static final int CLOVER=2;
 static final int DIMOND=3;
 static final int HEART=4;

 int kind;
 int number; //13

 Card(int kind, int number){
 this.kind=kind;
 this.number=number;
 }

 Card(){
 this(SPADE,1);//상수
 }

 @Override
 public String toString(){
   String kind =""; //1=A, 11=J,  12=Q,  13K
   String number ="";

   switch(this.kind){
     case 1:
     kind="SPADE";
     break;

     case 2:
     kind="CLOVER";
     break;

     case 3:
     kind="DIMOND";
     break;

     default:
     kind="HEART";
     break;
   }
	
   switch(this.number){
     case 1:
     number="A";
     break;

     case 11:
     number="j";
     break;

     case 12:
     number="Q";
     break;

     case 13:
     number="K";
     break;

     default:
     number=""+this.number;
     break;
   }

  return kind + " " + number;
 }

}


class Deck{
 static final int CARD_NUM = Card.KIND_MAX*Card.NUM_MAX ;
 Card[] c  = new Card[CARD_NUM];

 Deck(){
   int num=0;
   for(int i=0;i<Card.KIND_MAX;i++){
     for(int j=0;j<Card.NUM_MAX;j++){
        c[num++]=new Card(i+1,j+1);
     }
   }
 }

 Card pick(int a){
   Card result = c[a];
   return result;
 }

 Card pick(){
   Card random = pick((int)(Math.random()*52+0)) ;
   return random;
 }

 void shuffle(){
   for(int i=0; i< CARD_NUM;i++) {
     Card j = pick();
     Card tmp = c[i];
     c[i] = j;
     j = tmp;
   } 
 }

 void shuffle(int num){
   for(int k=0; k< num; k++) {
     Card a = pick();
     Card b = pick();
     Card tmp = a;

     a = b;
     b = tmp;
   }
 }
}

 

* 상세 주석 및 테스트 

package f_oop2;


import java.util.Arrays;

public class DeckTest {

 public static void main(String[] args) {

  Card c = new Card(2,3);

  //System.out.println(c);

  System.out.println(c.toString());

  

  Deck d= new Deck();

  System.out.println(Arrays.toString(d.c));



 }



}







class Card{

 static final int KIND_MAX=4;

 static final int NUM_MAX=13;



 static final int SPADE=1; //숫자로 종류 관리 //상수

 static final int CLOVER=2;

 static final int DIMOND=3;

 static final int HEART=4;



 int kind;

 int number; //13





 //매개변수가 두개인 생성자를 만들

 Card(int kind, int number){

 this.kind=kind;

 this.number=number;

 }



 //기본생성자 //매개변수가 두개인 생성자를 만들어 1, 1의 값으로 초기화

 Card(){

 this(SPADE,1);//상수

 }



 @Override

 public String toString(){

 String kind =""; //1=A, 11=J,  12=Q,  13K

 String number ="";



 switch(this.kind){

 case 1:

 kind="SPADE";

 break;

 case 2:

 kind="CLOVER";

 break;

 case 3:

 kind="DIMOND";

 break;

 default:

 kind="HEART";

 break;

 }



 switch(this.number){

 case 1:

 number="A";

 break;

 case 11:

 number="j";

 break;

 case 12:

 number="Q";

 break;

 case 13:

 number="K";

 break;

 default:

 number=""+this.number;

 break;

 }

 return kind + " " + number;

 }

}





class Deck{

 //1 카드 수량을 저장할 수 있는 CARD_NUM 변수를 선언 및 초기화.  단 카드 클래스의 상수 이용. 카드 클래스에서 값을 가져와

 //덱 안에 들어가는 카드의 개수

 static final int CARD_NUM = Card.KIND_MAX*Card.NUM_MAX ;



 //2. 카드 52장을 담을 변수를 선언 및 생성 c

 Card[] c  = new Card[CARD_NUM];



 //3. 기본생성자를 만드세요 1,1  1,2   1,3  ~  4,11  4,12  4,13 //c에 52장의 카드를 채워주세요

 //CARD_NUM[KIND_MAX][NUM_MAX]

// Deck(){

// for(int i=0;i<Card.KIND_MAX;i++){

// int num=i*Card.NUM_MAX;

// for(int j=0;j<Card.NUM_MAX;j++){

// c[num+j]=new Card(i+1,j+1);

// }

// }

// }

 Deck(){

 int num=0;

 for(int i=0;i<Card.KIND_MAX;i++){

 for(int j=0;j<Card.NUM_MAX;j++){

 c[num++]=new Card(i+1,j+1);

 }

 }

 }



 //4. c의 방 번호를 입력받아 해당 방 번호의 카드를 반환하는 메서드를 만드세요 pick

 Card pick(int a){

 Card result = c[a];

 return result;

 }



 //5. 랜덤번째 방의 카드 한장을 반환하는 메서드를 만드세요 pick. 단 4번에서 만든 메서드를 활용하세요

// Card pick(){

// return c[(int)(Math.random()*52+1)];

// }

// void pick(){

// this.pick((int)(Math.random()*52+1));

// }

// Card pick(){

// Card random = c[(int)(Math.random()*52+0)] ;

// return random ;

// } 

 Card pick(){//인스턴스화 없이 pick을 쓸 수 있다?

 Card random = pick((int)(Math.random()*52+0)) ;

 return random;

 }



 //6. 카드를 섞어주세요 shuffle //단 연습문제 5-5번을 응용하세요

 void shuffle(){

// for(int i=0; i< CARD_NUM;i++) {

// Card j = pick();

// Card tmp = null;

// 

// tmp=c[i];

// c[i]=j;

// j=tmp;

 for(int i=0; i< CARD_NUM;i++) {

 Card j = pick();

 Card tmp = c[i];

 c[i] = j;

 j = tmp;

 } 

 }



 //7. 카드를 섞어주세요  shuffle 반복 횟수를 입력받아 해당 횟수만큼 

 //랜덤한 방을 두개 봅아 위치를 변경해주세요

 void shuffle(int num){

// for(int k=0; k< num; k++) {

// Card a = pick();

// Card b = pick();

// Card tmp = null;

// tmp = a;

// a = b;

// b = tmp;

// } 

 for(int k=0; k< num; k++) {

 Card a = pick();

 Card b = pick();

 Card tmp = a;

 a = b;

 b = tmp;

 }

 }



}

 

 

댓글