Skip to content

Latest commit

ย 

History

History
82 lines (59 loc) ยท 3.77 KB

File metadata and controls

82 lines (59 loc) ยท 3.77 KB

java-blackjack

๐Ÿ“Œ ์—ฐ๋ฃŒ ์ฃผ์ž…

๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

์šฐ๋ฆฌ ํšŒ์‚ฌ๋Š” ๋ Œํ„ฐ์นด๋ฅผ ์šด์˜ํ•˜๊ณ  ์žˆ๋‹ค.

ํ˜„์žฌ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋Š” ์ฐจ๋Ÿ‰์€ Sonata 2๋Œ€, Avante 1๋Œ€, K5 2๋Œ€๋กœ ์ด 5๋Œ€์˜ ์ฐจ๋Ÿ‰์„ ๋ณด์œ ํ•˜๊ณ  ์žˆ๋‹ค.

๊ณ ๊ฐ์ด ์ธํ„ฐ๋„ท์œผ๋กœ๋ถ€ํ„ฐ ์˜ˆ์•ฝํ•  ๋•Œ ์—ฌํ–‰ํ•  ๋ชฉ์ ์ง€์˜ ๋Œ€๋žต์ ์ธ ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค.

์ด ์ด๋™๊ฑฐ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด ์ฐจ๋Ÿ‰ ๋ณ„๋กœ ํ•„์š”ํ•œ ์—ฐ๋ฃŒ๋ฅผ ์ฃผ์ž…ํ•œ๋‹ค. ์ฐจ๋Ÿ‰ ๋ณ„๋กœ ์ฃผ์ž…ํ•ด์•ผ ํ•  ์—ฐ๋ฃŒ๋Ÿ‰์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.

* Sonata : 10km/๋ฆฌํ„ฐ
* Avante : 15km/๋ฆฌํ„ฐ
* K5 : 13km/๋ฆฌํ„ฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ

  • ์ƒ์†๊ณผ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
  • ์œ„ ์š”๊ตฌ์‚ฌํ•ญ์„ if/else ์ ˆ์„ ์“ฐ์ง€ ์•Š๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‚ฌํ•ญ

  • Car ํด๋ž˜์Šค ์ถ”์ƒํ™” (Car)

    • ์ฃผ์ž…ํ•ด์•ผํ•  ์—ฐ๋ฃŒ๋Ÿ‰ ๊ณ„์‚ฐ (Car.getChargeQuantity())
  • ํŒŒ์ƒ ํด๋ž˜์Šค ๊ตฌํ˜„

    • Sonata ํด๋ž˜์Šค ๊ตฌํ˜„ (Sonata)

      • ๋ฆฌํ„ฐ๋‹น ์ด๋™ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ (Sonata.getDistancePerLiter())
      • ์—ฌํ–‰ํ•˜๋ ค๋Š” ๊ฑฐ๋ฆฌ ๋ฐ˜ํ™˜ (Sonata.getTripDistance())
      • ์ฐจ์ข…์˜ ์ด๋ฆ„ ๋ฐ˜ํ™˜ (Sonata.getName())
    • Avante ํด๋ž˜์Šค ๊ตฌํ˜„ (Avante)

      • ๋ฆฌํ„ฐ๋‹น ์ด๋™ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ (Avante.getDistancePerLiter())
      • ์—ฌํ–‰ํ•˜๋ ค๋Š” ๊ฑฐ๋ฆฌ ๋ฐ˜ํ™˜ (Avante.getTripDistance())
      • ์ฐจ์ข…์˜ ์ด๋ฆ„ ๋ฐ˜ํ™˜ (Avante.getName())
    • K5 ํด๋ž˜์Šค ๊ตฌํ˜„ (K5)

      • ๋ฆฌํ„ฐ๋‹น ์ด๋™ ๊ฑฐ๋ฆฌ ๊ณ„์‚ฐ (K5.getDistancePerLiter())
      • ์—ฌํ–‰ํ•˜๋ ค๋Š” ๊ฑฐ๋ฆฌ ๋ฐ˜ํ™˜ (K5.getTripDistance())
      • ์ฐจ์ข…์˜ ์ด๋ฆ„ ๋ฐ˜ํ™˜ (K5.getName())

๐Ÿ“Œ ๋ธ”๋ž™์žญ

๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

๋ธ”๋ž™์žญ ๊ฒŒ์ž„์„ ๋ณ€ํ˜•ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌํ˜„ํ•œ๋‹ค. ๋ธ”๋ž™์žญ ๊ฒŒ์ž„์€ ๋”œ๋Ÿฌ์™€ ํ”Œ๋ ˆ์ด์–ด ์ค‘ ์นด๋“œ์˜ ํ•ฉ์ด 21 ๋˜๋Š” 21์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ˆซ์ž๋ฅผ ๊ฐ€์ง€๋Š” ์ชฝ์ด ์ด๊ธฐ๋Š” ๊ฒŒ์ž„์ด๋‹ค.

  • ์นด๋“œ์˜ ์ˆซ์ž ๊ณ„์‚ฐ์€ ์นด๋“œ ์ˆซ์ž๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๋ฉฐ, ์˜ˆ์™ธ๋กœ Ace๋Š” 1 ๋˜๋Š” 11๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, King, Queen, Jack์€ ๊ฐ๊ฐ 10์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
  • ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•˜๋ฉด ํ”Œ๋ ˆ์ด์–ด๋Š” ๋‘ ์žฅ์˜ ์นด๋“œ๋ฅผ ์ง€๊ธ‰ ๋ฐ›์œผ๋ฉฐ, ๋‘ ์žฅ์˜ ์นด๋“œ ์ˆซ์ž๋ฅผ ํ•ฉ์ณ 21์„ ์ดˆ๊ณผํ•˜์ง€ ์•Š์œผ๋ฉด์„œ 21์— ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ค๋ฉด ์ด๊ธด๋‹ค. 21์„ ๋„˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์›ํ•œ๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ์นด๋“œ๋ฅผ ๊ณ„์† ๋ฝ‘์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋”œ๋Ÿฌ๋Š” ์ฒ˜์Œ์— ๋ฐ›์€ 2์žฅ์˜ ํ•ฉ๊ณ„๊ฐ€ 16์ดํ•˜์ด๋ฉด ๋ฐ˜๋“œ์‹œ 1์žฅ์˜ ์นด๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ฐ›์•„์•ผ ํ•˜๊ณ , 17์  ์ด์ƒ์ด๋ฉด ์ถ”๊ฐ€๋กœ ๋ฐ›์„ ์ˆ˜ ์—†๋‹ค.
  • ๊ฒŒ์ž„์„ ์™„๋ฃŒํ•œ ํ›„ ๊ฐ ํ”Œ๋ ˆ์ด์–ด๋ณ„๋กœ ์ŠนํŒจ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ

  • ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ž‘๊ฒŒ ์œ ์ง€ํ•œ๋‹ค.
  • 3๊ฐœ ์ด์ƒ์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ์“ฐ์ง€ ์•Š๋Š”๋‹ค.
  • ๋”œ๋Ÿฌ์™€ ํ”Œ๋ ˆ์ด์–ด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•œ๋‹ค.

๊ธฐ๋Šฅ ๊ตฌํ˜„ ์‚ฌํ•ญ

  • ์‚ฌ๋žŒ ์ด๋ฆ„ ์ž…๋ ฅ๋ฐ›๊ธฐ(InputView.getPlayerNames)
  • ์นด๋“œ๋Š” ๋ฌธ์–‘๊ฐ’(Suit)๊ณผ ์ˆซ์ž๊ฐ’(Denomination)์„ ๊ฐ€์ง„๋‹ค (Card)
    • ๋ฌธ์–‘๊ฐ’(Suit)๊ณผ ์ˆซ์ž๊ฐ’(Denomination)์€ enum์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค
  • ์นด๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ง„ ์ผ๊ธ‰ ์ปฌ๋ ‰์…˜ Deck ๊ตฌํ˜„
    • ์นด๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค (Deck.setupCard())
    • ์นด๋“œ๋ฅผ ์„ž๋Š”๋‹ค (Deck.shuffle())
    • ์นด๋“œ ํ•œ ์žฅ์„ ๊บผ๋‚ธ๋‹ค (Deck.popCard())
  • Dealer๋Š” Player ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›๋Š”๋‹ค
  • ์นด๋“œ ์ˆซ์ž๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค (Player.calculateScore())
  • ๋”œ๋Ÿฌ๊ฐ€ ํ”Œ๋ ˆ์ด์–ด์—๊ฒŒ ์นด๋“œ ๋ฐฐ๋ถ„ํ•œ๋‹ค (Dealer.allocateCard())
  • ๋”œ๋Ÿฌ์˜ ์ฒ˜์Œ ๋ฐ›์€ 2์žฅ์˜ ์นด๋“œ ํ•ฉ๊ณ„๊ฐ€ 16์ดํ•˜๋ผ๋ฉด ์นด๋“œ ํ•œ ์žฅ์„ ์ถ”๊ฐ€๋กœ ๋ฐ›๋Š”๋‹ค (Dealer.addOneMoreCard)
  • ์นด๋“œ ์ถ”๊ฐ€ ์—ฌ๋ถ€ ๋ฌป๊ธฐ (InputView.askAddCard())
  • ์šฐ์Šน์ž๋ฅผ ์ฐพ๋Š”๋‹ค (Judgement.findWinner())
  • ์ตœ์ข… ์ŠนํŒจ ๊ณ„์‚ฐํ•˜๊ธฐ (Judgement.judgeResult())