, , , , ,

[SOLVED] Csed101. programming & problem solving programming assignment 4

$25

File Name: Csed101__programming___problem_solving_programming_assignment_4.zip
File Size: 593.46 KB

5/5 - (1 vote)

โ—ผ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: 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

Shopping Cart

No products in the cart.

No products in the cart.

[SOLVED] Csed101. programming & problem solving programming assignment 4[SOLVED] Csed101. programming & problem solving programming assignment 4
$25