본문 바로가기
푸로젝트/마작

1.프로젝트의 생성과 기능 목록 작성

by 눕는게최고야 2023. 9. 1.

구현 기능 목록

1. 마작게임의 뼈대를 구현

2. 유효패를 계산하여 가장 효율적인 조패를 계산

3. 화료 시 점수를 계산

4. 타가들의 버림패를 구현. 

5. 다른 여러 기능을 구현. (리치 퐁 깡 등)

6. 1인 마작 게임 구현. 

 


0. 프로젝트 생성

 

InteliJ를 사용하여 프로젝트를 생성 후 git reporsitory에 연동하였다. 

 

https://github.com/Hi-Imjaeyoung/Test

 

assertj를 불러오기위해 gradle.build에 의존성을 추가하였다.

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    testImplementation("org.assertj:assertj-core:3.22.0") //assertj 의존성 추가
}

 

 

 

1. 마작게임의 뼈대 구현

 

마작 게임 (한판 혹은 한 장) : Game

마작을 진행하는 객체 패를 하나 뽑거나 버리기 

 

패산 > 패들의 집합 : Deck

뽑아올 패의 집합,  유효패 계산을 위해 남아있는 패들에 대한 정보가 필요함

 

패 > 3가지 수패와 4가지 풍패 그리고 3가지 역패 : Card

종류(type) 과 숫자(number)로 카드의 정보를 저장. 

 

 

  • Card의 type에는 Man, Tong, Sak(수패) East, South, West, North,(풍패) White, Green,Red(역패)으로 구분하였다. 
  • Deck의 인스턴스 객체를 생성하면, 136개의 Card를 List에 저장 후 Shuffle 메서드를 이용하여 임의로 정렬했다.  
  • 패의 정렬을 위해 Card 객체에 private id_code를 설정하여 정렬에 용이하게 하였다. 
  • Game 객체에는 손패(List<Card> Hands)와 Deck 객체가 존재한다. Deck에서 카드를 뽑아 Hands로 넣어준다.
  • 각 객체들에서 method를 만들때, 3가지로 구분해보았다. 1) 무엇인가를 만드는 기능, 2) 객체가 가져야할 필수적인 기기능, 3) 객체가 가지는 부수적인 기능
  • 테스트 코드를 작성하며 보다 복잡한 값을 검증하는데에는 어려움이 있었다.