🎲 Yatzy κ²Œμž„

이 ν”„λ‘œμ νŠΈλŠ” Java Swing을 μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•œ Yatzy κ²Œμž„μž…λ‹ˆλ‹€. 기본적인 κ²Œμž„ 룰은 λ‹€μŒμ„ μ°Έκ³ ν•΄μ£Όμ„Έμš”. https://namu.wiki/w/%EC%9A%94%ED%8A%B8(%EA%B2%8C%EC%9E%84) https://namu.wiki/w/%EC%95%BC%EC%B0%8C
이 ν”„λ‘œμ νŠΈμ—μ„œλŠ” κΈ°μ‘΄ yatzyκ²Œμž„κ³Όμ˜ 차별성을 μœ„ν•΄ 2개의 μ•„μ΄ν…œμ„ κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

🎁 item1 : μ΅œλŒ€ 2개의 μ£Όμ‚¬μœ„λ₯Ό μŠ€νŽ˜μ…œ μ£Όμ‚¬μœ„λ‘œ λ³€κ²½ν•©λ‹ˆλ‹€. (μŠ€νŽ˜μ…œ μ£Όμ‚¬μœ„μ˜ μš©λ„λŠ” κ²Œμž„ μ˜ˆμ‹œ μ°Έκ³ )

🎁 item2 : μ£Όμ‚¬μœ„λ₯Ό 1회 μΆ”κ°€λ‘œ 던질 수 μžˆλŠ” μ•„μ΄ν…œμž…λ‹ˆλ‹€.

지원 Operating Systems 및 μ‹€ν–‰ 방법

지원 Operating Systems

OS 지원 μ—¬λΆ€
windows β­•
Linux ❓(확인 ν•„μš”)
MacOS ❓(확인 ν•„μš”)

μœˆλ„μš°

μ‹€ν–‰ 방법

Windows

  1. Java μ„€μΉ˜ (17 version ꢌμž₯) https://www.oracle.com/java/technologies/downloads/#java17
  2. λ ˆν¬μ§€ν† λ¦¬ 볡사
git clone https://github.com/Suyeong00/yatzy.git
  1. 컴파일 ν›„ κ²Œμž„ μ‹€ν–‰
cd .\yatzy\yatzy\src\
javac -encoding UTF-8 dice\*.java score\*.java *.java
java -cp . YatzyGame

κ²Œμž„ μ˜ˆμ‹œ

  1. μ£Όμ‚¬μœ„ ꡴리고 점수 λ“±λ‘ν•˜κΈ°

roll_and_save

μ£Όμ‚¬μœ„λŠ” 클릭으둜 κ³ μ •/κ³ μ •ν•΄μ œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
κ³ μ •λœ μ£Όμ‚¬μœ„λŠ” roll λ²„νŠΌμ„ λˆŒλŸ¬λ„ μ£Όμ‚¬μœ„ 눈이 λ³€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ£Όμ‚¬μœ„λŠ” 3λ²ˆκΉŒμ§€ roll ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  1. 1번 μ•„μ΄ν…œ μ‚¬μš©

item1
1번 μ•„μ΄ν…œμ„ μ‚¬μš©ν•˜λ©΄ μ΅œλŒ€ 2κ°œκΉŒμ§€μ˜ μ£Όμ‚¬μœ„λ₯Ό μŠ€νŽ˜μ…œ μ£Όμ‚¬μœ„λ‘œ μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μŠ€νŽ˜μ…œ μ£Όμ‚¬μœ„λŠ” λ³€ν•˜λŠ” random dice에 맞좰 roll λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ 클릭 λ‹Ήμ‹œμ˜ random dice의 μ£Όμ‚¬μœ„ 눈으둜 λ³€ν•©λ‹ˆλ‹€.
random diceλŠ” 1번 μ•„μ΄ν…œμ„ μ‚¬μš©ν•  λ•Œλ₯Ό μ œμ™Έν•˜κ³ λŠ” κ²Œμž„μ— 영ν–₯을 주지 μ•ŠμŠ΅λ‹ˆλ‹€.

  1. 2번 μ•„μ΄ν…œ μ‚¬μš©

item2
μ›λž˜ μ£Όμ‚¬μœ„λŠ” 3λ²ˆκΉŒμ§€ κ΅΄λ¦¬λŠ”κ²ƒμ΄ κ°€λŠ₯ν•˜μ§€λ§Œ, 2번 μ•„μ΄ν…œμ„ μ‚¬μš©ν•˜λ©΄ 3번째 μ£Όμ‚¬μœ„λ₯Ό ꡴렸을 λ•Œ ν•œλ²ˆμ˜ 기회λ₯Ό 더 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

1번 μ•„μ΄ν…œκ³Ό 2번 μ•„μ΄ν…œμ„ λ™μ‹œμ— μ‚¬μš©ν•  수 μ—†μŠ΅λ‹ˆλ‹€. κ²Œμž„μ΄ λλ‚œ ν›„ usernameκ³Ό ageλ₯Ό μž…λ ₯ν•˜κ³  submitλ²„νŠΌμ„ λˆ„λ₯΄λ©΄ YatzyResult.txt에 κ²°κ³Όκ°€ μ €μž₯λ©λ‹ˆλ‹€. μ‘±λ³΄λŠ” Score Chartλ₯Ό ν΄λ¦­ν•˜μ—¬ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ μ„€λͺ…

class Dice

  • μ£Όμ‚¬μœ„μ— ν•΄λ‹Ήν•˜λŠ” 객체
  • μ£Όμ‚¬μœ„ λˆˆμ— ν•΄λ‹Ήν•˜λŠ” num 멀버 λ³€μˆ˜λ₯Ό κ°–κ³  있고 객체 μƒμ„±μ‹œ 1둜 μ΄ˆκΈ°ν™”λ¨

interface Score

Integer calculatedScore(List<Dice> dices)

  • Dice 리슀트λ₯Ό λ„˜κ²¨λ°›μœΌλ©΄ 점수λ₯Ό 계산

class Aces, Duces, Fours, Fives, Sixes

class Choice, FourOfKind, FullHouse, SmallStaright, LargeStaright, Yacht

  • AcesλΆ€ν„° YachtκΉŒμ§€ λͺ¨λ‘ Score μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ—¬ μœ μ €μ˜ μ£Όμ‚¬μœ„ 정보λ₯Ό ν† λŒ€λ‘œ 점수 계산

class Button, Label, Panel, TextField

각 μ»΄ν¬λ„ŒνŠΈλ“€μ— ν•΄λ‹Ήν•˜λŠ” 클래슀

class ScreenConfiguration

void createStaticComponents(Panel panel)

  • 화면에 ν•„μš”ν•œ 정적 μ»΄ν¬λ„ŒνŠΈ 생성 (주둜 라벨)

Button createDice(String iconImagePath, int x, int y, int width, int height, Panel panel, List<Button> diceButtons, Screen screen)

  • μ£Όμ‚¬μœ„ λ²„νŠΌ 생성

Button createScoreButtons(int x, int y, int width, int height, Panel panel, Screen screen, List<Button> scoreBoard)

  • μŠ€μ½”μ–΄ λ²„νŠΌ 생성

class Hovering

void mouseEntered(MouseEvent e), void mouseExited(MouseEvent e)

  • ν˜Έλ²„λ§ 효과 κ΅¬ν˜„

class Screen

void floatScreen()

  • Screen을 화면에 λ„μš°λŠ” λ©”μ„œλ“œ

void createDiceButtons()

  • diceλ²„νŠΌλ“€μ„ μƒμ„±ν•˜λŠ” λ©”μ„œλ“œ

void createScoreButtons()

  • scoreλ²„νŠΌλ“€μ„ μƒμ„±ν•˜λŠ” λ©”μ„œλ“œ

void createLabels()

  • label듀을 μƒμ„±ν•˜λŠ” λ©”μ„œλ“œ

void createActionButtons()

  • 이 외에 클릭이 λ˜λŠ” λ²„νŠΌλ“€μ„ μƒμ„±ν•˜λŠ” λ©”μ„œλ“œ

void createTextFields()

  • ν…μŠ€νŠΈ ν•„λ“œλ₯Ό μƒμ„±ν•˜λŠ” λ©”μ„œλ“œ

void createScores()

  • 계산할 쑱보λ₯Ό μƒμ„±ν•˜λŠ” λ©”μ„œλ“œ

void resetDices()

  • μ£Όμ‚¬μœ„λ₯Ό μ΄ˆκΈ°ν™”ν•˜λŠ” λ©”μ„œλ“œ

void rollDices()

  • μ£Όμ‚¬μœ„λ₯Ό κ΅΄λ¦¬λŠ” λ©”μ„œλ“œ

void matchDice()

  • μ£Όμ‚¬μœ„μ˜ μˆ«μžμ— 맞게 μ£Όμ‚¬μœ„μ˜ imageλ₯Ό λ§€ν•‘ν•΄μ£ΌλŠ” λ©”μ„œλ“œ

void setDiceImage(int diceNumber, int num)

  • μ£Όμ‚¬μœ„ λˆˆμ— ν•΄λ‹Ήν•˜λŠ” μ΄λ―Έμ§€λ‘œ λ²„νŠΌμ˜ μ•„μ΄μ½˜μ„ λ³€κ²½ν•΄μ£ΌλŠ” λ©”μ„œλ“œ

void setScore()

  • μœ μ €κ°€ μ„ νƒν•œ 점수λ₯Ό κΈ°μž…ν•˜λŠ” λ©”μ„œλ“œ

void setResult()

  • 점수λ₯Ό κ³„μ‚°ν•˜λŠ” λ©”μ„œλ“œ

boolean validInput()

  • TextField에 μž…λ ₯ν•œ μœ μ €μ˜ input이 μœ νš¨ν•œμ§€ 검사

void start()

  • main thread 외에 start threadλ₯Ό 두어 random diceλ₯Ό μ—…λ°μ΄νŠΈ

void windowConfiguration(Panel panel)

  • ν™”λ©΄μ˜ 크기λ₯Ό μ‘°μ ˆν•˜κ³ , λ‹«κΈ° λ²„νŠΌμ„ ν™œμ„±ν™”ν•˜λŠ” λ©”μ„œλ“œ

void makeButtonTransparent(JButton button)

  • λ²„νŠΌμ˜ 바탕을 투λͺ…ν•˜κ²Œ ν•΄μ£ΌλŠ” λ©”μ„œλ“œ (λ²„νŠΌμ˜default 바탕 색 μ œκ±°ν•˜κΈ° μœ„ν•¨)

void actionPerformed(ActionEvent e)

  • λ²„νŠΌ 클릭(이벀트)λ₯Ό μ²˜λ¦¬ν•˜λŠ” ν•Έλ“€λŸ¬

class YatzyGame

void main(String[] args)

  • κ²Œμž„ μ‹€ν–‰

Todo List

  • κ²Œμž„ μž¬μ‹œμž‘ λ²„νŠΌ κ΅¬ν˜„
  • κ²Œμž„ μ’…λ£Œμ‹œ 이벀트 κ΅¬ν˜„ (ν˜„μž¬ κ²Œμž„μ΄ μ’…λ£Œλ˜μ–΄λ„ μ‚¬μš©μžμ—κ²Œ μ’…λ£Œλ˜μ—ˆλ‹€λŠ” λ©”μ„Έμ§€λ‚˜ μ΄λ²€νŠΈκ°€ λ°œμƒν•˜μ§€ μ•ŠμŒ)
  • λ¦¬νŒ©ν† λ§ ν•„μš”
    1. component 생성을 ScreenConfiguration ν΄λž˜μŠ€μ— μœ„μž„ν•˜κΈ°
    2. actionPerformed λ©”μ„œλ“œμ˜ 각 λ²„νŠΌλ³„λ‘œ 이벀트 λΆ„λ¦¬ν•˜κΈ° (ν˜„μž¬λŠ” λ©”μ„œλ“œ ν•˜λ‚˜λ‘œ 처리)

Reference

https://en.wikipedia.org/wiki/Yahtzee
https://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html


Phase 2 κ΅¬ν˜„μ‚¬ν•­

  • κ²Œμž„ μž¬μ‹œμž‘ λ²„νŠΌ κ΅¬ν˜„
  • κ²Œμž„ μ’…λ£Œ 이벀트 κ΅¬ν˜„
  • 점수 계산 였λ₯˜ μˆ˜μ •