-
[Kotlin] Card GameKotlin 2022. 9. 14. 16:24
-kind 와 number 를 멤버변수로 만들고 생성자에 전달된 값으로 멤버변수의 값을 대입하는 기본(대표)생성자를 이용.
-전달인수가 없는 보조 생성자도 생성.
-그 외 사항은 코틀린 코드를 이용하여 이전클래스와 같은 동작(toString의 오버라이드)을 할 수 있게 적절히 처리.
-spade, diamond, heart, clover 변수는 자바의 static 처럼 생성
// Class - Card.kt class Card constructor( var kind:Int, var number:Int){ constructor():this( 4 , 1){} companion object{ val spade = 4 val diamond = 3 val heart = 2 val clover = 1 } override fun toString(): String { val kinds = arrayOf<String>("", "♣", "♥", "◆", "♠") val numbers = arrayOf<String>("","A","2","3","4","5","6","7","8","9","10","J","Q","K") val str:String = "[" + kinds[kind] + ":" + numbers[number] + "]" return str } }
// Class - CardDeck.kt class CardDeck { // 멤버변수 cards- Card 객체 52개의 요소를 갖는 배열 // 최초 임의의 카드 객체로 초기화함 - 매개변수가 없는 보조 생성자를 호출해서 생성 var cards = Array<Card>(52, { Card() }) // 생성자 - 배열에 있는 Card 52장을 스페이드1 ~ 클로버 13까지 카드의 무늬와 숫자를 설정하는 동작 constructor(){ var k=1 // kind 값 제어용 변수(1~4 반복) var n=1 // number 값 제어용 변수(1~13 반복) var p=0 // 52장의 카드 번호(0~51) 제어용 변수 while(k<=4) { n=1 while (n <= 13) { cards[p].kind = k cards[p].number = n n++ p++ } k++; } // 52번 반복으로 spade:A~Clover:13 각 카드 무늬와 숫자를 세트 } // shuffle 메서드: 52장을 골고루 섞는 메서드 // (Math.random()*52).toInt(): 0~51 중 랜덤 정수 선택 명령 fun shuffle(){ // 0~51번 카드를 순서대로 작업 // 여기서 작업이란 0~51 중 랜덤한 숫자를 골라서 현재 카드와 랜덤번째 카드를 맞바꿈 var temp:Card = Card() // 랜덤카드와 현재 카드를 맞바꿀 때 필요한 임시 카드 var i:Int = 0 while(i<=51){ var r:Int = ( Math.random() *52 ).toInt() // 0~51 중 랜덤 숫자 생성 & 저장 temp = cards[i] cards[i] = cards[r] cards[r] = temp i++ } } // pick 메서드: 전달인수로 온 정수번째의 카드를 리턴해주는 메서드 fun pick( i:Int ):Card{ return cards[i] } }
// CardPlay.kt fun main(){ // CardDeck 객체 생성 var d:CardDeck = CardDeck() d.shuffle() // println(d.cards[51]) // 세명의 플레이어가 받은 카드 배열 생성 p1 p2 p3 var p1 = Array<Card>(5, { Card() }) var p2 = Array<Card>(5, { Card() }) var p3 = Array<Card>(5, { Card() }) // CardDeck 내부에 카드 섞어서 분배 d.shuffle() // 카드 나눠주고 출력 var i:Int=0 var k:Int=0 while( i<5 ){ p1[i] = d.pick(k++) // p1[i].kind = d.pick(k).kind; // p1[i].number = d.pick(k).number; // k++; p2[i] = d.pick(k++) p3[i] = d.pick(k++) i++ } for( item in p1) print("$item "); println(); for( item in p2) print("$item "); println(); for( item in p3) print("$item "); println(); }
'Kotlin' 카테고리의 다른 글
[Kotlin] DataClass (0) 2022.09.14 [Kotlin] Ex(Product, Repairable) (0) 2022.09.14 [Kotlin] Set (0) 2022.09.14 [Kotlin] Map (0) 2022.09.14 [Kotlin] List (0) 2022.09.14