ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] Card Game
    Kotlin 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

    댓글

Designed by Tistory.