CSED232 – Assignment #5 (Solution)

$ 25.00
Category:

Description

– GUI Programming –

주의 사항
⚫ ν΄λž˜μŠ€λŠ” .h 파일과 .cpp νŒŒμΌμ— λ‚˜λˆ μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€.
⚫ λ¬Έμ œμ— λ”°λ‘œ λͺ…μ‹œλ˜μ–΄ μžˆμ§€ μ•Šμ•„λ„ 클래슀의 μƒμ„±μž (constructor), μ†Œλ©Έμž (destructor)λŠ” ν•„μˆ˜μ μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
⚫ 문법 μ‚¬μš©μ— μ œμ•½μ€ μ—†μŠ΅λ‹ˆλ‹€.
⚫ 문제의 κ΅¬ν˜„ μš”κ΅¬ 사항을 꼼꼼히 읽어 λ³΄μ‹œκΈ° λ°”λžλ‹ˆλ‹€.

감점 사항
⚫ 제좜 κΈ°ν•œ λ‹€μŒ λ‚  (6μ›” 12일) 제좜 μ‹œ 20% 감점, 이틀 λ’€ (6μ›” 13일) 제좜 μ‹œ 40% 감점
β—Ό 이 이후에 μ œμΆœν•  경우 0점 처리
⚫ 컴파일이 λ˜μ§€ μ•ŠμœΌλ©΄ 0점 처리
⚫ 제좜 방법 μœ„λ°˜ μ‹œ 감점

제좜 방법
⚫ 같이 제곡된 Qt Creator μ„€μΉ˜ 방법을 μ°Έκ³ ν•΄ μ£Όμ‹­μ‹œμ˜€. ν•΄λ‹Ή μ„€μΉ˜ λ°©λ²•λŒ€λ‘œ μ„€μΉ˜λœ Qt Creator μƒμ—μ„œ 컴파일 및 채점이 진행될 κ²ƒμž…λ‹ˆλ‹€.
⚫ Qt Creator의 ν”„λ‘œμ νŠΈ 폴더λ₯Ό κ·ΈλŒ€λ‘œ μ••μΆ•ν•˜μ—¬ μ œμΆœν•΄ μ£Όμ‹­μ‹œμ˜€. ν”„λ‘œμ νŠΈ 폴더 λ‚΄λΆ€ 의 .pro 파일이 λ°˜λ“œμ‹œ ν¬ν•¨λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
⚫ Qt Creator의 ν”„λ‘œμ νŠΈ 폴더와 레포트λ₯Ό 같이 μ••μΆ•ν•˜μ—¬ β€œν•™λ²ˆ.zipβ€μ˜ ν˜•νƒœλ‘œ μ œμΆœν•΄ μ£Όμ‹­ μ‹œμ˜€. 압좕될 레포트의 이름 μ—­μ‹œ β€œν•™λ²ˆ.pdfβ€μ˜ ν˜•νƒœλ‘œ μ„€μ •ν•΄ μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€.

곡톡 채점 κΈ°μ€€
1. ν”„λ‘œκ·Έλž¨ κΈ°λŠ₯
⚫ ν”„λ‘œκ·Έλž¨μ΄ μš”κ΅¬ 사항을 λͺ¨λ‘ λ§Œμ‘±ν•˜λ©΄μ„œ μ˜¬λ°”λ₯΄κ²Œ μ‹€ν–‰λ˜λŠ”κ°€?

2. ν”„λ‘œκ·Έλž¨ 섀계 및 κ΅¬ν˜„
⚫ μš”κ΅¬ 사항을 λ§Œμ‘±ν•˜κΈ° μœ„ν•œ λ³€μˆ˜ 및 μ•Œκ³ λ¦¬μ¦˜ 섀계가 잘 λ˜μ—ˆλŠ”κ°€?
⚫ λ¬Έμ œμ—μ„œ μ œμ‹œλœ μ„ΈλΆ€ 쑰건을 λͺ¨λ‘ λ§Œμ‘±ν•˜μ˜€λŠ”κ°€?
⚫ μ„€κ³„λœ λ‚΄μš©μ΄ μš”κ΅¬λœ μ–Έμ–΄λ₯Ό μ΄μš©ν•˜μ—¬ 적절히 κ΅¬ν˜„λ˜μ—ˆλŠ”κ°€?

3. ν”„λ‘œκ·Έλž¨ 가독성
⚫ ν”„λ‘œκ·Έλž¨μ΄ 읽기 쉽고 μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ μž‘μ„±λ˜μ—ˆλŠ”κ°€?
⚫ λ³€μˆ˜λͺ…이 무엇을 μ˜λ―Έν•˜λŠ”μ§€ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄κ°€?
⚫ ν”„λ‘œκ·Έλž¨μ˜ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° 쉽도둝 주석을 잘 λΆ™μ˜€λŠ”κ°€?

4. λ³΄κ³ μ„œ ꡬ성 및 λ‚΄μš©, 양식
⚫ λ³΄κ³ μ„œλŠ” μ μ ˆν•œ λ‚΄μš©μœΌλ‘œ μ΄ν•΄ν•˜κΈ° 쉽고 보기 μ’‹κ²Œ 잘 μž‘μ„±λ˜μ—ˆλŠ”κ°€?
⚫ λ³΄κ³ μ„œμ˜ 양식을 잘 λ”°λžλŠ”κ°€?

λ‹€λ₯Έ μ‚¬λžŒμ˜ ν”„λ‘œκ·Έλž¨ ν˜Ήμ€ 인터넷에 μžˆλŠ” ν”„λ‘œκ·Έλž¨μ„ 볡사(copy)ν•˜κ±°λ‚˜ κ°„λ‹¨νžˆ μˆ˜μ •ν•΄μ„œ μ œμΆœν•˜λ©΄ 학점은 무쑰건 β€˜F’가 λ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λΆ€μ •ν–‰μœ„κ°€ 발견되면 ν•™ κ³Όμ—μ„œ μ •ν•œ 기쀀에 따라 좔가적인 뢈이읡이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

2048 Puzzle Game

1. 과제 κ°œμš”
이번 κ³Όμ œμ—μ„œλŠ” C++ GUI 개발 ν”„λ ˆμž„μ›Œν¬μΈ Qt frameworkλ₯Ό μ΄μš©ν•˜μ—¬ 2048 퍼즐 κ²Œμž„μ„ 제
μž‘ν•΄ λ³Έλ‹€. Qt Creator 개발 ν™˜κ²½μ„ 톡해 2048 νΌμ¦κ²Œμž„μ„ μ œμž‘ν•˜μ—¬ GUI μ œμž‘ κ²½ν—˜μ„ μŒ“λŠ” 것을 λͺ©ν‘œλ‘œ ν•œλ‹€.

2. 과제 μ„€λͺ…
2.1 주의 사항
κ΅¬ν˜„ μš”κ΅¬ 사항을 μ„€λͺ…ν•˜κΈ°μ— μ•žμ„œ, 이번 과제λ₯Ό κ΅¬ν˜„ν•¨μ— μžˆμ–΄μ„œ λ°˜λ“œμ‹œ μ§€μΌœμ•Ό ν•  사항듀을
λͺ…μ‹œν•œλ‹€.

⚫ GUI κ΅¬ν˜„ μ½”λ“œμ™€ κ²Œμž„ λ‚΄λΆ€ 둜직 κ΅¬ν˜„ μ½”λ“œλŠ” λ°˜λ“œμ‹œ λΆ„λ¦¬ν•˜μ—¬ κ΅¬ν˜„ν•œλ‹€. μ΄λŠ” κ²Œμž„ λ‚΄ λΆ€ 둜직 κ΅¬ν˜„ μ½”λ“œμ™€ GUI κ΅¬ν˜„ μ½”λ“œλ₯Ό λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ 각 κ°μ²΄λ“€μ˜ 독립성을 높이고 κ΅¬ν˜„ 의 νŽΈμ˜μ„±μ„ 높이기 μœ„ν•¨μ΄λ‹€. κ°€μž₯ μƒμœ„ 폴더에 .pro 파일과 main.cpp ν•¨μˆ˜κ°€ μœ„μΉ˜ν•˜λ„ 둝 ν•˜κ³  GUI κ΅¬ν˜„ μ½”λ“œλŠ” ui 폴더에 μœ„μΉ˜ν•˜λ„λ‘, κ²Œμž„ λ‚΄λΆ€ 둜직 κ΅¬ν˜„ μ½”λ“œλŠ” game 폴 더에 μœ„μΉ˜ν•˜λ„λ‘ ν•œλ‹€.
⚫ Designer UI (.ui 파일)λ₯Ό ν†΅ν•œ GUI κ΅¬ν˜„μ„ κΈˆμ§€ν•œλ‹€. GUI κ΅¬ν˜„μ— ν•„μš”ν•œ μ„ΈλΆ€ κ΅¬ν˜„ 사항 λ“€ (λΈ”λ‘μ˜ 크기, κ²Œμž„νŒμ˜ 크기 λ“±)은 λ¬Έμ œμ—μ„œ μ£Όμ–΄μ§€λ―€λ‘œ 이λ₯Ό κ°€μ§€κ³  μ½”λ“œλ₯Ό 톡해 GUIλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•œλ‹€.

2.2 κ²Œμž„ μ§„ν–‰
이번 μ„Ήμ…˜μ—μ„œλŠ” 과제의 κ²Œμž„μ΄ μ§„ν–‰λ˜λŠ” 과정을 μ„œμˆ ν•œλ‹€. 세뢀적인 κ΅¬ν˜„ μš”κ΅¬ 사항은 λ‹€μŒ
μ„Ήμ…˜μ—μ„œ μ„œμˆ ν•œλ‹€. κ΅¬ν˜„ 이전에 https://www.mathsisfun.com/games/2048.html μ—μ„œ κ²Œμž„μ„ 해보 λ©° κ²Œμž„μ˜ μ „λ°˜μ μΈ 흐름을 νŒŒμ•…ν•˜λŠ” 것을 μΆ”μ²œν•œλ‹€.
2.2.1 κ²Œμž„ μ‹œμž‘
ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같이 λžœλ€ν•œ κ²Œμž„νŒμ΄ λ‚˜νƒ€λ‚œλ‹€.

4 x 4 격자 ν˜•νƒœμ˜ κ²Œμž„νŒ λ‚΄λΆ€ λžœλ€ν•œ 2ꡰ데에 숫자 2 블둝이 λ“±μž₯ν•˜λŠ” κ²ƒμœΌλ‘œ κ²Œμž„μ΄ μ‹œμž‘λœ
λ‹€. 전체 λ ˆμ΄μ•„μ›ƒμ€ λ‹€μŒ λ„€ 개의 μš”μ†Œλ“€λ‘œ κ΅¬μ„±λœλ‹€.

1. κ²Œμž„νŒ: 4 x 4 격자 ν˜•νƒœμ˜ κ³΅κ°„μœΌλ‘œ, 퍼즐 κ²Œμž„μ˜ 블둝듀이 합쳐지고 μ΄λ™ν•˜λŠ” 곡간이닀.
2. 점수: ν˜„μž¬ κ²Œμž„νŒμ˜ μ μˆ˜κ°€ ν‘œμ‹œλ˜λŠ” 곡간이닀. 점수λ₯Ό κ³„μ‚°ν•˜λŠ” 곡식은 좔후에 μ„€λͺ…ν•œ λ‹€.
3. κ²Œμž„ μ’…λ£Œ λ²„νŠΌ: κ²Œμž„μ„ 쀑간에 μ’…λ£Œν•  수 μžˆλŠ” λ²„νŠΌμ΄λ‹€. ν•΄λ‹Ή λ²„νŠΌμ„ λˆ„λ₯Ό 경우 μ •λ§λ‘œ κ²Œμž„μ„ μ’…λ£Œν•  것인지 λ¬»λŠ” 확인창이 좜λ ₯λœλ‹€. β€œYes” λ²„νŠΌμ„ λˆ„λ₯Ό 경우 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œ 되며 β€œNo” λ²„νŠΌμ„ λˆ„λ₯΄κ±°λ‚˜ 확인창을 닫을 경우 아무 일도 μΌμ–΄λ‚˜μ§€ μ•ŠλŠ”λ‹€.
4. κ²Œμž„νŒ 되돌리기 λ²„νŠΌ: ν•΄λ‹Ή λ²„νŠΌμ„ λˆ„λ₯Ό 경우 κ²Œμž„νŒμ΄ μ΄μ „μ˜ μƒνƒœλ‘œ λ˜λŒμ•„κ°„λ‹€. ν•œ κ²Œμž„ λ‹Ή 되돌리기 κΈ°νšŒλŠ” 3번 μ£Όμ–΄μ§„λ‹€.

κ·Έλ¦Ό 2. κ²Œμž„ μ’…λ£Œ λ²„νŠΌμ„ λˆ„λ₯Ό 경우 λ‚˜νƒ€λ‚˜λŠ” 확인창

κ·Έλ¦Ό 2λŠ” κ²Œμž„ μ’…λ£Œ λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ λ‚˜μ˜€λŠ” 확인창이닀. Yesλ₯Ό λˆ„λ₯Ό 경우 ν”„λ‘œκ·Έλž¨μ΄ κ·ΈλŒ€λ‘œ μ’…λ£Œλ˜λ©°, Noλ₯Ό λˆ„λ₯Ό 경우 아무 일도 μΌμ–΄λ‚˜μ§€ μ•Šκ³  κ²Œμž„μœΌλ‘œ λ˜λŒμ•„κ°„λ‹€.

2.2.2 κ²Œμž„ μ‘°μž‘ 및 블둝 이동
κ²Œμž„νŒμ—μ„œμ˜ μ‘°μž‘μ€ ν‚€λ³΄λ“œ λ°©ν–₯ν‚€λ‘œ 이루어진닀. μ‚¬μš©μžκ°€ λˆ„λ₯Έ λ°©ν–₯킀에 λŒ€ν•œ λ°©ν–₯으둜 λΈ”
둝듀이 μ΄λ™ν•˜λ©° (예λ₯Ό λ“€μ–΄, μ™Όμͺ½ λ°©ν–₯ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ μ™Όμͺ½μœΌλ‘œμ˜ 이동이 κ°€λŠ₯ν•˜λ‹€λ©΄ 블둝듀이 μ™Όμͺ½μœΌλ‘œ 이동), λ°©ν–₯ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ ν•΄λ‹Ή λ°©ν–₯으둜의 이동이 λΆˆκ°€λŠ₯ν•˜λ©΄ κ·Έ μž…λ ₯을 λ¬΄μ‹œν•œλ‹€. λ°© ν–₯ν‚€ μ΄μ™Έμ˜ μž…λ ₯은 λ¬΄μ‹œν•˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€.
λ°©ν–₯ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ 블둝듀이 μ΄λ™ν•˜λŠ” κ·œμΉ™μ„ μžμ„Ένžˆ μ•Œμ•„λ³΄μž.
1. μž…λ ₯된 λ°©ν–₯에 λŒ€ν•΄ 빈 곡간이 μ‘΄μž¬ν•˜λ©΄ ν•΄λ‹Ή 블둝은 κ·Έ λ°©ν–₯으둜 μ΅œλŒ€ν•œ μ΄λ™ν•œλ‹€.
2. 블둝이 μ΄λ™ν•˜λ©΄μ„œ λ‹€λ₯Έ 값을 κ°–λŠ” 블둝과 λ§žλ‹Ώμ„ 경우 두 블둝은 합쳐지지 μ•ŠλŠ”λ‹€.
3. 블둝이 μ΄λ™ν•˜λ©΄μ„œ 같은 값을 κ°–λŠ” 블둝과 λ§žλ‹Ώμ„ 경우 두 블둝은 합쳐진닀. λ˜ν•œ, λΈ” 둝듀은 ν•©μ³μ§ˆ λ•Œ ν•œ λ²ˆμ— μ΅œλŒ€ 두 κ°œκΉŒμ§€λ§Œ κ·Έ 병합에 κ΄€μ—¬ν•  수 μžˆλ‹€.

μš°μ„ , μž…λ ₯된 λ°©ν–₯에 λŒ€ν•΄ 빈 곡간이 μ‘΄μž¬ν•˜λ©΄ 블둝듀은 κ·Έ λ°©ν–₯으둜 μ΅œλŒ€ν•œ μ΄λ™ν•œλ‹€. κ·Έλ¦Ό 3 을 μ°Έκ³ ν•˜λ„λ‘ ν•œλ‹€.

κ·Έλ¦Ό 3. (쒌) μ΄λ™ν•˜κΈ° μ „ κ²Œμž„νŒ, (우) μ™Όμͺ½ λ°©ν–₯ν‚€λ₯Ό λˆŒλŸ¬μ„œ 블둝듀이 μ΄λ™ν•œ κ²Œμž„νŒ. 3ν–‰ 3μ—΄μ˜ 블둝은 이동 ν›„ μƒˆλ‘œ μƒμ„±λœ 블둝이닀.

블둝이 μ΄λ™ν•˜λ©΄μ„œ λ‹€λ₯Έ 값을 κ°–λŠ” 블둝과 λ§žλ‹Ώμ„ 경우 두 블둝은 합쳐지지 μ•Šκ³  μΆ©λŒν•œλ‹€. κ·Έ
λ¦Ό 4λ₯Ό μ°Έκ³ ν•˜λ„λ‘ ν•œλ‹€.

κ·Έλ¦Ό 4. (쒌) μ΄λ™ν•˜κΈ° μ „ κ²Œμž„νŒ, (우) μœ„μͺ½ λ°©ν–₯ν‚€λ₯Ό λˆŒλŸ¬μ„œ 블둝듀이 μ΄λ™ν•œ κ²Œμž„νŒ. (우)의 4ν–‰ 2μ—΄ 블둝은 이동 ν›„ μƒˆλ‘œ μƒμ„±λœ 블둝이닀.
블둝이 μ΄λ™ν•˜λ©΄μ„œ 같은 값을 κ°–λŠ” 블둝과 λ§žλ‹Ώμ„ 경우 두 블둝은 합쳐진닀. κ·Έλ¦Ό 5λ₯Ό 보면 1
ν–‰ 1μ—΄μ˜ 블둝과 2ν–‰ 1μ—΄μ˜ 블둝이 μ•„λž˜λ‘œ μ΄λ™ν•˜λ©΄μ„œ 합쳐진 것을 확인할 수 μžˆλ‹€. λ˜ν•œ, 블둝듀 이 ν•©μ³μ§ˆ λ•Œ ν•˜λ‚˜μ˜ 병합에 λŒ€ν•΄ μ΅œλŒ€ 두 κ°œκΉŒμ§€λ§Œ κ΄€μ—¬ν•  수 μžˆλ‹€. κ·Έλ¦Ό 5λ₯Ό 보면 2-2-4 블둝 이 1열에 놓여 μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€. μ—¬κΈ°μ„œ 2-2-4κ°€ ν•©μ³μ Έμ„œ 8이 λ‚˜μ˜€λŠ” 것이 μ•„λ‹ˆλΌ 4-4κ°€ λ˜λŠ” 것을 μ•Œ 수 μžˆλ‹€.

κ·Έλ¦Ό 5. (쒌) μ΄λ™ν•˜κΈ° μ „ κ²Œμž„νŒ, (우) μ•„λž˜μͺ½ λ°©ν–₯ν‚€λ₯Ό λˆŒλŸ¬μ„œ 블둝듀이 μ΄λ™ν•œ κ²Œμž„νŒ. 1ν–‰ 1μ—΄ 의 블둝은 이동 ν›„ μƒˆλ‘œ μƒμ„±λœ 블둝이닀.

λ˜ν•œ, 2-2-2κ°€ κ°€λ‘œλ‘œ 연달아 μžˆμ„ λ•Œ μ™Όμͺ½μœΌλ‘œ 이동할 경우 ν•©μ³μ Έμ„œ 4-2κ°€ 되며, 였λ₯Έμͺ½μœΌλ‘œ
이동할 경우 ν•©μ³μ Έμ„œ 2-4κ°€ λœλ‹€. 2-2-2κ°€ μ„Έλ‘œλ‘œ 연달아 μžˆμ„ λ•Œλ„ λ§ˆμ°¬κ°€μ§€λ‘œ, μœ„μͺ½μœΌλ‘œ 이동 ν•  경우 μœ„μ—μ„œλΆ€ν„° 4-2κ°€ 되며 μ•„λž˜μͺ½μœΌλ‘œ 이동할 경우 μœ„μ—μ„œλΆ€ν„° 2-4κ°€ λœλ‹€.

2.2.3 점수 계산
블둝듀이 ν•©μ³μ§ˆ λ•Œ κ²Œμž„νŒμ˜ μ μˆ˜κ°€ μ˜¬λΌκ°„λ‹€. ν•©μ³μ Έμ„œ μƒμ„±λœ λΈ”λ‘μ˜ κ°’λ§ŒνΌ μ μˆ˜κ°€ μ˜¬λΌκ°€
도둝 κ΅¬ν˜„ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 8 블둝과 8 블둝을 ν•©μ³μ„œ 16 블둝을 λ§Œλ“€μ—ˆλ‹€λ©΄ μ μˆ˜λŠ” 16이 μ˜¬λΌκ°„ λ‹€. ν•œ 번의 μ΄λ™μœΌλ‘œ μ—¬λŸ¬ 개의 병합이 λ°œμƒν•œλ‹€λ©΄ λͺ¨λ“  병합에 λŒ€ν•΄ μ μˆ˜κ°€ μ˜¬λΌκ°€λ„λ‘ ν•΄μ•Ό ν•œλ‹€.

2.2.4 μƒˆλ‘œμš΄ 블둝 생성
κ²Œμž„νŒμ—μ„œ 블둝듀을 μ΄λ™ν•œ λ’€μ—λŠ” λžœλ€ν•œ 빈 곡간에 μƒˆλ‘œμš΄ 블둝이 ν•˜λ‚˜ μƒμ„±λœλ‹€. μƒμ„±λ˜λŠ”
μƒˆλ‘œμš΄ 블둝은 μ •ν•΄μ§„ ν™•λ₯ μ— 따라 2 λ˜λŠ” 4의 값을 κ°€μ§„λ‹€. 이번 과제λ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ” 20% ν™•λ₯  둜 4의 값을 κ°–λŠ” 블둝이 μƒμ„±λ˜λ„λ‘, 80% ν™•λ₯ λ‘œ 2의 값을 κ°–λŠ” 블둝이 μƒμ„±λ˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€.

2.2.5 되돌리기 λ²„νŠΌ (Restore)
되돌리기 λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ κ²Œμž„νŒμ΄ μ΄μ „μ˜ μƒνƒœλ‘œ λ˜λŒμ•„κ°„λ‹€. λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ 정말 되돌릴 것인 μ§€ λ¬»λŠ” λ©”μ‹œμ§€μ™€ ν•¨κ»˜ ν˜„μž¬ 남은 되돌리기 기회λ₯Ό μ•Œλ €μ£ΌλŠ” 창이 좜λ ₯λœλ‹€ (κ·Έλ¦Ό 6).

κ·Έλ¦Ό 6. κ²Œμž„ μ§„ν–‰ 쀑 Restore λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ 좜λ ₯λ˜λŠ” λ©”μ‹œμ§€ μ°½

이 μƒνƒœμ—μ„œ Yesλ₯Ό λˆ„λ₯Ό 경우 이전 μƒνƒœλ‘œ λ˜λŒμ•„κ°€λ©° μ„±κ³΅μ μœΌλ‘œ λ˜λŒλ €μ‘Œλ‹€λŠ” λ©”μ‹œμ§€λ₯Ό 좜 λ ₯ν•œλ‹€ (κ·Έλ¦Ό 7). Noλ₯Ό λˆ„λ₯Ό 경우 아무 일도 λ²Œμ–΄μ§€μ§€ μ•ŠλŠ”λ‹€.

κ·Έλ¦Ό 7. κ·Έλ¦Ό 6μ—μ„œ Yes λ²„νŠΌμ„ 눌러 κ²Œμž„νŒμ„ 되돌린 λͺ¨μŠ΅
되돌리기 λ²„νŠΌμ„ κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” 이전 κ²Œμž„νŒ μƒνƒœλ₯Ό 버퍼에 μ €μž₯ν•΄μ•Ό ν•œλ‹€. 버퍼에 μ €μž₯되
λŠ” κ²Œμž„νŒμ€ 1개둜 μ œν•œν•œλ‹€. λ‹€μ‹œ λ§ν•˜μžλ©΄, 되돌리기 λ²„νŠΌμ„ μ‚¬μš©ν•˜μ—¬ 버퍼에 μ €μž₯된 κ²Œμž„νŒ 상 νƒœλ‘œ λ˜λŒλ Έμ„ 경우 더 이상 λ²„νΌμ—λŠ” 아무 것도 λ‚¨μ•„μžˆμ§€ μ•Šμ„ 것이닀. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 되돌리기 λ²„νŠΌμ„ 두 번 μ—°μ†μœΌλ‘œ μ‚¬μš©ν•  μˆ˜λŠ” μ—†λ‹€. 그리고 κ²Œμž„μ΄ μ‹œμž‘ν•œ μˆœκ°„μ—λ„ λ²„νΌμ—λŠ” 아무 것도 μ €μž₯λ˜μ–΄ μžˆμ§€ μ•Šμ„ 것이닀. μ΄λ ‡κ²Œ 되돌리기 λ²„νŠΌμ„ 두 번 μ—°μ†μœΌλ‘œ μ‚¬μš©ν•˜κ±°λ‚˜ κ²Œμž„μ΄ μ‹œμž‘λœ μˆœκ°„μ— 되돌리기 λ²„νŠΌμ„ λˆŒλŸ¬μ„œ 버퍼에 아무 것도 없을 κ²½μš°μ—λŠ” κ·Έλ¦Ό 8κ³Ό 같은 μ—λŸ¬ 창을 좜λ ₯ ν•œλ‹€. μ—λŸ¬ μ°½μ—μ„œ OK λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ λ‹€μ‹œ κ²Œμž„μ΄ μž¬κ°œλœλ‹€.

κ·Έλ¦Ό 8. 버퍼에 아무 것도 μ €μž₯λ˜μ–΄ μžˆμ§€ μ•Šμ€ μƒνƒœμ—μ„œ Restore λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ

λ˜ν•œ, 더 이상 되돌리기 κΈ°νšŒκ°€ λ‚¨μ•„μžˆμ§€ μ•Šμ€ μƒνƒœμ—μ„œ Restore λ²„νŠΌμ„ λˆ„λ₯΄λ©΄ κ·Έλ¦Ό 9와 같은 μ—λŸ¬ λ©”μ‹œμ§€ 창을 좜λ ₯ν•œλ‹€.

κ·Έλ¦Ό 9. 되돌리기 κΈ°νšŒκ°€ 남지 μ•Šμ€ μƒνƒœμ—μ„œ Restore λ²„νŠΌμ„ λˆŒλ €μ„ λ•Œ 좜λ ₯λ˜λŠ” λ©”μ‹œμ§€ μ°½

2.2.6 κ²Œμž„ 승리
κ²Œμž„μ„ μ§„ν–‰ν•˜μ—¬ 2048 블둝을 λ§Œλ“€λ©΄ μœ μ €κ°€ μŠΉλ¦¬ν•œλ‹€. μ‘°κ΅λŠ” κ²Œμž„μ„ ν•˜λ©΄μ„œ 2048을 λ§Œλ“€μ§€
λͺ»ν–ˆκΈ°μ— 2048이 λ§Œλ“€μ–΄μ Έμ„œ κ²Œμž„μ΄ μŠΉλ¦¬ν•˜λŠ” μ˜ˆμ‹œλ₯Ό λ³΄μ—¬μ£Όμ§€λŠ” λͺ»ν•œλ‹€. κ·Έ λŒ€μ‹  μ½”λ“œλ₯Ό 살짝 λ³€κ²½ν•˜μ—¬ 32κ°€ μƒμ„±λ˜μ—ˆμ„ λ•Œ κ²Œμž„μ΄ μ’…λ£Œλ˜λ„λ‘ μ½”λ“œλ₯Ό λ°”κΏ”λ†“μ•˜λ‹€. λ³΄μ—¬μ£ΌλŠ” μ˜ˆμ‹œμ—μ„œλŠ” 32 λΈ” 둝을 λ§Œλ“€μ–΄μ„œ κ²Œμž„μ΄ λλ‚˜μ§€λ§Œ μ‹€μ œ κ΅¬ν˜„μ—μ„œλŠ” 2048 블둝이 λ§Œλ“€μ–΄μ‘Œμ„ λ•Œ 승리 쑰건이 달성 λ˜λ„λ‘ κ΅¬ν˜„ν•œλ‹€. κ·Έλ¦Ό 10을 보면 μž„μ˜λ‘œ μ„€μ •λœ 승리 쑰건인 32 블둝이 λ§Œλ“€μ–΄μ Έ μžˆλ‹€. κ·Έλ¦Ό 10 κ³Ό 같이 승리 쑰건에 ν•΄λ‹Ήν•˜λŠ” 블둝이 μƒμ„±λ˜λ©΄ 1초 뒀에 β€œCongratulations!” λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 클 리어 μ‹œμ μ˜ 점수λ₯Ό 좜λ ₯ν•˜λŠ” λ©”μ‹œμ§€ λ°•μŠ€λ₯Ό 좜λ ₯ν•œλ‹€.

κ·Έλ¦Ό 10. 승리 쑰건이 λ‹¬μ„±λ˜μ—ˆμ„ λ•Œ 좜λ ₯λ˜λŠ” λ©”μ‹œμ§€ μ°½

2.2.7 κ²Œμž„ 패배 κ·Έ μ–΄λ–€ λ°©ν–₯μœΌλ‘œλ„ 블둝듀이 이동할 수 μ—†λŠ” μƒνƒœκ°€ 되면 κ²Œμž„μ—μ„œ νŒ¨λ°°ν•œλ‹€.

κ·Έλ¦Ό 11. 블둝듀이 μ–΄λ–€ λ°©ν–₯μœΌλ‘œλ„ 이동할 수 μ—†λŠ” μƒνƒœ. 이 μƒνƒœμ— λ„λ‹¬ν•œ κ²ƒλ§ŒμœΌλ‘œλŠ” 아무 일
도 λ²Œμ–΄μ§€μ§€ μ•ŠλŠ”λ‹€.

κ·Έλ¦Ό 11을 보면 더 이상 μ–΄λ–€ λ°©ν–₯μœΌλ‘œλ„ 이동할 수 μ—†λŠ” μƒνƒœκ°€ 된 것을 μ•Œ 수 μžˆλ‹€. 이 μƒνƒœ
에 λ„λ‹¬ν–ˆμ„ λ•ŒλŠ” κ²Œμž„ 패배 λ©”μ‹œμ§€κ°€ 좜λ ₯λ˜μ§€ μ•Šμ§€λ§Œ, 이 μƒνƒœμ—μ„œ 아무 λ°©ν–₯ν‚€λ₯Ό λˆ„λ₯΄λ©΄ κ·Έλ¦Ό 12와 같이 β€œYou lose…” λ©”μ‹œμ§€μ™€ ν•¨κ»˜ 패배 μ‹œμ μ˜ 점수λ₯Ό 좜λ ₯ν•˜λŠ” λ©”μ‹œμ§€ λ°•μŠ€λ₯Ό 좜λ ₯ν•œλ‹€.

κ·Έλ¦Ό 12. κ·Έλ¦Ό 11의 μƒνƒœμ—μ„œ λ°©ν–₯ν‚€λ₯Ό λˆŒλ €μ„ λ•Œ 좜λ ₯λ˜λŠ” λ©”μ‹œμ§€ μ°½
2.3 GUI κ΅¬ν˜„ μ„ΈλΆ€ 사항
2.3.1 ν”„λ‘œκ·Έλž¨ λ ˆμ΄μ•„μ›ƒ
⚫ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ°½
β—Ό 크기 μ„€μ •: κ°€λ‘œ 1300, μ„Έλ‘œ 1000 (resize ν™œμš©)
⚫ κ²Œμž„ 판
β—Ό QGridLayout으둜 κ΅¬ν˜„
β—Ό ν”„λ‘œκ·Έλž¨ μ°½ μ™Όμͺ½μ— μœ„μΉ˜
β—Ό 크기 μ„€μ • λ”°λ‘œ ν•  ν•„μš” μ—†μŒ (05/23 15μ‹œ 10λΆ„ μˆ˜μ •)
⚫ 점수 ν‘œμ‹œ λ ˆμ΄μ•„μ›ƒ
β—Ό QLabel둜 κ΅¬ν˜„
β—Ό ν”„λ‘œκ·Έλž¨ μ°½ 였λ₯Έμͺ½ 상단에 μœ„μΉ˜
β—Ό κΈ€μž 크기 μ œν•œ μ—†μŒ
⚫ κ²Œμž„ μ’…λ£Œ λ²„νŠΌ 및 되돌리기 λ²„νŠΌ
β—Ό QPushButton으둜 κ΅¬ν˜„
β—Ό ν”„λ‘œκ·Έλž¨ μ°½ 였λ₯Έμͺ½ ν•˜λ‹¨μ— μœ„μΉ˜
β—Ό λ²„νŠΌ 크기: κ°€λ‘œ 300, μ„Έλ‘œ 200
β—Ό 폰트 크기: 20pt
β—Ό λ²„νŠΌμ— μ‘΄μž¬ν•˜λŠ” 문ꡬ: μ’…λ£Œ λ²„νŠΌ (Exit), 되돌리기 λ²„νŠΌ (Restore)

2.3.2 블둝
⚫ λΈ”λ‘μ˜ 크기: κ°€λ‘œ 250, μ„Έλ‘œ 250
⚫ 블둝 μ‚¬μ΄μ˜ 간격: 10 (void QGridLayout::setSpacing(int spacing);) (05/23 15μ‹œ 10λΆ„ 수 μ •)
⚫ QLabel 클래슀λ₯Ό 상속받아 κ΅¬ν˜„
⚫ setStyleSheetλ₯Ό μ‚¬μš©ν•˜μ—¬ 블둝 μŠ€νƒ€μΌ μ„€μ • (Widget의 μŠ€νƒ€μΌμ„ CSS둜 μ„€μ •ν•΄ μ£ΌλŠ”
λ©”μ„œλ“œ)
β—Ό setStyleSheet(β€œQLabel { background: rgb(rrr, ggg, bbb); color: black; border-style:
solid; font: 70pt; font: bold; }”); (05/23 15μ‹œ 10λΆ„ μˆ˜μ •)
β—Ό λΉ„μ–΄ μžˆλŠ” 블둝: rgb(255, 255, 255)
β—Ό 2 블둝: rgb(187, 173, 160)
β—Ό 4 블둝: rgb(237, 224, 200)
β—Ό 8 블둝: rgb(242, 177, 121)
β—Ό 16 블둝: rgb(245, 149, 99)
β—Ό 32 블둝: rgb(246, 126, 95)
β—Ό 64 블둝: rgb(246, 94, 59)
β—Ό 128 블둝: rgb(237, 207, 114)
β—Ό 256 블둝: rgb(237, 204, 97)
β—Ό 512 블둝: rgb(237, 200, 80)
β—Ό 1024 블둝: rgb(237, 197, 63)
β—Ό 2048 블둝: rgb(237, 194, 46)

2.3.3 λ©”μ‹œμ§€ μ°½
⚫ λ©”μ‹œμ§€ 창을 λ„μšΈ λ•ŒλŠ” QMessageBoxλ₯Ό ν™œμš©ν•  것
⚫ λ¬Έμ œμ— λ©”μ‹œμ§€ λ‚΄μš©μ΄ μ •ν™•ν•˜κ²Œ λͺ…μ‹œλ˜μ–΄ μžˆλŠ” 것을 μ œμ™Έν•˜κ³ λŠ” λ©”μ‹œμ§€ 창에 ν‘œμ‹œλ˜ λŠ” λ¬Έκ΅¬λŠ” 자유둭게 μ„€μ • κ°€λŠ₯함. ν•΄λ‹Ή 상황에 λ§žλŠ” λœ»μ„ μ „ν•  수만 있으면 OK

2.4 ν•„μˆ˜ κ΅¬ν˜„ 파일 및 클래슀
이번 μ„Ήμ…˜μ—μ„œλŠ” 이번 κ³Όμ œμ—μ„œ ν•„μˆ˜μ μœΌλ‘œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•˜λŠ” 파일 및 클래슀λ₯Ό μ„€λͺ…ν•œλ‹€. 이번
μ„Ήμ…˜μ—μ„œ κ΅¬ν˜„μ„ μš”κ΅¬ν•˜λŠ” ν΄λž˜μŠ€λ“€μ€ λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•˜λ©°, μ΄μ™Έμ˜ 좔가적인 ν΄λž˜μŠ€λ‚˜ 파일 은 자유둭게 κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€. λ³΄κ³ μ„œλ₯Ό μž‘μ„±ν•  λ•Œ 본인이 μΆ”κ°€λ‘œ κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λ‚˜ 파일이 있으 λ©΄ ν•΄λ‹Ή 클래슀 및 νŒŒμΌμ„ μΆ”κ°€ν•œ 이유λ₯Ό μ„œμˆ ν•΄μ•Ό ν•œλ‹€. GUI κ΅¬ν˜„ μ½”λ“œμ™€ κ²Œμž„ λ‚΄λΆ€ 둜직 κ΅¬ν˜„ μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜μ§€ μ•ŠλŠ” 것은 감점 사항이닀.
2.4.1 class Block
κ²Œμž„ λ‚΄λΆ€ 둜직 κ΅¬ν˜„μ— μ‚¬μš©λ˜λŠ” Block ν΄λž˜μŠ€κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. Block ν΄λž˜μŠ€λŠ” 각 λΈ”
둝이 κ°€μ§€κ³  μžˆλŠ” 값을 κ΄€λ¦¬ν•œλ‹€.

2.4.2 class Board
κ²Œμž„ λ‚΄λΆ€ 둜직 κ΅¬ν˜„μ— μ‚¬μš©λ˜λŠ” Board ν΄λž˜μŠ€κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. Board ν΄λž˜μŠ€λŠ” Block
λ“€λ‘œ 이루어져 μžˆλŠ” κ²Œμž„νŒμ„ κ΄€λ¦¬ν•˜λ©°, κ²Œμž„νŒμ΄ μ΄λ™ν•˜λŠ” 둜직 λ˜ν•œ 이 ν΄λž˜μŠ€μ— κ΅¬ν˜„λ˜μ–΄ 있 μ–΄μ•Ό ν•œλ‹€.

2.4.3 class Game
κ²Œμž„μ„ μ „λ°˜μ μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” Game ν΄λž˜μŠ€κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. κ²Œμž„μ— μ‚¬μš©λ˜λŠ” Board 클
래슀λ₯Ό 멀버 λ³€μˆ˜λ‘œ κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•˜λ©°, κ²Œμž„μ˜ μ’…λ£Œ μ—¬λΆ€λ₯Ό νŒλ‹¨ν•˜λŠ” λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€.

2.4.4 class BlockUi
Block을 GUI 상에 λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ BlockUi ν΄λž˜μŠ€κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. BlockUiλŠ” QLabel 클 래슀λ₯Ό 상속받도둝 ν•˜μ—¬ κ΅¬ν˜„ν•œλ‹€.

2.4.5 class GameUi
전체 λ ˆμ΄μ•„μ›ƒμ„ κ΄€λ¦¬ν•˜λŠ” GameUi ν΄λž˜μŠ€κ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€. QWidget을 상속받도둝 ν•˜
μ—¬ κ΅¬ν˜„ν•œλ‹€.

2.5 κ²Œμž„ μ§„ν–‰ 상황 μ €μž₯ μ±„μ μ˜ νŽΈμ˜μ„±μ„ μœ„ν•΄ κ²Œμž„μ΄ μ§„ν–‰λ˜λŠ” 상황을 β€œprogress.txt” νŒŒμΌμ— μ €μž₯ν•˜λ„λ‘ ν•œλ‹€.

1. κ²Œμž„ μ‹œμž‘ μ‹œ 블둝이 μƒμ„±λ˜λŠ” μœ„μΉ˜ x1ν–‰ y1μ—΄, x2ν–‰ y2μ—΄: INITIAL x1 y1 x2 y2
A. 1ν–‰ 1μ—΄κ³Ό 3ν–‰ 2열에 μƒμ„±λ˜μ—ˆμ„ 경우 βž” INITIAL 1 1 3 2

2. μœ„μͺ½/μ•„λž˜μͺ½/였λ₯Έμͺ½/μ™Όμͺ½μ„ λˆ„λ₯Ό 경우: UP/DOWN/RIGHT/LEFT

3. 이동 ν›„ n 블둝이 μƒμ„±λ˜λŠ” μœ„μΉ˜ xν–‰ yμ—΄: GENERATE x y n A. 이동 ν›„ 4 블둝이 2ν–‰ 1열에 μƒμ„±λ˜μ—ˆμ„ 경우 βž” GENERATE 2 1 4

4. xν–‰ yμ—΄μ—μ„œ n λΈ”λ‘μœΌλ‘œμ˜ 병합이 λ°œμƒν•  경우: MERGE x y n A. 2개의 4 블둝이 2ν–‰ 2μ—΄μ—μ„œ 8 λΈ”λ‘μœΌλ‘œ ν•©μ³μ§ˆ 경우 βž” MERGE 2 2 8

5. 되돌리기 λ²„νŠΌμ„ λˆ„λ₯΄κ³  κΈ°νšŒκ°€ n번 남을 경우: RESTORE n A. κΈ°νšŒκ°€ 2번 남은 μƒνƒœμ—μ„œ 되돌리기λ₯Ό λˆ„λ₯Ό 경우 βž” RESTORE 1

6. 이동 ν›„ 점수: SCORE n
A. 이동 후에 μ μˆ˜κ°€ 72점일 경우: SCORE 72

μ˜ˆμ‹œ) μ’Œμƒλ‹¨->μš°μƒλ‹¨->μ’Œν•˜λ‹¨->μš°ν•˜λ‹¨ μˆœμ„œλ‘œ μ›€μ§μž„

INITIAL 2 4 3 1
LEFT
GENERATE 1 1 2
SCORE 0
DOWN
MERGE 4 1 4
GENERATE 3 2 2
SCORE 4
LEFT
MERGE 3 1 4
GENERATE 2 3 2
SCORE 8
처음 블둝이 μƒμ„±λ˜λŠ” 것을 기둝할 λ•ŒλŠ” μˆ«μžκ°€ μž‘μ€ ν–‰μ—μ„œ μƒμ„±λœ μœ„μΉ˜λ₯Ό μš°μ„ μ μœΌλ‘œ κΈ°λ‘ν•˜
κ³ , 행이 같을 경우 μˆ«μžκ°€ μž‘μ€ μ—΄μ—μ„œ μƒμ„±λœ μœ„μΉ˜λ₯Ό μš°μ„ μ μœΌλ‘œ κΈ°λ‘ν•œλ‹€. 예λ₯Ό λ“€μ–΄, κ·Έλ¦Όκ³Ό 같이 3ν–‰ 1μ—΄κ³Ό 2ν–‰ 4μ—΄μ—μ„œ 첫 블둝듀이 μƒμ„±λ˜μ—ˆμ„ 경우 2ν–‰ 4열이 ν–‰μ˜ μˆ«μžκ°€ μž‘μœΌλ―€λ‘œ
INITIAL 2 4 3 1둜 κΈ°λ‘ν•œλ‹€.

병합이 μ—¬λŸ¬ 번 λ°œμƒν•˜μ˜€μ„ 경우 μˆ«μžκ°€ μž‘μ€ ν–‰μ—μ„œ λ°œμƒν•œ 병합을 μš°μ„ μ μœΌλ‘œ κΈ°λ‘ν•˜κ³ , ν–‰ 이 같을 경우 μˆ«μžκ°€ μž‘μ€ μ—΄μ—μ„œ λ°œμƒν•œ 병합을 μš°μ„ μ μœΌλ‘œ κΈ°λ‘ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 2ν–‰ 3μ—΄μ—μ„œ 병합이 λ°œμƒν•˜κ³  2ν–‰ 2μ—΄μ—μ„œ 병합이 λ°œμƒν–ˆμ„ 경우
MERGE 2 2 n MERGE 2 3 n’
의 μˆœμ„œλ‘œ κΈ°λ‘λœλ‹€.

ν•˜λ‚˜μ˜ 이동에 λŒ€ν•œ 기둝 μˆœμ„œλŠ” 이동 -> 병합 -> 생성 -> 점수둜 μ •ν•œλ‹€. 예λ₯Ό λ“€μ–΄ μ™Όμͺ½μœΌλ‘œ
이동할 경우
LEFT
MERGE … (λ°œμƒν•œ 병합 μˆœμ„œλŒ€λ‘œ μ­‰ 기둝)
GENERATE … (이동 ν›„ μƒμ„±λœ μœ„μΉ˜ 기둝)
SCORE … (점수 기둝)

λ°©ν–₯ν‚€λ₯Ό μž…λ ₯ν•˜μ˜€μ§€λ§Œ ν•΄λ‹Ή λ°©ν–₯으둜의 이동이 λΆˆκ°€λŠ₯ ν–ˆμ„ κ²½μš°μ—λŠ” λ°©ν–₯만 κΈ°λ‘ν•œλ‹€. 예λ₯Ό
λ“€μ–΄ μ™Όμͺ½κ³Ό 였λ₯Έμͺ½μ„ μˆœμ„œλŒ€λ‘œ λˆŒλ €λŠ”λ° μ™Όμͺ½μœΌλ‘œμ˜ 이동이 λΆˆκ°€λŠ₯ν•œ μƒν™©μ΄μ—ˆλ‹€κ³  ν•΄λ³΄μž. κ·Έ 럴 λ•ŒλŠ”
LEFT
RIGHT MERGE …
GENERATE…
SCORE …
둜 κΈ°λ‘ν•˜λ©΄ λœλ‹€.
점수의 λ³€ν™”κ°€ λ°œμƒν•˜μ§€ μ•Šμ•„λ„ 이동 ν›„μ—λŠ” 점수λ₯Ό 기둝해야 ν•œλ‹€. 점수λ₯Ό κΈ°λ‘ν•˜μ§€ μ•Šμ•„λ„ λ˜λŠ” 상황은 ν•΄λ‹Ή λ°©ν–₯으둜의 이동이 λΆˆκ°€λŠ₯ν•œ κ²½μš°λ°–μ—λŠ” μ—†λ‹€.
LEFT
GENERATE …
SCORE n
RIGHT
GENERATE …
SCORE n (MERGEκ°€ λ°œμƒν•˜μ§€ μ•Šμ•„μ„œ 점수 λ³€ν™”κ°€ 없어도 기둝해야 함)
RIGHT (이동이 λΆˆκ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— 점수 기둝 X)
UP MERGE …
GENERATE …
SCORE n’

————————————–05/27 13μ‹œ 55λΆ„ λ‚΄μš© μΆ”κ°€ ————————————–
Qt Creatorλ₯Ό ν¬ν•¨ν•œ λŒ€λ‹€μˆ˜μ˜ IDEλŠ” ν”„λ‘œκ·Έλž¨ λΉŒλ“œλ₯Ό μ†ŒμŠ€ μ½”λ“œκ°€ μœ„μΉ˜ν•œ 폴더가 μ•„λ‹Œ λ‹€λ₯Έ 폴 λ”μ—μ„œ μ§„ν–‰ν•œλ‹€.
YOUR_PROJECTλΌλŠ” ν”„λ‘œμ νŠΈλ₯Ό λ§Œλ“€κ³  ν”„λ‘œκ·Έλž¨μ„ λΉŒλ“œν•˜λŠ” 경우λ₯Ό Qt Creatorμ—μ„œ μ‚΄νŽ΄λ³΄μž.

root
β”” YOUR_PROJECT
β”” build-YOUR_PROJECT-Desktop_Qt_6_5_0_MinGW_64_bit-Debug
β”” debug

μœ„μ™€ 같은 폴더 ꡬ쑰가 λ§Œλ“€μ–΄μ§€κ³  debug 폴더 내에 파일 μž…μΆœλ ₯이 μ§„ν–‰λœλ‹€. λ”°λΌμ„œ, μ œμΆœμ„ μ§„ν–‰ν•  λ•Œ build-… 폴더도 같이 μ••μΆ•ν•˜μ—¬ μ œμΆœν•˜λ„λ‘ ν•œλ‹€.

TIPS

1. Qt 곡식 λ¬Έμ„œ (https://doc.qt.io/)에 라이브러리 μ‚¬μš©λ²•μ— λŒ€ν•œ 정리가 잘 λ˜μ–΄ μžˆμœΌλ―€λ‘œ ν•΄λ‹Ή μ‚¬μ΄νŠΈλ₯Ό 톡해 정보λ₯Ό μ–»λŠ” 것을 μΆ”μ²œν•œλ‹€.

2. 파일 μΆ”κ°€λ‚˜ 파일 μ‚­μ œλ₯Ό ν•˜κ³  컴파일 μ—λŸ¬λ₯Ό κ²ͺλŠ”λ‹€λ©΄ Clean & Buildλ₯Ό ν•΄λ³΄μž. Clean을 ν•¨μœΌλ‘œμ¨ 이전에 ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ”©ν•  λ•Œ μƒμ„±λ˜μ—ˆλ˜ object νŒŒμΌμ΄λ‚˜ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌλ“€μ„ μ‚­μ œν•  수 μžˆλ‹€. Clean을 ν•˜κ³  Buildλ₯Ό ν•˜κ²Œ 되면 cleanν•œ μƒνƒœμ—μ„œ ν”„λ‘œμ νŠΈλ₯Ό λ‹€μ‹œ 빌 λ“œν•˜κ²Œ λ˜λ―€λ‘œ λ³€κ²½λœ μƒνƒœλ‘œλΆ€ν„° μƒˆλ‘œμ΄ ν”„λ‘œμ νŠΈλ₯Ό λΉŒλ“œν•  수 있게 λœλ‹€.

3. .pro νŒŒμΌμ€ Qt build system인 qmake에 μ‚¬μš©λ˜λŠ” νŒŒμΌμ΄λ‹€. ν”„λ‘œμ νŠΈλ₯Ό μ œλŒ€λ‘œ λΉŒλ“œν•˜ κΈ° μœ„ν•΄μ„œλŠ” .pro νŒŒμΌμ— 본인이 μ‚¬μš©ν•˜λŠ” .cpp νŒŒμΌλ“€κ³Ό .h νŒŒμΌλ“€μ„ λͺ…μ‹œν•΄μ•Ό ν•œλ‹€. 예 λ₯Ό λ“€μ–΄, 본인이 game/mycode.cpp와 game/mycode.hλ₯Ό μΆ”κ°€ν–ˆλ‹€λ©΄ .pro 파일의 SOURCES와 HEADERS에 μΆ”κ°€λœ νŒŒμΌλ“€μ„ μ μ–΄μ€˜μ•Ό 컴파일이 μ§„ν–‰λœλ‹€.

4. λ ˆμ΄μ•„μ›ƒμ— λ²„νŠΌμ„ μΆ”κ°€ν•˜κ³  ν‚€λ³΄λ“œ λ°©ν–₯ν‚€λ₯Ό λˆ„λ₯΄λ©΄ κ²Œμž„νŒμ˜ 블둝듀이 움직이지 μ•Šμ„ 수 μžˆλ‹€. μ΄λŠ” λ²„νŠΌμ„ μΆ”κ°€ν–ˆμ„ λ•Œ ν‚€λ³΄λ“œμ˜ focusκ°€ λ²„νŠΌ μͺ½μœΌλ‘œ μ„€μ •λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. 이 λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” QWidget 클래슀의 focus policy κ΄€λ ¨ λ¬Έμ„œλ₯Ό μ½μ–΄λ³΄λŠ” 것을 μΆ”μ²œ ν•œλ‹€.

Reviews

There are no reviews yet.

Be the first to review “CSED232 – Assignment #5 (Solution)”

Your email address will not be published. Required fields are marked *