โผ ๊ฐ๋ฐ ํ๊ฒฝ: Python 3.x
โผ ์ ์ถ๋ฌผ
โข .py ์์ค ์ฝ๋ (assn4_model.py, assn4_app.py)
โข ํ๋ก๊ทธ๋จ์ ์์ค ์ฝ๋์ ์ฑ์ ์์ ์ดํด๋ฅผ ๋๊ธฐ ์ํ ์ฃผ์์ ๋ฐ๋์ ๋ถ์ฌ์ฃผ์ธ์.
โข ๋ณด๊ณ ์ ํ์ผ (.docx, .hwp ๋๋ .pdf; assn4.docx, assn4.hwp ๋๋ assn4.pdf)
โข ๋ณด๊ณ ์๋ AssnReadMe.pdf๋ฅผ ์ฐธ์กฐํ์ฌ ์์ฑํ์๋ฉด ๋ฉ๋๋ค.
โข ๋ช
์ ์์ฝ (Honor code): ํ์ง์ ๋ค์์ ์์ฝ์ ๊ธฐ์
ํ์ฌ ์ ์ถํด ์ฃผ์ธ์: โ๋๋ ์ด ํ๋ก
๊ทธ๋๋ฐ ๊ณผ์ ๋ฅผ ๋ค๋ฅธ ์ฌ๋์ ๋ถ์ ์ ํ ๋์ ์์ด ์์ํ์์ต๋๋ค.โ ๋ณด๊ณ ์ ํ์ง์ ๋ช
์
์์ฝ์ด ๊ธฐ์
๋์ด ์์ง ์์ ๊ณผ์ ๋ ์ ์ถ๋์ง ์์ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
โข ์์ฑํ ์์ค ์ฝ๋์ ๋ณด๊ณ ์ ํ์ผ์ PLMS๋ฅผ ํตํด ์ ์ถํด ์ฃผ์ธ์.
โผ ์ฃผ์ ์ฌํญ
โข ๊ตฌ๋ฌธ ์ค๋ฅ(Syntax Error)๊ฐ ๋ฐ์ํ๊ฑฐ๋ ์คํ์ด ๋์ง ์๋ ๊ณผ์ ๋ 0์ ์ผ๋ก ์ฑ์ ๋ฉ๋๋ค.
โข ์ ์ถ ๊ธฐํ๋ณด๋ค ํ๋ฃจ ๋ฆ๊ฒ ์ ์ถ๋ ๊ณผ์ ๋ ์ต์ข
20%, ์ดํ ๋ฆ๊ฒ ์ ์ถ๋ ๊ณผ์ ๋ ์ต์ข
40%
๊ฐ์ ๋ฉ๋๋ค. ์ ์ถ ๊ธฐํ๋ณด๋ค ์ฌํ ์ด์ ๋ฆ์ผ๋ฉด ์ ์ถ ๋ฐ์ง ์์ต๋๋ค (0์ ์ฒ๋ฆฌ). ๋ฆ์ ์
์ถ์ PLMS์ ๊ธฐ๋ก๋ ์ต์ข
์์ ์ผ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ ํฉ๋๋ค.
โข ๊ฐ ๋ฌธ์ ์ ์ ํ ์กฐ๊ฑด๊ณผ ์๊ตฌ ์ฌํญ์ ๋ฐ๋์ ์ง์ผ ์ฃผ์๊ธฐ ๋ฐ๋๋๋ค.
โข ์ด๋ฒ ๊ณผ์ ๋ ์ถ๊ฐ ๊ธฐ๋ฅ ๊ตฌํ๊ณผ ๊ด๋ จ๋ ์ถ๊ฐ ์ ์๊ฐ ๋ฐ๋ก ์์ต๋๋ค.
โข ๋ณด๊ณ ์ ์์ฑ ์, ์ฐธ๊ณ ๋งํฌ๋ ํฌํจํด์ฃผ์ธ์. ๋ถ์ ํ์ ์ ๋ฐ ์ 0์ ์ฒ๋ฆฌ๋ฉ๋๋ค.
โข ๋ถ์ ํ์์ ๊ดํ ๊ท์ ์ POSTECH ์ ์์ปดํจํฐ๊ณตํ๋ถ ํ๋ถ์์ํ์ โPOSTECH ์ ์์ปดํจํฐ๊ณต
ํ๋ถ ๋ถ์ ํ์ ์ ์โ๋ฅผ ๋ฐ๋ฆ
๋๋ค (PLMS์ ๋ณธ ๊ณผ๋ชฉ ๊ณต์ง์ฌํญ์ ๋ฑ๋ก๋ ๊ธ ์ค, ์ ๋ชฉ์ด
[document about cheating]์ธ ๊ธ์ ์ฒจ๋ถ๋์ด ์๋ disciplinary.pdf๋ฅผ ์ฐธ์กฐํ ๊ฒ.)
2
โผ Problem: ์ง๋ขฐ์ฐพ๊ธฐ
(๋ชฉ์ )
(1) Python tkinter ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ GUI ํ๋ก๊ทธ๋๋ฐ์ ์ตํ๋๋ค.
(2) ํด๋์ค ์ ์ ๋ฐ ์ธ์คํด์ค ์์ฑ์ ์ตํ๋๋ค.
(3) ํด๋์ค ์์ ๋ฐ ๋ฉ์๋ ์ค๋ฒ ๋ผ์ด๋ฉ์ ์ตํ๋๋ค.
(์ค๋ช
)
์ง๋ขฐ ์ฐพ๊ธฐ๋ ๊ธฐ์ต๋ ฅ๊ณผ ์ถ๋ฆฌ๋ ฅ์ ์ํ๋ ๊ฐ๋จํ ๊ฒ์์ผ๋ก, ์ง๋ขฐ๋ฅผ ํผํด ๋ชจ๋ ๋น ์นธ์ ์ฐพ๋ ๊ฒ์ด
์ด ๊ฒ์์ ๋ชฉํ์
๋๋ค. ๋ณด๋์ ๊ฐ ์นธ์๋ ์ง๋ขฐ๊ฐ ์๋ ์นธ๊ณผ ์๋ ์นธ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ํ๋ ์ด์ด๋
๋ง์ฐ์ค ํด๋ฆญ์ ํตํด์ ๋ณด๋์ ์ํธ์์ฉํ๋ฉฐ ์ง๋ขฐ๊ฐ ์๋ ๊ตฌ์ญ๋ง ๋ฐํ์ผ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ ๋ง์ฝ
์ง๋ขฐ๊ฐ ์๋ ์นธ์ ํด๋ฆญํ ๊ฒฝ์ฐ์๋ ์ธ์ ํ 8์นธ(์์ ์ ์ค์ฌ์ผ๋ก ํ 3ร3 ๊ตฌ์ญ)์ ๋ํ์ฌ ์ง๋ขฐ์
๊ฐ์๋ฅผ ์ซ์๋ฅผ ํตํด์ ํํธ๋ฅผ ์ค๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐํ ์ถ๋ฆฌ๋ฅผ ํตํด์ ์ง๋ขฐ๊ฐ ์๋ ๋ชจ๋ ์นธ์ ๋ฐํ์ผ
ํฉ๋๋ค. ์๋ ๊ทธ๋ฆผ์์ ๋ณผ ์ ์๋ฏ์ด ํ๋ ๋ค๋ชจ ์์ 3์ ์์ ๊ณผ ์ธ์ ํ 8์นธ(๋นจ๊ฐ ๋ค๋ชจ ์์
์์ญ)์ 3๊ฐ์ ์ง๋ขฐ๊ฐ ์๋ ๊ฒ์ ๋ํ๋
๋๋ค.
[๊ฒ์ ๊ท์น]
(1) ํ๋ ์ด์ด๋ ๋ ๊ฐ์ง ๋์(๋ง์ฐ์ค ์ฐ ํด๋ฆญ, ์ข ํด๋ฆญ)์ ํตํด์ ๋ณด๋์ ์ํธ ์์ฉํ ์
์์ต๋๋ค.
(2) ํ๋ ์ด์ด๊ฐ ๋ง์ฐ์ค ์ฐ ํด๋ฆญ์ ์ํํ์ ๋ ๊ธฐ๋ํ ์ ์๋ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
A. ์ด๋ฏธ ๋ฐํ์ง ์นธ์ธ ๊ฒฝ์ฐ, ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
B. ์์ง ๋ฐํ์ง์ง ์์ ์นธ์ธ ๊ฒฝ์ฐ
โป์์ง ๊น๋ฐ์ด ์๋ ๊ฒฝ์ฐ, ๊น๋ฐ์ ํตํด์ ๋งํน์ ํ ์ ์์ต๋๋ค. ๊น๋ฐ์ ๊ฒฝ์ฐ ํ๋ ์ด์
๋ถ์์ ์ธ ๋๊ตฌ๋ก ๋ชจ๋ ์ง๋ขฐ๊ฐ ์๋ ์์น๋ฅผ ๊ธฐ์ตํ๋ ๊ฒ์ ํ๋ ์ด์ ๋ถ๋ด์ ์ค ์ ์๊ธฐ
๋๋ฌธ์ ํ๋ ์ด ์์ ์ง๋ขฐ๋ฅผ ํ์ํ๋ ๋๊ตฌ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. (ํ์ํ ์ ์๋
๊น๋ฐ์ ๊ฐ์์ ์ ํ์ ์์ต๋๋ค.)
โป๊น๋ฐ์ด ์๋ ๊ฒฝ์ฐ, ํด๋น ๊น๋ฐ์ ์ง์ธ ์ ์์ต๋๋ค.
(3) ํ๋ ์ด์ด๊ฐ ๋ง์ฐ์ค ์ข ํด๋ฆญ์ ์ํํ์ ๋ ๊ธฐ๋ํ ์ ์๋ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
A. ๊น๋ฐ๋ก ํ์๋ ์นธ์ธ ๊ฒฝ์ฐ, ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
B. ์ด๋ฏธ ๋ฐํ์ง ์นธ์ธ ๊ฒฝ์ฐ, ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
C. ์์ง ๋ฐํ์ง์ง ์์ ์นธ์ธ ๊ฒฝ์ฐ
โปํด๋น ์์น๊ฐ ์ง๋ขฐ๋ผ๋ฉด ๊ฒ์์ ์ข
๋ฃ๋๊ณ ํ๋ ์ด์ด๋ ํจ๋ฐฐํฉ๋๋ค.
โปํด๋น ์์น๊ฐ ๋น ์นธ์ด๋ผ๋ฉด ์ธ์ ํ 8์นธ์ ์ง๋ขฐ์ ์๋ฅผ ํ์ํฉ๋๋ค. ๋ง์ฝ, ์ธ์ ํ 8์นธ์
์ง๋ขฐ์ ์๊ฐ 0์ธ ๊ฒฝ์ฐ, ํด๋น ๊ณผ์ ์ ๊ฐ 8 ์นธ์์ ๋ค์ ๋ฐ๋ณตํฉ๋๋ค.
(4) ํ๋ ์ด์ด๊ฐ ์ง๋ขฐ๋ฅผ ์ ์ธํ ๋ชจ๋ ๋น ์นธ์ ๋ฐํ๋ค๋ฉด, ํ๋ ์ด์ด๋ ์น๋ฆฌํฉ๋๋ค.
3
(๊ตฌํ ๋ชฉํ)
(1) ์ด 4๊ฐ์ ํด๋์ค๋ฅผ ํตํด์ ์ง๋ขฐ ์ฐพ๊ธฐ๋ฅผ ๊ตฌํํฉ๋๋ค. ํด๋์ค๋ฅผ ๊ตฌํํ ๋์๋ ์๋์์
์ ์ํ ๋ณ์ ๋ฐ ๋ฉ์๋๋ค์ ๋ฐ๋์ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌํํด์ผ ํฉ๋๋ค. ์๋ ๋ช
์๋ ๋ณ์
์ด๋ฆ, ๋ฉ์๋ ์ด๋ฆ ๋ฐ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ๋ฐ ๋ฆฌํด ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค. ์ด์ธ์ ํ์ํ
๋ณ์ ๋ฐ ๋ฉ์๋๋ ์ถ๊ฐ๋ก ์ ์ํด์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ถ๊ฐํ ๋ด์ฉ์ ๋ํด์๋ ์์ค์ฝ๋์
๋ณด๊ณ ์์ ์ค๋ช
์ ํฌํจํ์ฌ ์์ฑํด์ผ ํฉ๋๋ค.
A. Panel
์ง๋ขฐ ์ฐพ๊ธฐ ๊ฒ์์ ๊ฐ ์นธ์ ํด๋นํ๋ class์
๋๋ค. ์๋์ ์ฃผ์ด์ง ๋ชจ๋ ๋ณ์, ํจ์๋ฅผ
๊ตฌํํด์ผ ํฉ๋๋ค.
โ [๋ณ์] isRevealed : ํด๋น panel์ด ๋ฐํ์ง ์ํ์ธ์ง๋ฅผ ๋ํ๋ด๋ bool type ๋ณ์๋ก,
instance๋ฅผ ์์ฑ ์ ๋ฐ๋์ False๋ก ์ด๊ธฐํ ํฉ๋๋ค.
โก [๋ณ์] hasFlag : ํด๋น panel์ด flag๋ฅผ ๋ณด์ ํ๊ณ ์๋์ง๋ฅผ ๋ํ๋ด๋ bool type
๋ณ์๋ก, instance๋ฅผ ์์ฑ ์ ๋ฐ๋์ False๋ก ์ด๊ธฐํ ํฉ๋๋ค.
โข [ํจ์] toggleFlag(self) : ํด๋น panel์ hasFlag๋ฅผ toggleํฉ๋๋ค. ์ฆ, ํ์ฌ
hasFlag๊ฐ True๋ผ๋ฉด ์คํ ํ False๊ฐ ๋๊ณ , False๋ผ๋ฉด ์คํ ํ True๊ฐ ๋ฉ๋๋ค.
โฃ [ํจ์] unveil(self) : ํด๋น panel์ ๋ฐํ์ง ์ํ๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
* Hint: isRevealed์ ๊ฐ์ด True๊ฐ ๋์ด์ผ ํฉ๋๋ค.
B. EmptyPanel
์ง๋ขฐ๊ฐ ์กด์ฌํ์ง ์๋ ์นธ์ ์๋ฏธํ๋ class๋ก Panel์ ์์ํด์ผ ํฉ๋๋ค. ์๋์ ์ฃผ์ด์ง
๋ชจ๋ ํจ์๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
โ [๋ณ์] numOfNearMines: ํด๋น panel๊ณผ ์ธ์ ํ mine์ ์๋ฅผ ์ ์ฅํ๋ num type
๋ณ์๋ก, instance๋ฅผ ์์ฑ ์ ๋ฐ๋์ 0์ผ๋ก ์ด๊ธฐํ ํฉ๋๋ค.
4
โก [ํจ์] addNumOfNearMines(self): ํด๋น panel์ numOfNearMines์ ๊ฐ์ 1 ์ฆ๊ฐ
์ํต๋๋ค.
โข [ํจ์] unveil(self): ๋ถ๋ชจ์ธ Panel์ unveil์ ์ํํ๊ณ , ์ด๋ ์ธ์ ํ mine์ ์๋ฅผ
returnํฉ๋๋ค.
C. MinePanel
์ง๋ขฐ๊ฐ ์กด์ฌํ๋ ์นธ์ ์๋ฏธํ๋ class๋ก Panel์ ์์ํด์ผ ํฉ๋๋ค. ์๋์ ์ฃผ์ด์ง ๋ชจ๋
ํจ์๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
โ [ํจ์] unveil(self): ๋ถ๋ชจ์ธ Panel์ unveil์ ์ํํ๊ณ , -1์ returnํฉ๋๋ค.
D. Board
์ง๋ขฐ ์ฐพ๊ธฐ ๊ฒ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ class์
๋๋ค. ์ฌ๊ธฐ์๋ ์์ ๋ง๋
Panel class๋ค์ ํ์ฉํ์ฌ ์๋์ ์ฃผ์ด์ง ๋ชจ๋ ํจ์๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
โ [๋ณ์] panels : 2์ฐจ์ ๋ฆฌ์คํธ๋ก Panel instance๋ฅผ ์ ์ฅํฉ๋๋ค. ์ด๋ reset ํจ์๊ฐ
ํธ์ถ๋ ๋๋ง๋ค ์ด๊ธฐํ๋ฉ๋๋ค. (๋ฐ๋ผ์, instance ์์ฑ ์์ ๋ฐ๋์ ํน์ ๊ฐ์ผ๋ก
์ด๊ธฐํํ ํ์๋ ์์ต๋๋ค.)
โก [ํจ์] reset(self, numMine, height, width): Board๋ฅผ ์ด๊ธฐํํฉ๋๋ค. ์ด ๊ณผ์ ์์
panels์ heightํฌ๊ธฐ๋งํผ์ ํ๊ณผ width๋งํผ์ ์ด์ ๊ฐ์ง๋ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ
์์ฑํฉ๋๋ค. ๋ํ, numMine์ผ๋ก ์ฃผ์ด์ง ์ซ์๋งํผ mine์ randomํ ์์น์
๋ถํฌ์ํต๋๋ค. Mine์ด ์์นํ ๊ณณ์๋ MinePanel์ด ๋ค์ด๊ฐ๊ณ , Mine์ด ์๋ ์์น์๋
EmptyPanel์ด ๋ค์ด๊ฐ๋๋ก ํฉ๋๋ค. ๋ง์ง๋ง์ผ๋ก, ๊ฐ EmptyPanel์๋ ์ธ์ ํ Panel์
์์นํ Mine์ ์๋งํผ numOfNearMines๊ฐ ๋ค์ด๊ฐ๋๋ก ํฉ๋๋ค. ์ด๋, EmptyPanel ์
๋ณ์์ธ numOfNearMines ๋ณ์์ ์ง์ ์ ๊ทผํ์ฌ ๊ฐ์ ๋ณ๊ฒฝํด์๋ ์๋๊ณ ,
addNumOfNearMines ํจ์๋ง์ ์ด์ฉํ์ฌ ๊ตฌํํ๋๋ก ํฉ๋๋ค.
(ํด๋น ์ง๋ขฐ ์ฐพ๊ธฐ ๊ฒ์์์๋ Board์ ์ฌ์ด์ฆ์ ์ง๋ขฐ์ ๊ฐ์๊ฐ ๋์ด๋์ ๋ฐ๋ผ์
์ ๋์ ์ผ๋ก ๋ณํํ ์ ์์ต๋๋ค. ์ด ํจ์๋ ๊ทธ ์ํฉ๋ง๋ค Board๋ฅผ Randomํ๊ฒ ์ด๊ธฐํ
๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.)
โข [ํจ์] getNumOfRevealedPanels(self): ํ์ฌ board์ ๋ฐํ์ ธ ์๋ Panel์ ๊ฐ์๋ฅผ
returnํฉ๋๋ค.
โฃ [ํจ์] unveil(self, y, x): panels์ yํ x์ด์ ์์นํ Panel์ ๋ฐํ๋๋ค. ๋ง์ฝ,
๋ฐํ๋ธ Panel์ด ์ง๋ขฐ๋ผ๋ฉด, -1์ returnํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด, ์๋ฌด๊ฒ๋ returnํ์ง
์์ต๋๋ค. ๋ํ, ๋ง์ฝ ๋ฐํ๋ธ Panel์ numOfNearMines์ ๊ฐ์ด 0์ด๋ผ๋ฉด, ์ธ์ ํ 8์นธ
์ค์ ์ง๋ขฐ๊ฐ ์๋ ์นธ์ ๋ํด์ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. ๋ง์ฝ ๊น๋ฐ์ด ์กด์ฌํ๋ ์นธ์๋
๋ฐ๋ณต๋์๊ณ , ํด๋น ์นธ์ด ์ง๋ขฐ๊ฐ ์๋ ๊ฒฝ์ฐ ํด๋น ์นธ์ ๊น๋ฐ์ ์ ๊ฑฐํ๊ณ , ๋ฐํ ๋
๋๋ค.
๊ทธ๋ ์ง ์๊ณ ์ง๋ขฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๊น๋ฐ์ ์ ์งํฉ๋๋ค.
* Hint: ์๋ ๊ทธ๋ฆผ์์ ์ ์ ์๋ฏ์ด ํ ๋ฒ์ yํ x์ด์ Panel์ ๋ฐํ๋ ํ์๊ฐ
์ผ๋ง๋ ๋ง์ Panel์ ๋ฐํ๊ฒ ๋ ์ง๋ ์ ์ ์์ต๋๋ค. ๋ฐ๋ผ์, ๋ณ๋์ ์๋ฃ
5
๊ตฌ์กฐ(stack ๋ฑ)์ ์ด์ฉํ์ฌ ์ฐจ๋ก๋๋ก ๋ฐํ๋ด๊ฑฐ๋ ์ฌ๊ท ํจ์๋ฅผ ํ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ
ํด๊ฒฐํ ์ ์์ต๋๋ค.
(ํด๋น ํจ์๋ Board์ ํน์ ๊ตฌ์ญ(yํ x์ด)์ ์ ํํ์์ ๋์ ๊ฒฐ๊ณผ๋ฅผ panels์
๋ฐ์ํ๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค. ๋ฐ๋ผ์, GUI์์๋ ํด๋น ๊ตฌ์ญ์ ์ ํ ์ ์ด ํจ์๋ฅผ
ํธ์ถํ๊ณ , panels์ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.)
โค [ํจ์] toggleFlag(self, y, x): panels์ yํ x์ด์ ์์นํ Panel์ flag๋ฅผ
toggleํฉ๋๋ค. ์ฆ, ํ์ฌ flag๊ฐ ์กด์ฌํ๋ค๋ฉด ์คํ ํ ์์ด์ง๊ณ , ์๋ค๋ฉด ์คํ ํ
์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
โฅ [ํจ์] checkReveal(self, y, x): panels์ yํ x์ด์ ์์นํ Panel์ด ๋ฐํ์ ธ ์๋์ง
ํ์ธํฉ๋๋ค. ๋ฐํ์ ธ ์๋ค๋ฉด True๋ฅผ returnํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด False๋ฅผ
returnํฉ๋๋ค.
โฆ [ํจ์] checkFlag(self, y, x): panels์ yํ x์ด์ ์์นํ Panel์ flag๊ฐ ์๋์ง
ํ์ธํฉ๋๋ค. flag๊ฐ ์๋ค๋ฉด, True๋ฅผ returnํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด False๋ฅผ
returnํฉ๋๋ค.
โง [ํจ์] checkMine(self, y, x): panels์ yํ x์ด์ ์์นํ Panel์ mine์ด ์๋์ง
ํ์ธํฉ๋๋ค. mine์ด ์๋ค๋ฉด, True๋ฅผ returnํ๊ณ , ๊ทธ๋ ์ง ์๋ค๋ฉด False๋ฅผ
returnํฉ๋๋ค.
โจ [ํจ์] getNumOfNearMines(self, y, x): panels์ yํ x์ด์ ์์นํ Panel์ ์ธ์ ํ
mine์ ์๋ฅผ returnํฉ๋๋ค. ์ด๋ ํด๋น Panel์ด EmptyPanel์์ ๊ฐ์ ์ผ๋ก ํฉ๋๋ค.
E. App
GUI ๊ตฌํ ์ฝ๋๋ฅผ ๋ด๋นํฉ๋๋ค. ์ ์ฒด GUI๋ฅผ ๊ฐ์ธ๋ Frame๋ฅผ ์์ํ๊ณ , ๊ฐ widget์
Board์ ์กด์ฌํ๋ ํจ์๋ฅผ ์ ์ ํ๊ฒ ์ฌ์ฉํ์ฌ ๊ตฌํํฉ๋๋ค. ์ฝ๊ฒ ๊ตฌํํ๊ธฐ ์ํด์๋
board๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์ ์ฒด ํ์ ๋ค์ ๊ทธ๋ฆฌ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ต๋๋ค.
๋ณ๋๋ก ์ ์ํ๋ method๋ ์๊ณ , ์์จ์ ์ผ๋ก ํด๋น class๋ฅผ ์ ์ ํ ์ฑ์ ์๋ (2)์์
์ ์ํ๋ GUI ์๊ตฌ ์ฌํญ์ ๋ง์กฑ์์ผ์ผ ํฉ๋๋ค. (์ถ๊ฐํ ๋ณ์ ๋ฐ ๋ฉ์๋์ ๋ํ ์ค๋ช
์
6
๋ฐ๋์ ์ฃผ์ ๋ฐ ๋ณด๊ณ ์์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.)
(2) ํด๋น ์์คํ
์์ ์๊ตฌํ๋ GUI๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
A. ์ ์ฒด๋ Header ๋ถ๋ถ๊ณผ Body ๋ถ๋ถ์ผ๋ก ๋๋ฉ๋๋ค.
B. Header ๋ถ๋ถ์๋ ์ด๊ธฐํ ๋ฒํผ์ด ์กด์ฌํ๋ฉฐ, ๊ฐ๋ก ๋ฐฉํฅ์์ ์ค์์ ์์นํฉ๋๋ค.
โ ์ข ํด๋ฆญ ์์ Body ๋ถ๋ถ์ ๋ชจ๋ ๋ด์ฉ์ด ์ด๊ธฐํ ํฉ๋๋ค.
โก ํ์ ์์๋ ์๋ ๋ชจ์์ด ํ๊ธฐ๋๊ณ , ํจ๋ฐฐ ์์๋ ํด๊ณจ, ์ฑ๊ณต ์์๋ ์ ๊ธ๋ผ์ค๋ฅผ ๋
์บ๋ฆญํฐ๊ฐ ๋
ธ์ถ๋ฉ๋๋ค.
C. Body ๋ถ๋ถ์๋ ๋ฒํผ์ผ๋ก ์ด๋ฃจ์ด์ง ์ง๋ขฐ ์ฐพ๊ธฐ ๋ณด๋๊ฐ ์ฃผ์ด์ง๋๋ค. (์ฒ์ ํฌ๊ธฐ๋
10ร10์ผ๋ก ๊ณ ์ ํฉ๋๋ค.)
โ ๊ฐ ๋ฒํผ์ ํด๋ฆญ์ด ๊ฐ๋ฅํด์ผ ํ๊ณ , ์ด๋ฏธ ๋๋ฌ๋ ๋ถ๋ถ์ ์๊ฐ์ ์ผ๋ก ๋ช
ํํ๊ฒ ๊ตฌ๋ถ์ด
๊ฐ์ผ ํฉ๋๋ค.
โก ๋ฐํ์ง ๋น ์นธ ์ค์์ ์ธ๊ทผ ์ง๋ขฐ์ ์๊ฐ 0์ธ ์นธ์ 0์ ํ๊ธฐํ์ง ์๊ณ , ๋น์ ๋ก๋๋ค.
โข ์ข ํด๋ฆญ ์์ ํด๋น ์์น์ ํด๋นํ๋ ๊ฐ์ด ๋ฐํ์ง๋๋ค(์ซ์, ๋น์นธ, ํญํ ์ค ํ๋).
์ด๋ฏธ ๋ฐํ์ก๊ฑฐ๋ ๊น๋ฐ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์ต๋๋ค.
โฃ ์ฐ ํด๋ฆญ ์์ ํด๋น ์์น์ ๊น๋ฐ์ ๊ฝ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด๋ฏธ ์๋ค๋ฉด
์ ๊ฑฐํ๊ณ , ์๋ค๋ฉด ๊ฝ์ ์ ์๋ค. ์ด๋ฏธ ๋ฐํ์ง ์นธ์ ๊ฒฝ์ฐ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง
์์ต๋๋ค.
โค ํจ๋ฐฐํ ๊ฒฝ์ฐ ์กด์ฌํ๋ ๋ชจ๋ ์นธ์ ๋ฐํ๋๋ค. ์๋์ ๋ ๋ฒ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ชจ๋ ์นธ์ด
๋ฐํ์ ธ์ผ ํฉ๋๋ค.
โฅ ๊ตฌํ์ ํ์ํ ์ด๋ฏธ์ง ํ์ผ(์๋ ์ฌ๋, ํด๊ณจ, ์ ๊ธ๋ผ์ค, ํญํ, ๊น๋ฐ)์ imgs ํด๋
์์ ๋ชจ๋ ์กด์ฌํ๋ ์ด๋ฅผ ์ฌ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค.
โฆ ์ด์ธ์ ๋ํ
์ผํ ๋์์ธ์ ํ๊ฐ ํญ๋ชฉ์ ๋ค์ด๊ฐ์ง ์์ต๋๋ค.
Ex) ์ผ์ชฝ๋ถํฐ ํ๋ ์ด ์ค, ํจ๋ฐฐ ์, ์ฑ๊ณต ์์ ๊ฒฐ๊ณผ
7
D. ์๋จ ๋์ด๋ ๋ฉ๋ด๋ฅผ ํตํด์ Easy, Normal, Hard๋ก ๋ฐ๊ฟ ์ ์๋๋ก ๊ตฌํํฉ๋๋ค.
๋์ด๋๋ง๋ค ์ง๋ขฐ์ ๊ฐ์์ ๋ณด๋์ ํฌ๊ธฐ๊ฐ ๋ณํ๋๋ก ํฉ๋๋ค.
โ Easy : 10๊ฐ์ ์ง๋ขฐ, 10ร10 board
โก Normal : 30๊ฐ์ ์ง๋ขฐ, 15ร15 board
โข Hard : 50๊ฐ์ ์ง๋ขฐ, 20ร20 board
Ex) ์๋จ์ ๋์ด๋๋ผ๋ ๋ฉ๋ด๊ฐ ์กด์ฌํ๊ณ , ์ผ์ชฝ๋ถํฐ ํด๋น ๋์ด๋์ ๋ฐ๋ฅธ ๋ณด๋์ ํฌ๊ธฐ
๋ณํ๋ฅผ ๋ณด์
๋๋ค. (Easy, Normal, Hard ์)(์ฃผ์ ์ฌํญ)
(1) ๋ค์ ํ ๋ฒ ๊ฐ์กฐํ์ง๋ง, ๋์์ธ์ ์ ์์ ๋ฐ์๋์ง ์์ต๋๋ค. ๊ณผ๋ํ ์๊ฐ์ ํฌ์ํ์ง
๋ง์๊ธฐ ๋ฐ๋๋๋ค.
(2) ํด๋น ๊ณผ์ ์์๋ ๋ ๊ฐ์ ํ์ผ(model.py, app.py)์ด ์กด์ฌํ๋ฉฐ, ๋ ๊ฐ ๋ชจ๋ ์ ์ถ์ ํด์ผ
ํฉ๋๋ค. ๊ทธ ์ค app.py์์๋ GUI๊ฐ ๋์ํ์ง ์๋๋ผ๋, model.py์ Board, Panel, EmptyPanel,
MinePanel์ ๊ตฌํ๋ง์ผ๋ก๋ ์ ์๋ฅผ ๋ถ์ฌํฉ๋๋ค.
[์ฐธ๊ณ ]
(1) Demo ๋์์
https://drive.google.com/file/d/1cqOAmF7E-QWR1bSH3zkReoaXHUbBKH5R/view?usp=sharing
(2) GUI ์ฐธ๊ณ ์ฝ๋
๊ตฌํ์ ๋์์ด ๋ ์ ์๋ GUI code์
๋๋ค. ํ์ง๋ง, ์ ๋ต์ด ์๋๋ ํธํ๋๋ก ๊ตฌํํ์๋ฉด
๋ฉ๋๋ค.
https://github.com/euidong/minesweeper/blob/v0.0.1/gui_test.py
Assignment, CSED101., Problem, Programming, solved, Solving
[SOLVED] Csed101. programming & problem solving programming assignment 4
$25
File Name: Csed101__programming___problem_solving_programming_assignment_4.zip
File Size: 593.46 KB
Reviews
There are no reviews yet.