Kotlin
[Kotlin] Card Game
hvoon
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();
}
