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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉΒ»

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉ» — чисто игровая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для удовлСтворСния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… потрСбностСй ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Она Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования ΠΌΡ‹ΡˆΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΊΠΎΡ€Π°Π±Π»ΠΈ ΠΈ «ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ» ΠΏΠΎ ΠΊΠΎΡ€Π°Π±Π»ΡΠΌ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. НиТС Π² Π²ΠΈΠ΄Π΅ схСм Насси-Π¨Π½Π΅ΠΉΠ΄Π΅Ρ€ΠΌΠ°Π½Π° прСдставлСны Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: Ѐункция Draw (Рис… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° «ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉ» — чисто игровая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для удовлСтворСния ΠΈΠ³Ρ€ΠΎΠ²Ρ‹Ρ… потрСбностСй ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Она Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования ΠΌΡ‹ΡˆΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с Π΅Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π½Π° ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ ΠΊΠΎΡ€Π°Π±Π»ΠΈ ΠΈ «ΡΡ‚Ρ€Π΅Π»ΡΡ‚ΡŒ» ΠΏΠΎ ΠΊΠΎΡ€Π°Π±Π»ΡΠΌ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ: Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ ΠΈΠ³Ρ€Ρƒ «ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉ» Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ — ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ основныС свойства ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования (Π² ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ порядкС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько классов (свойство инкапсуляции), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΈ, Ссли Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ свойства ООП).

ЦСль: Π”ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ‚Ρ€Π°Ρ‚ΠΎΠΉ рСсурсов.

ВозмоТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°ΡΠ»Π°Π΄ΠΈΡ‚ΡŒΡΡ ΠΈΠ³Ρ€ΠΎΠΉ «ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉ» Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ — ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€.

ОписаниС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎΠΉ области

ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½Π°Ρ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° — ΠΈΠ³Ρ€Π° «ΠœΠΎΡ€ΡΠΊΠΎΠΉ Π±ΠΎΠΉ». Она рСализуСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΠΈ ΠΌΡ‹ΡˆΠΈ (Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ ΠΈ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»Ρ‹ ΠΏΠΎ ΠΊΠΎΡ€Π°Π±Π»ΡΠΌ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°, ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ попадания Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΆΠ΅Π»Ρ‚Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ).

ΠŸΡ€Π°Π²ΠΈΠ»Π° ΠΈΠ³Ρ€Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅: Π² ΠΏΠΎΠ»Π΅ 10×10 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ расставляСт свои ΠΊΠΎΡ€Π°Π±Π»ΠΈ (ΠΊΠΎΡ€Π°Π±Π»ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π΅, ΡΡ‚ΠΎΡΡ‚ΡŒ рядом, ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°Ρ‚ΡŒΡΡ). Π’ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Π½Π° ΡΠ²ΠΎΠ΅ΠΌ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠΌ ΠΏΠΎΠ»Π΅ расставляСт свои ΠΊΠΎΡ€Π°Π±Π»ΠΈ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ 10, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: ΠΎΠ΄ΠΈΠ½ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹ΠΉ (ΠΎΠ΄Π½Π° ΠΏΠ°Π»ΡƒΠ±Π° соотвСтствуСт ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠ»Π΅Ρ‚ΠΊΠ΅ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля), Π΄Π²Π° Ρ‚Ρ€Π΅Ρ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹Ρ…, Ρ‚Ρ€ΠΈ Π΄Π²ΡƒΡ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹ΠΉ ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠ΄Π½ΠΎΠΏΠ°Π»ΡƒΠ±Π½Ρ‹Ρ…. ПослС расстановки ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ «ΡΡ‚Ρ€Π΅Π»ΡΡŽΡ‚» ΠΏΠΎ ΠΊΠ»Π΅Ρ‚ΠΊΠ°ΠΌ ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. Если ΠΊΠΎΠΌΡƒ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½ΠΈΡ… ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π²ΠΎ Π²Ρ€Π°ΠΆΠ΅ΡΠΊΠΈΠΉ ΠΊΠΎΡ€Π°Π±Π»ΡŒ, Ρ‚ΠΎ, согласно ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ…ΠΎΠ΄ Π½Π΅ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡƒ (Ссли ΠΈΠ³Ρ€ΠΎΠΊ ΠΏΠΎΠΏΠ°Π» Π² ΠΊΠΎΡ€Π°Π±Π»ΡŒ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°, Ρ‚ΠΎ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ выстрСла) Π΄ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΌΠ°Ρ…Π°. ПобСда достаСтся Ρ‚ΠΎΠΌΡƒ, ΠΊΡ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ всС ΠΊΠΎΡ€Π°Π±Π»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°. НиТС приводится Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Ρ†Π΅Π΄Π΅Π½Ρ‚ΠΎΠ², Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ дСйствий для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.

ОписаниС классов

Π‘ Ρ†Π΅Π»ΡŒΡŽ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ проСктирования, настройки, ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… исполняСмых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° построСна Π½Π° ΠΊΠ»Π°ΡΡΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ собой. ИспользованиС классов Π΄Π°Π΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ настройку ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ исходного ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π³Ρ€ΡƒΠΏΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ·-Π·Π° выполняСмых Π½ΠΈΠΌΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ стоит ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΊΠ»Π°ΡΡΡ‹. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π² ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ классы:

— Flot

— AI

— Referee

— HandersOfEvents

Класс Flot — класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠΎΡ€Π°Π±Π»ΡΡ… (количСство ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ, ΠΏΠΎΠ»Π΅ Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ слСдуСт Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π°Π±Π»ΠΈ ΠΈ Ρ‚. Π΄.);

Класс AI — Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ класс искусствСнного ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚Π°, Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ ΠΊΠΎΡ€Π°Π±Π»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°;

Класс Referee — наслСдник класса AI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСряСт состояниС ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ ΠΈ Ρ„Π»ΠΎΡ‚ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°;

Класс HandersOfEvents — наслСдник класса Referee. Π­Ρ‚ΠΎ СдинствСнный класс Π² Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ взаимодСйствуСт с Ρ„ΠΎΡ€ΠΌΠΎΠΉ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ структура Ship, которая содСрТит Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Π»ΡƒΠ± корабля, располоТСнии частСй корабля, слСдит Π·Π° ΡΠΎΡΡ‚ояниСм корабля Π² Ρ†Π΅Π»ΠΎΠΌ.

// класс Flot

class Flot

{

public:

int i, j, n; // ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² Ρ†ΠΈΠΊΠ»Π°Ρ…

bool destroy; // Ρ„Π»Π°Π³, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΉ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρ„Π»ΠΎΡ‚Π°

TImage *Im; // ΠΏΠΎΠ»Π΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ Ρ€ΠΈΡΡƒΠ΅ΠΌ

Ship ship[10]; // количСство ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ

Flot (TImage *I)

{

destroy = false;

Im = I;

n = 1;

for (i = 0; i < 10; i++)

{

if (i < 6) n = 2;

if (i < 3) n = 3;

if (i == 0) n = 4;

ship[i]. destroy = false;

ship[i]. col_deck = n;

ship[i]. decks = new bool[n];

ship[i].desp_of_part = new TPoint[n];

}

}

int GetStatus ();

};

// класс AI

class AI

{

public:

int Generation (Flot *CPU, int col_ship, int col_deck); // Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠ°

};

// класс Referee

class Referee: public AI

{

public:

int i, j, target_player, target_CPU;

bool net1 [10], net2 [10], game_over;

Flot *player, *CPU;

Referee ()

{

for (i = 0; i < 10; i++)

for (j = 0; j < 10; j++)

{

net1 [i] [j] = true;

net2 [i] [j] = true;

}

game_over = false;

target_player = 0;

target_CPU = 0;

}

int GoChecking (int x, int y, int n); // запуск Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ

int Check (bool net[10] [10], int x, int y); // ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° попадания Π² ΡΡ‚Π°Ρ€ΡƒΡŽ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡƒΡŽ ячСйку

int GoScaning (int x, int y, int n); // запуск Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сканирования

int Scan (Flot *fl, int x, int y); // сканированиС (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) попадания Π² ΠΊΠΎΡ€Π°Π±Π»ΡŒ

int Miss (int x, int y, int n); // ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ ячСйки Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΏΠ°Π»ΠΈ (Π½ΠΎ Π½Π΅ Π² ΠΊΠΎΡ€Π°Π±Π»ΡŒ)

int EndRaund (int n); // ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹

};

// класс HandlersOfEvents

class HandlersOfEvents: public Referee

{

public:

bool play;

int col_deck, col_ship, i, j, k;

HandlersOfEvents (TImage *Im1, TImage *Im2)

{

play = false;

col_deck = 4; col_ship = 1;

player = new Flot (Im1);

CPU = new Flot (Im2);

}

int Play (TImage *Im1, TImage *Im2);

int Move ();

int Desposition (int x, int y, TMouseButton Button); // Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ

int Draw (String key, int x, int y, int n); // рисованиС

int ShootPlayer (int x, int y, int n); // выстрСл ΠΈΠ³Ρ€ΠΎΠΊΠ°

int Shoot (int x, int y); // выстрСл ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°

};

// структура Ship

struct Ship

{

bool destroy; // Ρ„Π»Π°Π³ уничтоТСния корабля

int col_deck; // количСство ΠΏΠ°Π»ΡƒΠ±

bool *decks; // массив ΠΏΠ°Π»ΡƒΠ±

TPoint *desp_of_part; // располоТСниС частСй (ΠΏΠ°Π»ΡƒΠ±) корабля

};

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹

НиТС Π² Π²ΠΈΠ΄Π΅ схСм Насси-Π¨Π½Π΅ΠΉΠ΄Π΅Ρ€ΠΌΠ°Π½Π° прСдставлСны Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ: Ѐункция Draw (Рис. 3), Ѐункция ShootPlayer (x, y, n) (Рис. 4), Ѐункция Shoot (x, y, n) (Рис. 5). Ѐункция Disposition ΠΈΠ»ΠΈ Generation (Рис. 6)

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ key, x, y

Key = ΠΏΡ€ΠΎΠΌΠ°Ρ…

Π”Π° ΠΠ΅Ρ‚

ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΌΠ°Ρ… Π² ΡΡ‡Π΅ΠΉΠΊΠ΅ Ρ…, Ρƒ

ΠšΠ΅Ρƒ = ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅

Π”Π° ΠΠ΅Ρ‚

ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π² ΡΡ‡Π΅ΠΉΠΊΠ΅ Ρ…, Ρƒ ΠΏΠΎΠ΄Π±ΠΈΡ‚ΡƒΡŽ ΠΏΠ°Π»ΡƒΠ±Ρƒ

ΠšΠ΅Ρƒ = Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Π°Π±Π»ΡŒ

Π”Π° ΠΠ΅Ρ‚

Ρ– ΠΎΡ‚ 1 Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Π»ΡƒΠ±

По Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ

Π”Π° ΠΠ΅Ρ‚

Π ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π»ΡƒΠ±Ρƒ Π² ΡΡ‡Π΅ΠΉΠΊΠ΅ Ρ…, Ρƒ+Ρ–

Π ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π»ΡƒΠ±Ρƒ Π² ΡΡ‡Π΅ΠΉΠΊΠ΅ Ρ…+Ρ–, Ρƒ

Рис. 3 Ѐункция Draw

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΡƒΠ΄Π° ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅

Мимо

НСт Π”Π°

ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ слСд ΠΎΡ‚ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»Π°

Π’ Ρ†Π΅Π»ΡŒ

Π”Π° ΠΠ΅Ρ‚

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΠ΄Π° ΡƒΠΆΠ΅ стрСляли

ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Π±ΠΈΡ‚ΡƒΡŽ ΠΏΠ°Π»ΡƒΠ±Ρƒ

Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ Π² Ρ€Π°ΡΡΡ‚Ρ€Π΅Π»ΡΠ½Π½ΡƒΡŽ Ρ€Π°Π½Π΅Π΅ ячСйку

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚ΡƒΠ΄Π° ΡƒΠΆΠ΅ стркляли

Рис. 4 Ѐункция ShootPlayer (x, y, n)

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° выстрСла Π² ShootPlayer

Π² ShootPlayer ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅

Π”Π° ΠΠ΅Ρ‚

Π€Π»ΠΎΡ‚ CPU ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½

Π”Π° ΠΠ΅Ρ‚

бСсконСчно

ГСнСрация x, y, для CPU

ΠšΠΎΠ½Π΅Ρ† Ρ€Π°ΡƒΠ½Π΄Π°

Π’Ρ‹Ρ…ΠΎΠ΄

Π—Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выстрСла ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° Π² ShootCPU

Π’Ρ‹Ρ…ΠΎΠ΄

Π² ShootCPU ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠ΅

Π”Π° ΠΠ΅Ρ‚

Π€Π»ΠΎΡ‚ ΠΈΠ³Ρ€ΠΎΠΊΠ°

ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½

Π”Π° ΠΠ΅Ρ‚

ΠŸΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»

ΠšΠΎΠ½Π΅Ρ† Ρ€Π°ΡƒΠ½Π΄Π°

Π’Ρ‹Ρ…ΠΎΠ΄

Π’Ρ‹Ρ…ΠΎΠ΄

Рис. 5. Ѐункция Shoot (x, y, n)

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΏΠ°Π»ΡƒΠ± col_dec = 4

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ col_ship = 1

col_ship < = 10

k ΠΎΡ‚ 0 Π΄ΠΎ col_ship

i ΠΎΡ‚ 0 Π΄ΠΎ 10

j ΠΎΡ‚ 0 Π΄ΠΎ 10

j ΠΎΡ‚ 0 Π΄ΠΎ col_dec

ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ здСсь Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ данная ΠΏΠ°Π»ΡƒΠ±Π°?

Π”Π° ΠΠ΅Ρ‚

Π½ΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ корабля

col_ship = 1?

Π”Π° ΠΠ΅Ρ‚

col_dec = 3

col_ship = 3?

Π”Π° ΠΠ΅Ρ‚

col_dec = 2

col_ship = 6?

Π”Π° ΠΠ΅Ρ‚

col_dec = 1

col_ship = col_ship + 1

Рис. 6. Ѐункция Disposition ΠΈΠ»ΠΈ Generation

ВСстированиС

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½ΡƒΠΆΠ½ΠΎ провСсти тСстированиС. Π‘ΠΎΠΉ с ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠΌ продолТаСтся Π΄ΠΎ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΏΠΎΠ±Π΅Π΄Ρ‹, Ρ‚. Π΅. ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½Ρ‹ всС 10 ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠ².

Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ свои ΠΊΠΎΡ€Π°Π±Π»ΠΈ потСрял ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΈΠ³Ρ€ΠΎΠΊΡƒ выводится сообщСниС ΠΎ ΠΏΠΎΠ±Π΅Π΄Π΅

Рис. 7. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠ±Π΅Π΄Π΅

Если ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ свои ΠΊΠΎΡ€Π°Π±Π»ΠΈ потСрял ΠΈΠ³Ρ€ΠΎΠΊ, Π΅ΠΌΡƒ выводится сообщСниС ΠΎ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹ΡˆΠ΅

Рис. 8. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠΈΠ³Ρ€Ρ‹ΡˆΠ΅

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΈΠ³Ρ€Ρ‹ выводится ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Ρ€Π°ΡΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ΅ ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ:

Рис. 9. Расстановка ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ

Если ΠΈΠ³Ρ€ΠΎΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» нСдопустимоС дСйствиС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, попытался «Π½Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ» ΠΊΠΎΡ€Π°Π±Π»ΡŒ Π½Π° ΠΊΠΎΡ€Π°Π±Π»ΡŒ) Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰Π΅Π΅ сообщСниС ΠΎ Π΅Π³ΠΎ ошибкС.

Если расстановка ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΠ»Π°ΡΡŒ выводится ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ ΠΈΠ³Ρ€Ρ‹

Рис. 10. Начало ΠΈΠ³Ρ€Ρ‹

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΡ€ΠΎΠΌΠ°Ρ…Π° ΠΈΠ³Ρ€ΠΎΠΊΡƒ выводится сообщСниС ΠΎ ΠΏΡ€ΠΎΠΌΠ°Ρ…Π΅

Рис. 11. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΡ€ΠΎΠΌΠ°Ρ…Π΅

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ попадания ΠΈΠ³Ρ€ΠΎΠΊΡƒ выводится сообщСниС ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ

Рис. 12 Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΠΈ

Π’ ΡΠ»ΡƒΡ‡Π°Π΅ попадания Π² ΡΡ‡Π΅ΠΉΠΊΡƒ, которая ΡƒΠΆΠ΅ обстрСляна, ΠΈΠ³Ρ€ΠΎΠΊΡƒ выводится сообщСниС с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ Ρ€Π°Π·

Рис. 13. Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Π²Ρ‹ΡΡ‚Ρ€Π΅Π»Π΅ Π² ΠΎΠ±ΡΡ‚Ρ€Π΅Π»ΡΠ½Π½ΡƒΡŽ ячСйку

Анализ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹ знания ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ классов ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ основ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования.

ΠšΠΎΠ½Π΅Ρ† ΠΈΠ³Ρ€Ρ‹ прСдусмотрСн Π² Π΄Π²ΡƒΡ… случаях: ΠΏΠΎΠ±Π΅Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ±Π΅Π΄Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Π’Π°ΠΊΠΆΠ΅ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±Ρ‹Π»ΠΈ рассмотрСны всС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π½Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π»ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΊΠΎΡ€Π°Π±Π»ΠΈ Π² ΡΠΎΡΠ΅Π΄Π½ΠΈΡ… ΠΊΠ»Π΅Ρ‚ΠΊΠ°Ρ…, Π½Π΅ ΡΡ‚Π°Π²ΠΈΡ‚ Π»ΠΈ ΠΎΠ½ ΠΊΠΎΡ€Π°Π±Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡƒΠ³Π»Π°Ρ… ΠΈΠ³Ρ€ΠΎΠ²ΠΎΠ³ΠΎ поля, Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ся Π»ΠΈ ΠΊΠΎΡ€Π°Π±Π»ΠΈ ΠΎΠ΄ΠΈΠ½ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π’Π°ΠΊΠΆΠ΅ провСряСтся соотвСтствиС количСства ΠΊΠΎΡ€Π°Π±Π»Π΅ΠΉ ΠΈ ΠΏΠ°Π»ΡƒΠ± Π½Π° Π½ΠΈΡ… (1 Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹ΠΉ, 2 Ρ‚Ρ€Π΅Ρ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹Ρ…, 3 Π΄Π²ΡƒΡ…ΠΏΠ°Π»ΡƒΠ±Π½Ρ‹Ρ…, 1 ΠΎΠ΄Π½ΠΎΠΏΠ°Π»ΡƒΠ±Π½Ρ‹Ρ…). ВсС Π²Ρ‹ΡˆΠ΅ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Π΅ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ устранСны.

Π’ΠΎ Π²Ρ€Π΅ΠΌΡ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π²Ρ‹ΠΊΠΈ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ…, Ρ€Π°Π½Π΅Π΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΌΠ½ΠΎΠΉ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² срСды программирования Π‘++ Builder 6.

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ написании Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° я Π·Π°ΠΊΡ€Π΅ΠΏΠΈΠ» свои знания Π² ΠΎΠ±Π»Π°ΡΡ‚ΠΈ написания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, содСрТащих Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ классы. Π‘Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ Π½ΠΎΠ²Ρ‹Π΅ знания ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ классов ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½ΠΈΠΌΠΈ. Благодаря Ρ€Π°Π±ΠΎΡ‚Π΅ Π½Π°Π΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π±Ρ‹Π»ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠ»Π΅Π½Ρ‹ знания распрСдСлСния обязанностСй ΠΌΠ΅ΠΆΠ΄Ρƒ классами.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ: UShipBattle. h, UShipBattle. cpp, ShipBattle. cpp

ShipBattle.cpp

// ;

#include

#pragma hdrstop

// ;

USEFORM («UShipBattle.cpp», Form1);

// ;

WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize ();

Application->CreateForm (__classid (TForm1), &Form1);

Application->Run ();

}

catch (Exception &exception)

{

Application->ShowException (&exception);

}

catch (…)

{

try

{

throw Exception (««);

}

catch (Exception &exception)

{

Application->ShowException (&exception);

}

}

return 0;

}

// ;

UShipBattle.cpp

// ;

#include

#pragma hdrstop

#include «UShipBattle.h»

// ;

#pragma package (smart_init)

#pragma resource «*.dfm»

TForm1 *Form1;

// ;

__fastcall TForm1: TForm1 (TComponent* Owner)

: TForm (Owner)

{

HE = new HandlersOfEvents (Fild1, Fild2);

}

// ;

int Flot: GetStatus ()

{

destroy = true;

for (j = 0; j < 10; j++)

for (i = 0; i < ship[j]. col_deck; i++)

if (ship[j]. decks[i])

{

destroy = false;

return 1;

}

return 0;

}

// ;

int AI: Generation (Flot *CPU, int col_ship, int col_deck)

{

int x1, y1, k, i, j;

bool vertical = false, regen;

do {

randomize ();

x1 = rand ()% 10;

y1 = rand ()% 10;

regen = false;

for (k = 0; k < col_deck; k++)

for (i = 0; i < col_ship; i++)

for (j = 0; j < CPU -> ship[i]. col_deck; j++)

{

if (regen) break;

if (! vertical)

{

if ((CPU -> ship[i]. desp_of_part[j].x == x1 + k &&

CPU -> ship[i]. desp_of_part[j].y == y1) || (x1 + k >= 10))

{

vertical = true;

regen = true;

continue;

}

if ((CPU -> ship[i]. desp_of_part[j].x — 1 == x1 + k ||

CPU -> ship[i]. desp_of_part[j].x + 1 == x1 + k) &&

(CPU -> ship[i]. desp_of_part[j].y — 1 == y1 ||

CPU -> ship[i]. desp_of_part[j].y + 1 == y1))

{

vertical = true;

regen = true;

continue;

}

}

if (vertical)

{

if ((CPU -> ship[i]. desp_of_part[j].x == x1 &&

CPU -> ship[i]. desp_of_part[j].y == y1 + k) ||

(y1 + k >= 10))

{

vertical = false;

regen = true;

continue;

}

if ((CPU -> ship[i]. desp_of_part[j].x — 1 == x1 ||

CPU -> ship[i]. desp_of_part[j].x + 1 == x1) &&

(CPU -> ship[i]. desp_of_part[j].y — 1 == y1 + k ||

CPU -> ship[i]. desp_of_part[j].y + 1 == y1 + k))

{

vertical = true;

regen = true;

continue;

}

}

}

} while (regen);

if (! vertical)

for (i = 0; i < col_deck; i++)

{

CPU -> ship [col_ship — 1]. desp_of_part[i].x = x1 + i;

CPU -> ship [col_ship — 1]. desp_of_part[i].y = y1;

}

else

for (i = 0; i < col_deck; i++)

{

CPU -> ship [col_ship — 1]. desp_of_part[i].x = x1;

CPU -> ship [col_ship — 1]. desp_of_part[i].y = y1 + i;

}

return 0;

}

// ;

int Referee: GoChecking (int x, int y, int n)

{

if (n == 1)

if (! Check (net1, x, y))

return 0;

if (n == 2)

if (! Check (net2, x, y))

return 0;

return 1;

}

// ;

int Referee: Check (bool net[10] [10], int x, int y)

{

x /= 20; y /= 20;

if (! net[x] [y]) return 0;

return 1;

}

// ;

int Referee: GoScaning (int x, int y, int n)

{

if (n == 1)

if (! Scan (player, x, y))

return 0;

if (n == 2)

if (! Scan (CPU, x, y))

return 0;

return 1;

}

// ;

int Referee: Scan (Flot *fl, int x, int y)

{

x /= 20; y /= 20;

for (i = 0; i < 10; i++)

for (j = 0; j < fl -> ship[i]. col_deck; j++)

if (fl -> ship[i]. desp_of_part[j].x == x &&

fl -> ship[i]. desp_of_part[j].y == y)

{

fl -> ship[i]. decks[j] = false;

return 0;

}

return 1;

}

// ;

int Referee: Miss (int x, int y, int n)

{

x /= 20; y /= 20;

if (n == 1) net1 [x] [y] = false;

if (n == 2) net2 [x] [y] = false;

return 1;

}

// ;

int Referee: EndRaund (int n)

{

if (n == 2)

Form1 -> Panel2 -> Caption = «Π’Ρ‹ ΠΏΠΎΠ±Π΅Π΄ΠΈΠ»ΠΈ!»;

if (n == 1)

Form1 -> Panel2 -> Caption = «Π’Ρ‹ ΠΏΡ€ΠΎΠΈΠ³Ρ€Π°Π»ΠΈ!»;

game_over = true;

return 0;

}

// ;

int HandlersOfEvents: Play (TImage *Im1, TImage *Im2)

{

Im1 -> Enabled = true;

Im2 -> Enabled = true;

return 0;

}

// ;

int HandlersOfEvents: Desposition (int x, int y, TMouseButton Button)

{

if (play) return 0;

x /= 20; y /= 20;

for (k = 0; k < col_deck; k++)

for (i = 0; i < col_ship; i++)

for (j = 0; j < player -> ship[i]. col_deck; j++)

{

if (Button == mbLeft)

{

if (player -> ship[i]. desp_of_part[j].x == x + k &&

player -> ship[i]. desp_of_part[j].y == y)

{

ShowMessage («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС!»);

return 0;

}

if (x + k >= 10)

{

ShowMessage («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС!»);

return 0;

}

if ((player -> ship[i]. desp_of_part[j].x — 1 == x + k ||

player -> ship[i]. desp_of_part[j].x + 1 == x + k) &&

(player -> ship[i]. desp_of_part[j].y — 1 == y ||

player -> ship[i]. desp_of_part[j].y + 1 == y))

{

ShowMessage («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС!»);

return 0;

}

}

if (Button == mbRight)

{

if (player -> ship[i]. desp_of_part[j].x == x &&

player -> ship[i]. desp_of_part[j].y == y + k)

{

ShowMessage («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС!»);

return 0;

}

if (y + k >= 10)

{

ShowMessage («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС!»);

return 0;

}

if ((player -> ship[i]. desp_of_part[j].x — 1 == x ||

player -> ship[i]. desp_of_part[j].x + 1 == x) &&

(player -> ship[i]. desp_of_part[j].y — 1 == y + k ||

player -> ship[i]. desp_of_part[j].y + 1 == y + k))

{

ShowMessage («ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ дСйствиС!»);

return 0;

}

}

}

if (Button == mbLeft)

Draw («position_h», x*20, y*20, 1);

else

Draw («position_v», x*20, y*20, 1);

Generation (CPU, col_ship, col_deck);

if (col_ship == 1) col_deck -;

if (col_ship == 3) col_deck -;

if (col_ship == 6) col_deck -;

if (col_ship == 10) play = true;

if (play) Form1 -> Panel2 -> Caption = «ΠŸΠΎΠ΅Ρ…Π°Π»ΠΈ»;

col_ship++;

return 0;

};

// ;

int HandlersOfEvents: Shoot (int x, int y)

{

if (game_over) return 0;

int shoot_player = ShootPlayer (x, y, 2);

if (shoot_player > 0)

do {

x = rand ()% 200;

y = rand ()% 200;

int shoot_cpu = ShootPlayer (x, y, 1);

if (shoot_cpu > 0)

break;

if (shoot_cpu < 0)

player -> GetStatus ();

if (player -> destroy || target_CPU > 19)

{

EndRaund (1);

return 0;

}

} while (true);

else

{

if (shoot_player < 0)

CPU -> GetStatus ();

if (CPU -> destroy || target_player > 19)

{

EndRaund (2);

return 0;

}

}

return 0;

}

// ;

int HandlersOfEvents: ShootPlayer (int x, int y, int n)

{

if (! play) return 0;

if (! GoChecking (x, y, n))

{

if (n == 2) Form1 -> Panel2 -> Caption = «Π•Ρ‰Ρ‘ Ρ€Π°Π·! Π’ΡƒΠ΄Π° ΡƒΠΆΠ΅ стрСляли!»;

return 0;

}

else if (! GoScaning (x, y, n))

{

Draw («target», x, y, n);

Miss (x, y, n);

if (n == 2)

{

Form1 -> Panel2 -> Caption = «ΠŸΠΎΠΏΠ°Π»! Π•Ρ‰Ρ‘ Ρ€Π°Π·!»;

target_player++;

}

else target_CPU++;

return -1;

}

Miss (x, y, n);

if (n == 2) Form1 -> Panel2 -> Caption = «ΠœΠΈΠΌΠΎ! Π₯ΠΎΠ΄ ΠΎΠΏΠΎΠ½Π΅Π½Ρ‚Π°»;

Draw («miss», x, y, n);

return 1;

}

// ;

int HandlersOfEvents: Draw (String key, int x, int y, int n)

{

TImage *Im;

x /= 20; y /= 20;

if (n == 1) Im = Form1 -> Fild1;

if (n == 2) Im = Form1 -> Fild2;

if (key == «target»)

{

Im -> Canvas -> Rectangle (x*20, y*20, x*20 + 20, y*20 + 20);

Im -> Canvas -> Brush -> Color = clYellow;

Im -> Canvas -> Rectangle (x*20, y*20 + 20, x*20 + 20, y*20);

Im -> Canvas -> Brush -> Color = clWhite;

}

if (key == «miss»)

{

Im -> Canvas -> Ellipse (x*20, y*20, x*20 + 20, y*20 + 20);

Im -> Canvas -> Ellipse (x*20 + 5, y*20 + 5, x*20 + 15, y*20 + 15);

}

if (key == «position_h»)

{

for (i = 0; i < col_deck; i++)

{

Im -> Canvas -> Brush -> Color = clBlue;

Im -> Canvas -> Rectangle (x*20 + i*20, y*20, x*20 + 20 + i*20, y*20 + 20);

player -> ship [col_ship — 1]. desp_of_part[i].x = x + i;

player -> ship [col_ship — 1]. desp_of_part[i].y = y;

Im -> Canvas -> Brush -> Color = clWhite;

}

}

if (key == «position_v»)

{

for (i = 0; i < col_deck; i++)

{

Im -> Canvas -> Brush -> Color = clBlue;

Im -> Canvas -> Rectangle (x*20, y*20 + i*20, x*20 + 20, y*20 + 20 + i*20);

player -> ship [col_ship — 1]. desp_of_part[i].x = x;

player -> ship [col_ship — 1]. desp_of_part[i].y = y + i;

Im -> Canvas -> Brush -> Color = clWhite;

}

}

return 0;

}

// ;

void __fastcall TForm1: Fild2MouseDown (TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

HE -> Shoot (X, Y);

}

// ;

void __fastcall TForm1: BitBtn2Click (TObject *Sender)

{

HE -> Play (Fild1, Fild2);

BitBtn2 -> Visible = false;

BitBtn3 -> Visible = true;

Panel2 -> Caption = «Π Π°ΡΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΡ€Π°Π±Π»ΠΈ»;

}

// ;

void __fastcall TForm1: Fild1MouseDown (TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

HE -> Desposition (X, Y, Button);

}

// ;

void __fastcall TForm1: BitBtn3Click (TObject *Sender)

{

Panel2 -> Caption = «Π Π°ΡΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΡ€Π°Π±Π»ΠΈ»;

Fild1 -> Picture -> LoadFromFile («net.bmp»);

Fild2 -> Picture -> LoadFromFile («net.bmp»);

HE = new HandlersOfEvents (Fild1, Fild2);

}

// ;

UShipBattle.h

// ;

#ifndef UShipBattleH

#define UShipBattleH

// ;

#include

#include

#include

#include

#include

#include

#include

#include

// ;

struct Ship

{

bool destroy;

int col_deck;

bool *decks;

TPoint *desp_of_part;

};

class Flot

{

public:

int i, j, n;

bool destroy;

TImage *Im;

Ship ship[10];

Flot (TImage *I)

{

destroy = false;

Im = I;

n = 1;

for (i = 0; i < 10; i++)

{

if (i < 6) n = 2;

if (i < 3) n = 3;

if (i == 0) n = 4;

ship[i]. destroy = false;

ship[i]. col_deck = n;

ship[i]. decks = new bool[n];

ship[i].desp_of_part = new TPoint[n];

}

}

int GetStatus ();

};

class AI

{

public:

TPoint decks_[20];

int col_decks_;

int Generation (Flot *CPU, int col_ship, int col_deck);

};

class Referee: public AI

{

public:

int i, j, target_player, target_CPU;

bool net1 [10], net2 [10], game_over;

Flot *player, *CPU;

Referee ()

{

for (i = 0; i < 10; i++)

for (j = 0; j < 10; j++)

{

net1 [i] [j] = true;

net2 [i] [j] = true;

}

game_over = false;

target_player = 0;

target_CPU = 0;

col_decks_ = 0;

}

int GoChecking (int x, int y, int n);

int Check (bool net[10] [10], int x, int y);

int GoScaning (int x, int y, int n);

int Scan (Flot *fl, int x, int y);

int Miss (int x, int y, int n);

int EndRaund (int n);

};

class HandlersOfEvents: public Referee

{

public:

bool play;

int col_deck, col_ship, i, j, k;

HandlersOfEvents (TImage *Im1, TImage *Im2)

{

play = false;

col_deck = 4; col_ship = 1;

player = new Flot (Im1);

CPU = new Flot (Im2);

}

int Play (TImage *Im1, TImage *Im2);

int Move ();

int Desposition (int x, int y, TMouseButton Button);

int Draw (String key, int x, int y, int n);

int ShootPlayer (int x, int y, int n);

int Shoot (int x, int y);

};

class TForm1: public TForm

{

__published: // IDE-managed Components

TImage *Fild1;

TImage *Fild2;

TPanel *Panel1;

TBitBtn *BitBtn1;

TBitBtn *BitBtn2;

TBitBtn *BitBtn3;

TPanel *Panel2;

void __fastcall Fild2MouseDown (TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall BitBtn2Click (TObject *Sender);

void __fastcall Fild1MouseDown (TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall BitBtn3Click (TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1 (TComponent* Owner);

HandlersOfEvents *HE;

};

// ;

extern PACKAGE TForm1 *Form1;

// ;

#endif

1. А. Π―. ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² C++ Builder 6. — Π—ΠΠž «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ

Π‘Π˜ΠΠžΠœ", Москва, 2005

2. Уильям Π’ΠΎΠΏΠΏ, Уильям Π€ΠΎΡ€Π΄. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… Π² Π‘++.-Π—ΠΠž «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ

Π‘Π˜ΠΠžΠœ", Москва, 2000

3. Π’. Π’. ПодбСльский. Π―Π·Ρ‹ΠΊ Π‘, Π‘++. «Π€ΠΈΠ½Π°Π½ΡΡ‹ ΠΈ ΡΡ‚атистика», Москва, 2003

4. Π’. А. Павловская. Π‘/Π‘++. «ΠŸΠΈΡ‚Π΅Ρ€», Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2002

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