Skip to content

Latest commit

ย 

History

History
132 lines (98 loc) ยท 5.44 KB

File metadata and controls

132 lines (98 loc) ยท 5.44 KB

go-advent (ํ•œ๊ธ€ํŒ)

This is a fully Korean-localized version of Colossal Cave Adventure, which Donald Knuth ported from CWEB to Go. The original game was Adventure 1.0, a FORTRAN game created by Will Crowther (1975โ€“76) and significantly expanded by Don Woods (1977), which Knuth rewrote in CWEB in 1998.

Donald Knuth๊ฐ€ CWEB์œผ๋กœ ์“ด Colossal Cave Adventure๋ฅผ Go๋กœ ์˜ฎ๊ธด ๋’ค, ํ•œ๊ตญ์–ด๋กœ ์™„์ „ ํ•œ๊ธ€ํ™”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์›์ž‘์€ Will Crowther(1975โ€“76)๊ฐ€ ๋งŒ๋“ค๊ณ  Don Woods(1977)๊ฐ€ ํฌ๊ฒŒ ํ™•์žฅํ•œ FORTRAN ๊ฒŒ์ž„ Adventure 1.0์ด๋ฉฐ, Knuth๊ฐ€ 1998๋…„์— CWEB์œผ๋กœ ๋‹ค์‹œ ์ผ์Šต๋‹ˆ๋‹ค.

์ถœ๋ ฅ(์žฅ์†Œ ์„ค๋ช…ยท๋ฉ”์‹œ์ง€)๊ณผ ๋ช…๋ น์–ด ๋ชจ๋‘ ํ•œ๊ตญ์–ด์ด๋ฉฐ, ๋งํˆฌ๋Š” ์นœ๊ทผํ•œ ๋ฐ˜๋ง์ž…๋‹ˆ๋‹ค. ๋งˆ๋ฒ• ์ฃผ๋ฌธ xyzzy, plugh, plover, fee/fie/foe/foo/fum๋งŒ ์›์ž‘ ๊ทธ๋Œ€๋กœ ์˜์–ด๋กœ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

$ go run .
์–ด๋“œ๋ฒค์ฒ˜์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ด!!  ์„ค๋ช…์„ ๋“ค์–ด๋ณผ๋ž˜?
** ์•„๋‹ˆ
๋„Œ ์ž‘์€ ๋ฒฝ๋Œ ๊ฑด๋ฌผ ์•ž, ๊ธธ ๋์— ์„œ ์žˆ์–ด.  ์ฃผ์œ„๋Š” ์˜จํ†ต ์ˆฒ์ด์•ผ.  ๊ฑด๋ฌผ์—์„œ
์ž‘์€ ์‹œ๋ƒ‡๋ฌผ์ด ํ˜๋Ÿฌ๋‚˜์™€ ๋„๋ž‘์„ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€.
* _

๋นŒ๋“œ์™€ ์‹คํ–‰

Go 1.26 ์ด์ƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

go build -o advent .   # ๋นŒ๋“œ
./advent               # ํ”Œ๋ ˆ์ด (๋งค๋ฒˆ ๋‹ค๋ฅธ ๋ชจํ—˜ โ€” ํ˜„์žฌ ์‹œ๊ฐ์„ ๋‚œ์ˆ˜ ์‹œ๋“œ๋กœ)

# ๋˜๋Š” ๊ณง์žฅ ์‹คํ–‰
go run .

--seed ํ”Œ๋ž˜๊ทธ๋กœ ๋‚œ์ˆ˜๋ฅผ ๊ณ ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(ํ…Œ์ŠคํŠธยท๋น„๊ต์šฉ). ์‹œ๋“œ๋ฅผ ๊ณ ์ •ํ•˜๋ฉด ๊ฒŒ์ž„ ์ „์ฒด๊ฐ€ ์™„์ „ํžˆ ๊ฒฐ์ •๋ก ์ ์ด ๋ฉ๋‹ˆ๋‹ค.

go run . --seed=42

๋ช…๋ น ์•ˆ๋‚ด

ํ•œ๋‘ ๋‹จ์–ด์งœ๋ฆฌ ํ•œ๊ธ€ ๋ช…๋ น์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋™: ๋ถ ๋‚จ ๋™ ์„œ ๋ถ๋™ ๋‚จ์„œ ์œ„ ์•„๋ž˜ ์•ˆ ๋ฐ– ๋“ค์–ด๊ฐ€ ๋‚˜๊ฐ€ ๋Œ์•„๊ฐ€ ๋ด โ€ฆ
  • ๋งˆ๋ฒ• ์ฃผ๋ฌธ(์˜์–ด): xyzzy plugh plover
  • ๋™์ž‘: ๊ฐ€์ ธ๊ฐ€(์ง‘์–ด) ๋ฒ„๋ ค(๋‚ด๋ ค๋†”) ์—ด์–ด ๋‹ซ์•„ ์ผœ ๊บผ ์ฝ์–ด ๋จน์–ด ๋งˆ์…” ์ฑ„์›Œ ๋ถ€์–ด ๋˜์ ธ ํ”๋“ค์–ด ๊นจ์›Œ ๋จน์—ฌ ๊ณต๊ฒฉ โ€ฆ
  • ์‚ฌ๋ฌผ: ์—ด์‡  ๋žจํ”„ ๋ง‰๋Œ€ ์ƒˆ ์ƒˆ์žฅ ๋ณ‘ ๋ฌผ ๊ธฐ๋ฆ„ ์ฐฝ์‚ด ๊ธˆ ๋ณด์„ ์—๋ฉ”๋ž„๋“œ ์‚ผ์ง€์ฐฝ โ€ฆ
  • ๊ธฐํƒ€: ๋ด(๋‘˜๋Ÿฌ๋ณด๊ธฐ) ์†Œ์ง€ํ’ˆ ์ ์ˆ˜ ๋„์›€๋ง ์ •๋ณด ๊ฐ„๋žต ๊ทธ๋งŒ
  • ์ €์žฅ/๋ถˆ๋Ÿฌ์˜ค๊ธฐ: ์ €์žฅ / ๋ถˆ๋Ÿฌ์˜ค๊ธฐ (advent.save ํŒŒ์ผ์— ํ•œ ํŒ ๋ณด๊ด€)
  • ์˜ˆ/์•„๋‹ˆ์˜ค: ์˜ˆ(์‘) / ์•„๋‹ˆ(์•ˆ)

๋‘ ๋‹จ์–ด๋Š” ์ˆœ์„œ๊ฐ€ ์ž์œ ๋กญ์Šต๋‹ˆ๋‹ค โ€” ๊ฐ€์ ธ๊ฐ€ ์—ด์‡ ์™€ ์—ด์‡  ๊ฐ€์ ธ๊ฐ€ ๋‘˜ ๋‹ค ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

๋žจํ”„ ๊ฐ€์ ธ๊ฐ€      ๋žจํ”„๋ฅผ ์ง‘๋Š”๋‹ค
์ผœ             ๋žจํ”„๋ฅผ ์ผ ๋‹ค
์ฐฝ์‚ด ์—ด์–ด       (์—ด์‡ ๊ฐ€ ์žˆ์œผ๋ฉด) ์ฐฝ์‚ด์„ ์—ฐ๋‹ค
๋ฌผ ๋ถ€์–ด         ๋ณ‘์˜ ๋ฌผ์„ ๋ถ“๋Š”๋‹ค

์ฒ˜์Œ์—” ์ง์ ‘ ํ—ค๋งค ๋ณด๋Š” ๊ฒŒ ์ œ๋ง›์ด์ง€๋งŒ, ๋ง‰ํžˆ๊ฑฐ๋‚˜ ๋๊นŒ์ง€ ๊นจ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ณต๋žต ๊ฐ€์ด๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

์„ค๊ณ„

์›์ž‘ C๋Š” "๋‹ค์ƒํƒœ ์‹œ์Šคํ…œ"์ด๋ผ goto๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด ํฌํŒ…์€ ๊ทธ ์ œ์–ด ํ๋ฆ„์„ ๊ฐ’์œผ๋กœ ํ’€์–ด goto๋ฅผ ๋ฉ”์ธ ๋ฃจํ”„์˜ ๋ณธ์งˆ์ ์ธ ๋ถ„๊ธฐ ๋ช‡ ๊ณณ์—๋งŒ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.

  • ๋ชจ๋“  ๊ฐ€๋ณ€ ์ƒํƒœ๋Š” ํ•˜๋‚˜์˜ Game ๊ตฌ์กฐ์ฒด์— ๋ชจ์Œ(์ „์—ญ๋ณ€์ˆ˜ ์—†์Œ)
  • C ๋งคํฌ๋กœ๋Š” ๋ฉ”์„œ๋“œ๋กœ(dark(), toting(), closing() โ€ฆ)
  • ์ œ์–ด ํ๋ฆ„์€ ๋ช…์‹œ์  ๊ฐ’์œผ๋กœ: simulate()/minorCycle(), ํŒŒ์„œ์˜ inputResult, ๋™์ž‘์˜ actResult

์ฝ”๋“œ๋ฅผ ์ง์ ‘ ์ฝ์œผ๋ฉฐ ์ดํ•ดํ•˜๋ ค๋ฉด ์ฝ”๋“œ ์ฝ๊ธฐ ์•ˆ๋‚ด(ARCHITECTURE.md)๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š” โ€” ํŒŒ์ผ ์ง€๋„, ์ฝ๋Š” ์ˆœ์„œ, ๋‘ ๊ฒน ์ˆœํ™˜๊ณผ ์ œ์–ด ํ๋ฆ„, ์›์ž‘ ๋Œ€์‘ํ‘œ๊ฐ€ ์ •๋ฆฌ๋ผ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ์™€ ๊ตฌ์กฐ์˜ ๋ถ„๋ฆฌ

๋ฐฉ๋Œ€ํ•œ ๋™๊ตด ๋ฐ์ดํ„ฐ(์ด๋™ ๋ช…๋ น 740๊ฐœ, ์žฅ์†Œ 144๊ณณ, ๊ฐ์ฒด 67๊ฐœ)๋Š” ๊ฒ€์ฆ๋œ C ์›๋ณธ์„ ์‹คํ–‰ํ•ด ๋คํ”„ํ•œ ๊ตฌ์กฐ(cavedata.go, objdata.go โ€” ์ƒ์„ฑ ํŒŒ์ผ)์™€, ์‚ฌ๋žŒ์ด ๊ด€๋ฆฌํ•˜๋Š” ํ•œ๊ธ€ ํ…์ŠคํŠธ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋‚ด์šฉ
cave_text.go ์žฅ์†Œ ์„ค๋ช…ยท์งง์€ ์„ค๋ช…ยทremark (ํ•œ๊ธ€)
obj_text.go ๊ฐ์ฒด ์ด๋ฆ„ยท๋ฌ˜์‚ฌ (ํ•œ๊ธ€)
messages.go ํ™˜์˜/์•ˆ๋‚ด๋ฌธยทํžŒํŠธยท๊ณ ์ • ๋ฉ”์‹œ์ง€ (ํ•œ๊ธ€)
vocab.go ํ•œ๊ธ€ ๋ช…๋ น์–ด ์‚ฌ์ „ + ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง€
cavedata.go objdata.go ๋™๊ตด/๊ฐ์ฒด ๊ตฌ์กฐ (์ƒ์„ฑ ํŒŒ์ผ, ์†๋Œ€์ง€ ์•Š์Œ)

์ด ๋•์— ๋™๊ตด ๊ตฌ์กฐ์˜ ์ •ํ™•์„ฑ์€ ์ƒ์„ฑ์œผ๋กœ ๋ณด์žฅํ•˜๋ฉด์„œ, ๋ฒˆ์—ญ์€ ํ…์ŠคํŠธ ํŒŒ์ผ์—์„œ๋งŒ ์ด๋ค„์ง‘๋‹ˆ๋‹ค.

ํ•œ๊ธ€ ํŒŒ์„œ

์›์ž‘์€ ๋ช…๋ น์„ "์•ž 5๊ธ€์ž"๋กœ ์ž˜๋ผ ์ธ์‹ํ•˜์ง€๋งŒ, ํ•œ๊ธ€์€ UTF-8 ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ๋ผ ๋ฐ”์ดํŠธ ์ ˆ๋‹จ ์‹œ ๊ธ€์ž๊ฐ€ ๊นจ์ง‘๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ lookup์€ ๋‹จ์–ด ์ „์ฒด๋กœ ๋งค์นญํ•˜๊ณ , ์˜ˆ/์•„๋‹ˆ์˜ค๋Š” ์ฒซ ๊ธ€์ž(์˜ˆ/์‘/์•„/์•ˆ)๋กœ ๊ฐ€๋ฆฝ๋‹ˆ๋‹ค.

์ •ํ™•์„ฑ ๊ฒ€์ฆ

์›์ž‘์€ ๋‹จ์ˆœํ•œ ์„ ํ˜• ํ•ฉ๋™ ๋‚œ์ˆ˜ ์ƒ์„ฑ๊ธฐ๋ฅผ ์“ฐ๊ณ  ์‹œ๋“œ๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ผ, ์‹œ๋“œ๋ฅผ ๊ณ ์ •ํ•˜๋ฉด ๊ฒŒ์ž„์ด ์™„์ „ํžˆ ๊ฒฐ์ •๋ก ์ ์ž…๋‹ˆ๋‹ค. ํ•œ๊ธ€ํŒ๋„ ์ด ์„ฑ์งˆ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๋ฏ€๋กœ, ์‹œ๋“œ๋ฅผ ๊ณ ์ •ํ•œ ์ถœ๋ ฅ์„ golden์œผ๋กœ ์บก์ฒ˜ํ•ด ํšŒ๊ท€๋ฅผ ๋ง‰์Šต๋‹ˆ๋‹ค.

go test ./...

testdata/ko_*.in(ํ•œ๊ธ€ ์ž…๋ ฅ)๊ณผ *.golden(์‹œ๋“œ ๊ณ ์ • ์ถœ๋ ฅ)์œผ๋กœ ๊ฑท๊ธฐยท๋ณด๋ฌผ์ˆ˜์ง‘ยท ๋ฌผ/๊ธฐ๋ฆ„ยท๊ฒฉ์ž๋ฌธยท์ฃฝ์Œ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ์–ดํœ˜ยทenumยท๋™๊ตด/๊ฐ์ฒด ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋„ ํ•จ๊ป˜ ๋•๋‹ˆ๋‹ค.

์ฐธ๊ณ : ์˜์–ด ์›ํŒ(C ์›๋ณธ๊ณผ byte-identical)์€ git ์ด๋ ฅ์— ๋ณด์กด๋˜์–ด ์žˆ์–ด ์–ธ์ œ๋“  ๋ณต์›ยท๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ด์„ ์Šค / ์ถœ์ฒ˜

์›์ž‘ advent.w์˜ ์ €์ž‘๊ถŒ์€ Don Woods์™€ Don Knuth์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค (ยฉ 1998, all rights reserved). ์ด ์ €์žฅ์†Œ์˜ Go ์ฝ”๋“œ์™€ ํ•œ๊ธ€ ๋ฒˆ์—ญ์€ ๊ทธ ๋™์ž‘์„ ์ถฉ์‹คํžˆ ์˜ฎ๊ธด ๋ฒˆ์—ญ๋ฌผ์ž…๋‹ˆ๋‹ค. ์›๋ณธ๊ณผ ๊ด€๋ จ ์ •๋ณด: http://www.rickadams.org/adventure/