ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π˜Π³Ρ€Π° Β«LinesΒ»

ΠšΡƒΡ€ΡΠΎΠ²Π°ΡΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

SetTimer — функция присоСдинСния стандартного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Windows. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, hWnd, содСрТит дСскриптор ΠΎΠΊΠ½Π°, ассоциированного с Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, nIDEvent, позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число (Π½ΠΎ Π½Π΅ Π½ΡƒΠ»ΡŒ). Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, uElapse, Π·Π°Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… (тСорСтичСски) ΠΎΡ‚ 1 Π΄ΠΎ 4 294 967 295 мс, Ρ‡Ρ‚ΠΎ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π˜Π³Ρ€Π° Β«LinesΒ» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

1. Анализ задания ΠΈ ΠΏΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

Π’ Π½Π°ΡˆΠ΅ΠΌ случаС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡ‚ΡŒΡŽ являСтся ΠΌΠΈΠ½ΠΈ-ΠΈΠ³Ρ€Π° «LINES». Π˜Π³Ρ€Π° сущСствуСт ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ, поэтому Π½ΠΈΡ‡Π΅Π³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Π½Π°ΠΌ Π½Π΅ ΠΏΡ€ΠΈΠ΄Ρ‘тся, Π½ΡƒΠΆΠ½ΠΎ лишь Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ³Ρ€Ρ‹ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ просты. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ — 9×9 ячССк Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»Π΅ΠΆΠ°Ρ‚ ΡˆΠ°Ρ€ΠΈΠΊΠΈ. НСобходимо ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Π² Π»ΠΈΠ½ΠΈΠΈ ΠΈΠ· 5 ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΈΠ»ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ. Π’ Π½Π°Ρ‡Π°Π»Π΅ ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² ΠΌΠ°Π»ΠΎ, Π½ΠΎ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ ΠΈΡ… ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ увСличиваСтся.

Бмысл ΠΈΠ³Ρ€Ρ‹ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большС ΠΎΡ‡ΠΊΠΎΠ², ΠΈΠ· ΠΎΠ΄Π½ΠΎΡ†Π²Π΅Ρ‚Π½Ρ‹Ρ… ΡˆΠ°Ρ€ΠΎΠ² Ρ„ΠΈΠ³ΡƒΡ€Ρ‹.

Π¨Π°Ρ€Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΠΏΠΎ ΠΏΠΎΠ»ΡŽ ΠΌΡ‹ΡˆΡŒΡŽ: cΠ½Π°Ρ‡Π°Π»Π° выбираСтся ΡˆΠ°Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°Π΄ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ, Π·Π°Ρ‚Π΅ΠΌ — ΠΏΡƒΡΡ‚ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π΅Π³ΠΎ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ. Если вмСсто пустой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ Π·Π°Π½ΡΡ‚ΡƒΡŽ, Ρ‚ΠΎ ΡˆΠ°Ρ€ стоящий Π½Π° Π½Π΅ΠΉ станСт Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ.

Π¨Π°Ρ€ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° ΠΊΡƒΠ΄Π° Π²Ρ‹ Π±Ρ‹ Π΅Π³ΠΎ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пСрСмСщСния ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Ρ‰Ρ‘ Ρ‚Ρ€ΠΈ ΡˆΠ°Ρ€Π°.

Π˜Π³Ρ€Π° Π½Π΅ Π±Ρ‹Π»Π° Π±Ρ‹ достаточно интСрСсной, Π½Π΅ Π±ΡƒΠ΄ΡŒ Π² Π½Π΅ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ подсчёт ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ сопровоТдСния ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ сохранСния с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π°Ρ‚ΡŒ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΎΡ‡ΠΊΠΎΠ² ΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ вынСсСн Π½Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ строку состояния, которая Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Π²Π²Π΅Ρ€Ρ…Ρƒ ΠΎΠΊΠ½Π°.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ Π² Π½Π°ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ:

1. Π˜Π³Ρ€ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ 9*9 со ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ чисСл.

2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡˆΠ°Ρ€ΠΎΠ² ΠΏΠΎ ΠΏΠΎΠ»ΡŽ.

3. Π£Π½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡˆΠ°Ρ€ΠΎΠ².

4. Анимация.

5. Π—Π²ΡƒΠΊΠΎΠ²ΠΎΠ΅ сопровоТдСниС.

6. ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

7. Π—Π°ΠΏΠΈΡΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния Π² Ρ„Π°ΠΉΠ».

8. Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° сохранСнной ΠΈΠ³Ρ€Ρ‹ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

2. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

Π’ Π΄Π°Π½Π½ΠΎΠΉ части ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записки хочСтся Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°Ρ… ΠΈ Ρ„ункциях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

1) MyRegisterClass — функция рСгистрации класса ΠΎΠΊΠ½Π°. ЯвляСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ Π½Π΅ΠΉ ΠΌΡ‹ Π·Π°Π΄Π°Ρ‘ΠΌ стили, ΠΈΠΊΠΎΠ½ΠΊΠΈ, ΡΡ‚ΠΈΠ»ΡŒ курсора, Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅… Π’ Π½Π°ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ оформлСнная эта функция выглядит Ρ‚Π°ΠΊ:

ATOM MyRegisterClass (HINSTANCE hInstance)

WNDCLASSEX wcex;

wcex.cbSize = sizeof (WNDCLASSEX);

wcex.style = CS_HREDRAW

2) CreateWindow — функция создания ΠΎΠΊΠ½Π°. Π’ Π½Π΅ΠΉ ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΠΊΠ½Π°, Π΅Π³ΠΎ стили, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ Π΄Ρ€. Π‘Π΅Π· использования этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ эта функция выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

hWnd = CreateWindow (szWindowClass, szTitle, WS_CAPTION | WS_POPUPWINDOW | WS_OVERLAPPED, 512, 240, 305, 368, NULL, NULL, hInstance, NULL);

Π³Π΄Π΅ hWnd — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π΅ΡΠΊΡ€ΠΈΠΏΡ‚ΠΎΡ€ создаваСмого Π½Π°ΠΌΠΈ ΠΎΠΊΠ½Π°.

Π•Ρ‰Ρ‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΊΠ½Π°:

ShowWindow — функция, которая Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ‹Ρ… Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Π»ΠΈΠ±ΠΎ скрываСт ΠΎΠΊΠ½ΠΎ.

UpdateWindow — функция обновлСния ΠΎΠΊΠ½Π°.

3) PlaySound (MY_SOUND1, NULL, SND_FILENAME | SND_ASYNC) — функция для воспроизвСдСния Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ WAVE.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°Π΄Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ имя Ρ„Π°ΠΉΠ»Π° Π½Π° Π΄ΠΈΡΠΊΠ΅, Π»ΠΈΠ±ΠΎ строку ΠΈΠΌΠ΅Π½ΠΈ Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ рСсурса. Если ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ PlaySound ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π²Π΅Π½ NULL, это Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅ воспроизвСдСния любого «ΠΈΠ³Ρ€Π°Π΅ΠΌΠΎΠ³ΠΎ» Ρ„Π°ΠΉΠ»Π°. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ воспроизвСдСнии Π·Π²ΡƒΠΊΠ° ΠΈΠ· Π·Π²ΡƒΠΊΠΎΠ²ΠΎΠ³ΠΎ рСсурса. Если ΠΆΠ΅ функция Π²Ρ‹Π·Π²Π°Π½Π° для воспроизвСдСния Π·Π²ΡƒΠΊΠ° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Ρ‚ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ устанавливаСтся Π² NULL. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ управляСт Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ ΠΈ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π·Π²ΡƒΠΊΠ°.

4) SetTimer — функция присоСдинСния стандартного Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Windows. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, hWnd, содСрТит дСскриптор ΠΎΠΊΠ½Π°, ассоциированного с Π΄Π°Π½Π½Ρ‹ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, nIDEvent, позволяСт ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅ число (Π½ΠΎ Π½Π΅ Π½ΡƒΠ»ΡŒ). Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, uElapse, Π·Π°Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… (тСорСтичСски) ΠΎΡ‚ 1 Π΄ΠΎ 4 294 967 295 мс, Ρ‡Ρ‚ΠΎ составляСт ΠΎΠΊΠΎΠ»ΠΎ 50 Π΄Π½Π΅ΠΉ. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ опрСдСляСт Ρ‚Π΅ΠΌΠΏ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Windows Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ сообщСния WM_TIMER. БообщСния WM_TIMER Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ ΠΎΠΊΠΎΠ½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ для ΠΎΠΊΠ½Π° hWnd, Ссли ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ IpTimeProc Ρ€Π°Π²Π΅Π½ NULL, Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° с Π°Π΄Ρ€Π΅ΡΠΎΠΌ IpTimeProc — Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

5) ImageList_Add — функция добавлСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΡΠΏΠΈΡΠΎΠΊ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: хэндл списка ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ прСдставляСт собой хэндл добавляСмого Π² ΡΠΏΠΈΡΠΎΠΊ изобраТСния. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — хэндл ΠΌΠΎΠ½ΠΎΡ…Ρ€ΠΎΠΌΠ½ΠΎΠ³ΠΎ bitmap’a, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит маски.

ImageList_Draw — функция прорисовки изобраТСния хранящСгося Π² ΡΠΏΠΈΡΠΊΠ΅. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ хэндл списка ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π²Ρ‚ΠΎΡ€ΠΎΠΉ — индСкс изобраТСния, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ — хэндл контСкста, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚Ρ‹ΠΉ ΠΈ ΠΏΡΡ‚Ρ‹ΠΉ — ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π² ΡΡ‚ΠΎΠΌ контСкстС, начиная с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ скопировано ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΡˆΠ΅ΡΡ‚ΠΎΠΉ — ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ„Π»Π°Π³ΠΈ прорисовки.

6) GetObject — функция ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ дСскриптор графичСского ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ адрСс Π±ΡƒΡ„Π΅Ρ€Π° для ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Ѐункция являСтся ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ, поэтому Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ hgdiobj ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ дСскриптор ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€ΠΎ, ΠΊΠΈΡΡ‚ΡŒ, ΡˆΡ€ΠΈΡ„Ρ‚, ΠΏΠ°Π»ΠΈΡ‚Ρ€Π° ΠΈΠ»ΠΈ растр Ρ‚ΠΈΠΏΠ° Н BITMAP.

7) BitBlt — Ѐункция BitBlt ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ Π±Π»ΠΎΠΊ пиксСлов с ΠΏΠΎΠ²Π΅Ρ€Ρ…ности устройства-источника hdcSrc Π½Π° ΠΏΠΎΠ²Π΅Ρ€Ρ…Π½ΠΎΡΡ‚ΡŒ устройства-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° hdcDest. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ nXSrc, nYSrc, nWidth, nHeight Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ контСкста устройства-источника. ΠŸΡ€ΠΈΠ΅ΠΌΠ½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ опрСдСляСтся ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ nXDest, nYDest, nWidth, nHeight Π² Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΠΎΠΉ систСмС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ контСкста устройства-ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. Оба контСкста устройства Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ растровыС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ RC_BITBLT.

8) DestroyWindow — функция Ρ€Π°Π·Ρ€ΡƒΡˆΠ΅Π½ΠΈΡ ΠΎΠΊΠ½Π°. ВызываСтся Π½Π°ΠΌΠΈ СдинствССный Ρ€Π°Π· ΠΏΡ€ΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π° мСню «Π’Ρ‹Ρ…ΠΎΠ΄». ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŽ Ρ€Π°Π·Ρ€ΡƒΡˆΠ°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ, дСскриптор ΠΊΠΎΡ‚ΠΎΡ€Π³ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π΅ΠΉ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅.

9) rand () — функция для Ρ€Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ³ΠΎ (случайного) заполнСния. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для случайного заполнСния поля Ρ„ΠΈΡˆΠΊΠ°ΠΌΠΈ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ это Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½ΠΎΠ²ΠΎΠ΅, Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ:

srand ((unsigned) time (NULL));

10) DrawImage — функция рисования изобраТСния. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для рисования Π½Π°ΡˆΠΈΡ… ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΡˆΠ΅ΠΊ.

11):CreateFile — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΈ / ΠΈΠ»ΠΈ открытия Ρ„Π°ΠΉΠ»Π°. Π€Π°ΠΉΠ» Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ для Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π΅ΠΊΠΎΡ€Π΄ΠΎΠ².

:ReadFile — функция чтСния Ρ„Π°ΠΉΠ»Π°.

3. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

3.1 ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π»Π° Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΉ Π²ΠΈΠ΄, Π½Π°ΠΌ нСдостаточно ΠΎΠ΄Π½ΠΈΡ… стандартных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Нам потрСбуСтся Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои собствСнныС.

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ³Ρ€Ρ‹ использовались ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: void Paint (HDC hdc, HDC hdcMem);

Ѐункция Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° ΡΠΊΡ€Π°Π½ всСй Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ. POINT * len (int StartX, int StartY, int &length);

Ѐункция подсчёта ΡˆΠ°Ρ€ΠΎΠ² Π² ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ поиск ряда ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π·Π°Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ StartX ΠΈ StartY. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ возвращаСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ length. void EndPathfinder (void);

Ѐункция очистки динамичСского массива, содСрТащСго ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΠΈ для ΡˆΠ°Ρ€ΠΈΠΊΠ°. int FindPath (int startX, int startY, int targetX, int targetY).

Ѐункция поиска ΠΏΡƒΡ‚ΠΈ ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ A-star. Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΡƒΠ·Π»Ρ‹, смСТныС с Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ; выбираСтся Ρ‚ΠΎΡ‚ ΠΈΠ· Π½ΠΈΡ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ f (x), послС Ρ‡Π΅Π³ΠΎ этот ΡƒΠ·Π΅Π» раскрываСтся. На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΠ΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ с ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ ΠΏΡƒΡ‚Π΅ΠΉ ΠΈΠ· Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ Π²ΡΠ΅Ρ… Π΅Ρ‰Ρ‘ Π½Π΅ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… (листовых) Π²Π΅Ρ€ΡˆΠΈΠ½ Π³Ρ€Π°Ρ„Π° («ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎΠΌ частных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ»), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ размСщаСтся Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ с ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠΌ. ΠŸΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ опрСдСляСтся ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ f (x) = g (x) + h (x). Алгоритм ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ f (x) Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ся мСньшим, Ρ‡Π΅ΠΌ любоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ (Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΊΠ° всё Π΄Π΅Ρ€Π΅Π²ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ просмотрСно). Из ΠΌΠ½ΠΎΠΆΠ΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ выбираСтся Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΉ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΡŽ.

void dest_len (POINT * PatchDestroy);

Ѐункция очистки массива ΠΈΠ· ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Ρ‚ΠΎΡ‡Π΅ΠΊ ΡˆΠ°Ρ€ΠΎΠ² располоТСнных Π² ΠΎΠ΄Π½ΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ.

void create_bubbles (HWND hWnd);

Ѐункция добавлСния ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ². ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΠ΅Ρ‚ случайноС Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π΅Π½ΠΈΠ΅ поля ΡˆΠ°Ρ€ΠΈΠΊΠ°ΠΌΠΈ, Ρ‚Π°ΠΊΠΆΠ΅ осуТСствляСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ ΠΈΠ³Ρ€Ρ‹ (ΠΈΠ³Ρ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ ΠΊΠΎΠ³Π΄Π° заполняСтся всё ΠΏΠΎΠ»Π΅). На ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ…ΠΎΠ΄Π΅ функция добавляСт Ρ‚Ρ€ΠΈ ΡˆΠ°Ρ€ΠΈΠΊΠ°, Π² ΡΠ»ΡƒΡ‡Π°Π΅ попадания ΡˆΠ°Ρ€ΠΈΠΊΠ° Π² Π·Π°Π½ΡΡ‚ΡƒΡŽ ячСйку осущСствляСтся поиск свободной.

3.2 Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…

Π”Π°Π½Π½Ρ‹Π΅ хранятся Π² ΡΡ‚атичСском массивС Ρ‚ΠΈΠΏΠ° int Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ 9×9. МладшСС слово ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния Π½ΠΎΠΌΠ΅Ρ€Π° ΡˆΠ°Ρ€ΠΈΠΊΠ°, Π° ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ Π°ΠΊΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΈ, уничтоТСния, ΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡˆΠ°Ρ€ΠΈΠΊΠ°).

ΠŸΡ€ΠΈ сохранСнии ΠΈΠ³Ρ€Ρ‹ осущСствляСтся запись содСрТимого массива хранящСго порядковый Π½ΠΎΠΌΠ΅Ρ€, ΠΈ ΡΠΎΡΡ‚ояниС ΡˆΠ°Ρ€ΠΈΠΊΠ°. Π—Π°Ρ‚Π΅ΠΌ Π΄ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΡ‡ΠΊΠΈ Π½Π°Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΠΈΠ³Ρ€ΠΎΠΊΠΎΠΌ ΠΈ Π²Ρ€Π΅ΠΌΡ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Π² ΠΈΠ³Ρ€Π΅. ΠŸΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ производятся ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ дСйствия.

3.3 ВоспроизвСдСниС Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ

Для воспроизвСдСния Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный Ρ‚Π°ΠΉΠΌΠ΅Ρ€ Windows, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡Π΅Ρ€Π΅Π· Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ посылаСт сообщСниС WM_TIMER ΠΈ Ρ‡Π΅Ρ€Π΅Π· этот ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ осущСствляСтся Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ bitmap’Π° ΠΈΠ· Image_List ΠΈ Ρ‚Π°ΠΊ повторятся цикличСски. Π’ ΠΌΠΎΡ‘ΠΌ случаС ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ срабатывания Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π° Ρ€Π°Π²Π΅Π½ 100ms.

3.4 ΠŸΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π² ΠΈΠ³Ρ€Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

Для подсчёта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция GetTickCount (), которая возвращаСтся количСство миллисСкунд с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуска систСмы. Для расчёта Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈ создании ΠΎΠΊΠ½Π° записываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ T1 врСмя запуска ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€ΠΎΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ врСмя Π² ΠΈΠ³Ρ€Π΅ рассчитываСтся ΠΊΠ°ΠΊ T1-T2, Π³Π΄Π΅ T2 Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ количСство миллисСкунд с ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° запуска систСмы.

3.5 НачислСниС ΠΎΡ‡ΠΊΠΎΠ²

НачислСниС ΠΎΡ‡ΠΊΠΎΠ² производится Π·Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΉ ΡˆΠ°Ρ€ΠΈΠΊ ΠΏΠΎ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ листинг всСх ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ прСдставлСн Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ «Π›ΠΈΡΡ‚ΠΈΠ½Π³ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹».

4. РСализация ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

4.1 РСализация Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° ΠΈΠ³Ρ€Ρ‹

Рис. 1. «Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹»

4.2 РСализация пСрСмСщСния ΡˆΠ°Ρ€ΠΈΠΊΠΎΠ²

Π‘ΠΎΠ²Π΅Ρ€ΡˆΠΈΠΌ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ количСство Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ всС ΡˆΠ°Ρ€ΠΈΠΊΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ.

Рис. 2. «Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ пСрСмСщСния ΡˆΠ°Ρ€ΠΎΠ²»

4.3 РСализация Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ мСню «Π˜Π³Ρ€Π°» Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚ «ΠΠΎΠ²Π°Ρ ΠΈΠ³Ρ€Π°» ΠΈ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС:

Рис. 3 «ΠΠΎΠ²Π°Ρ ΠΈΠ³Ρ€Π°»

4.4 БоставлСниС ΡˆΠ°Ρ€ΠΎΠ² Π² Π»ΠΈΠ½ΠΈΡŽ

Рис. 4. РСализация уничтоТСния ΡˆΠ°Ρ€ΠΎΠ²

4.5 РСализация сохранСния ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ³Ρ€Ρ‹

Рис. 5. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°

4.6 РСализация мСню «Πž ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅»

Рис. 6 «ΠœΠ΅Π½ΡŽ — „О ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅“»

5. ΠœΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования

lines ΡˆΠ°Ρ€ΠΈΠΊ ΠΈΠ³Ρ€Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

ВСст 1. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ. Никаких ошибок Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚. ВСст ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

ВСст 2. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡˆΠ°Ρ€ΠΈΠΊΠ°

ΠŸΡ€ΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΡˆΠ°Ρ€ΠΈΠΊ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠ»ΠΈΠΊΠΎΠΌ Π½Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΡƒΡŽ ΠΊΠ»Π΅Ρ‚ΠΊΡƒ ΡˆΠ°Ρ€ΠΈΠΊ пСрСмСщаСтся ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ свободного ΠΏΡƒΡ‚ΠΈ. ВСст ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

ВСст 3. ΠŸΠΎΠΏΡ‹Ρ‚ΠΊΠ° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊ Π² Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ

ΠŸΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΡˆΠ°Ρ€ΠΈΠΊ Ρ‡Π΅Ρ€Π΅Π· Π½Π΅ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚. ВСст ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

ВСст 4. Новая ΠΈΠ³Ρ€Π°

ПослС запуска Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ³Ρ€Ρ‹ ΠΏΠΎΠ»Π΅ обновилось Ρ‚Π°ΠΉΠΌΠ΅Ρ€ ΠΈ ΠΎΡ‡ΠΊΠΈ Π°Π½Π½ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ ΠΈΠ³Ρ€Π°Ρ‚ΡŒ. ВСст ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

ВСст 5. Π’Ρ‹Ρ…ΠΎΠ΄

ПослС Π²Ρ‹Π±ΠΎΡ€Π° Π² ΠΌΠ΅Π½ΡŽ Π²Ρ‹Ρ…ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΡ€Π΅ΡΡ‚ΠΈΠΊ ΠΈΠ³Ρ€Π° закрываСтся. ВСст ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

ВСст 6. Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ

ПослС сохранСния ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ³Ρ€Ρ‹ информация Π½Π° Ρ‚Π°ΠΉΠΌΠ΅Ρ€Π΅ количСство ΠΎΡ‡ΠΊΠΎΠ², располоТСниС ΠΈ Ρ†Π²Π΅Ρ‚ ΡˆΠ°Ρ€ΠΎΠ² Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡŒ. ВСст ΠΏΡ€ΠΎΠΉΠ΄Π΅Π½.

ВСст 6. БоставлСниС Π² Ρ€ΡΠ΄ ΡˆΠ°Ρ€ΠΎΠ²

ПослС составлСния Π² Ρ€ΡΠ΄ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ ΠΈΠ»ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΠΈ пяти ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡˆΠ°Ρ€ΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° происходит ΠΈΡ… ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‡ΠΊΠΎΠ².

МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΡˆΠ»Π° тСстированиС. Π•Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ Π²Ρ‹Π·Π²Π°Π»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, всС дСйствия ΠΎΠ½Π° выполняла ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎ ΠΈ Π²Π΅Ρ€Π½ΠΎ.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Ρ‹Π»Π° Ρ€Π΅ΡˆΠ΅Π½Π° поставлСнная Π·Π°Π΄Π°Ρ‡Π°. Π—Π°Π΄Π°Ρ‡Π° прСдставляСт собой windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠΌΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠ³Ρ€Ρƒ «Lines». ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ-понятный интСрфСйс. Π’ Ρ…ΠΎΠ΄Π΅ тСстирования ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ сСбя ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΈ ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²Ρ‹ΠΌ ΠΊ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ дСйствиям ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния использовался язык высокого уровня C++. Π‘Ρ€Π΅Π΄ΠΎΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° срСда Microsoft Visual Studio 2008.

1. Win32 API Π©ΡƒΠΏΠ°ΠΊ

2. Win32API ΠžΡΠ½ΠΎΠ²Ρ‹ программирования

3. Π‘Π°ΠΉΠΌΠΎΠ½ Π . Windows 2000 API.1085 стр.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

Π€Π°ΠΉΠ» h

#pragma once

#include «resource.h»

#define FILE_PATH _T («data.dat»)

HBITMAP hBitmapNum0=(HBITMAP) LoadImage (NULL, _T («data //BKG.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum1=(HBITMAP) LoadImage (NULL, _T («data //BALLS1.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum2=(HBITMAP) LoadImage (NULL, _T («data //BALLS2.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum3=(HBITMAP) LoadImage (NULL, _T («data //BALLS3.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum4=(HBITMAP) LoadImage (NULL, _T («data //BALLS4.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum5=(HBITMAP) LoadImage (NULL, _T («data //BALLS5.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum6=(HBITMAP) LoadImage (NULL, _T («data //BALLS6.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum7=(HBITMAP) LoadImage (NULL, _T («data //BALLS7.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum8=(HBITMAP) LoadImage (NULL, _T («data //TIME.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum9=(HBITMAP) LoadImage (NULL, _T («data //NEXT.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum10=(HBITMAP) LoadImage (NULL, _T («data //DIGITS.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum11=(HBITMAP) LoadImage (NULL, _T («data //DIGTR.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum12=(HBITMAP) LoadImage (NULL, _T («data //TIMTR.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

HBITMAP hBitmapNum13=(HBITMAP) LoadImage (NULL, _T («data //NEXTTR.BMP»), IMAGE_BITMAP, 0,0, LR_LOADFROMFILE);

TCHAR MY_SOUND0 []=_T («data //move.wav»);

TCHAR MY_SOUND1 []=_T («data //destroy.wav»);

TCHAR MY_SOUND2 []=_T («data //fetus.wav»);

TCHAR MY_SOUND3 []=_T («data //cantmove.wav»);

typedef struct

{

BYTE hour, min, sec;

} TIME;

const int walkability_fetus=1 376 256;

const int zero=0×0000ffff;

const int mapWidth = 9, mapHeight = 9;

int onClosedList = 10;

const int notfinished = 0, notStarted = 0;

const int found = 1, nonexistent = 2;

const int walkable = 0;

int walkability [mapWidth] [mapHeight];

int openList [mapWidth*mapHeight+2];

int whichList [mapWidth+1] [mapHeight+1];

int openX [mapWidth*mapHeight+2];

int openY [mapWidth*mapHeight+2];

int parentX [mapWidth+1] [mapHeight+1];

int parentY [mapWidth+1] [mapHeight+1];

int Fcost [mapWidth+1] [mapHeight+1];

int pathLength;

POINT *pathBank;

static int path=0;

int xPath;

int yPath;

// ;

// РСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° A*(A-star)

// ;

int FindPath (int startX, int startY, int targetX, int targetY)

{

int onOpenList=0, parentXval=0, parentYval=0,

a=0, b=0, m=0, u=0, v=0, temp=0, numberOfOpenListItems=0,

path = 0, x=0, y=0,

tempx, pathX, pathY, cellPosition,

newOpenListItemID=0;

if (startX == targetX && startY == targetY)

return found;

numberOfOpenListItems = 1;

openList[1] = 1;

openX[1] = startX;

openY[1] = startY;

do

{

if (numberOfOpenListItems≠ 0)

{

whichList[parentXval] [parentYval] = onClosedList;

numberOfOpenListItems -;

openList[1] = openList [numberOfOpenListItems+1];

v = 1;

do

{

if (2*u+1 <= numberOfOpenListItems)

{

if (Fcost [openX[openList[u]]] [openY [openList[u]]]>=

Fcost [openX[openList [2*u]]] [openY [openList[2*u]]])

v = 2*u;

if (Fcost [openX[openList[v]]] [openY [openList[v]]]>=

Fcost [openX[openList [2*u+1]]] [openY [openList[2*u+1]]])

if (2*u <= numberOfOpenListItems)

if (u≠ v)

{

temp = openList[u];

openList[u] = openList[v];

openList[v] = temp

}

else

break;

}

for (a = parentXval-1; a <= parentXval+1; a++) {

for (b = parentYval-1+abs (parentXval-a); b <= parentYval+1-abs (parentXval-a); b++) {

if (a≠ -1 && b≠ -1 && a≠ mapWidth && b≠ mapHeight) {

if (whichList[a] [b]≠ onClosedList) {

if (walkability [a] [b] == walkable || HIWORD (walkability [a] [b])==HIWORD (walkability_fetus)) {

if (whichList[a] [b]≠ onOpenList)

{

newOpenListItemID++;

m = numberOfOpenListItems+1;

openList[m] = newOpenListItemID;

openX[newOpenListItemID] = a;

openY[newOpenListItemID] = b;

Fcost[a] [b] = 10*(abs (a — targetX) + abs (b — targetY));

parentX[a] [b] = parentXval;

parentY[a] [b] = parentYval;

while (m≠ 1)

{

if (Fcost [openX[openList[m]]] [openY [openList[m]]] <=

Fcost [openX[openList [m/2]]] [openY [openList[m/2]]])

{

temp = openList [m/2];

openList [m/2] = openList[m];

openList[m] = temp;

m = m/2;

}

else

break;

}

numberOfOpenListItems++;

whichList[a] [b] = onOpenList;

}

else

{

if (Fcost[parentXval] [parentYval] < Fcost[a] [b])

{

parentX[a] [b] = parentXval;

parentY[a] [b] = parentYval;

for (int x = 1; x <= numberOfOpenListItems; x++)

{

if (openX [openList[x]] == a && openY [openList[x]] == b)

{

m = x;

while (m≠ 1)

{

if (Fcost [openX[openList[m]]] [openY [openList[m]]] <

Fcost [openX[openList [m/2]]] [openY [openList[m/2]]])

{

temp = openList [m/2];

openList [m/2] = openList[m];

openList[m] = temp;

m = m/2;

}

else

break;

}

break;

}

else

{

path = nonexistent; break;

}

if (whichList[targetX] [targetY] == onOpenList)

{

path = found; break;

}

}

while (1);

if (path == found)

{

pathX = targetX; pathY = targetY;

do

{

tempx = parentX[pathX] [pathY];

pathY = parentY[pathX] [pathY];

pathX = tempx;

pathLength = pathLength + 1;

}

while (pathX≠ startX || pathY≠ startY);

pathBank = (POINT*) realloc (pathBank,

pathX = targetX; pathY = targetY;

cellPosition = pathLength;

do

pathY≠ startY);

return path;

noPath:

xPath = startX;

yPath = startY;

return nonexistent;

}

void EndPathfinder (void)

{

if (pathBank)

{

free (pathBank);

pathBank=NULL;

}

}

POINT * len (int StartX, int StartY, int &length)

{

int north=1, south=1, west=1, east=1, width=0, height=0;

POINT *PatchDestroy=NULL;

length=0;

north++;

while (StartY+south≠mapHeight && walkability[StartX] [StartY]==walkability[StartX] [StartY+south])

south++;

while (StartX-west≠-1 && walkability[StartX] [StartY]==walkability [StartX-west] [StartY])

west++;

while (StartX+east≠mapWidth && walkability[StartX] [StartY]==walkability [StartX+east] [StartY])

east++;

height=north+south-1;

width=west+east-1;

if (height>=5 && width>=5 && height>=width || height>=5)

{

length=height;

PatchDestroy=(POINT*) malloc (sizeof (POINT)*height);

StartY-=north-1;

for (int i=0; i

{

PatchDestroy[i]. x=StartX;

PatchDestroy[i].y=StartY+i;

}

}

else

if (width>=5)

{

length=width;

PatchDestroy=(POINT*) malloc (sizeof (POINT)*width);

StartX-=west-1;

for (int i=0; i

{

PatchDestroy[i]. x=StartX+i;

PatchDestroy[i].y=StartY;

}

}

return PatchDestroy;

}

void dest_len (POINT * PatchDestroy)

{

if (PatchDestroy)

{

free (PatchDestroy);

PatchDestroy=NULL;

}

}

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ