Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Постановка задачі





Завдання полягає в розробці алгоритму, за яким комп'ютер зможе грати в «Морський бій» з максимальною якістю, і при цьому не підглядаючи до розташування флоту гравця.

Додаткова і очевидна умова: при кожній новій грі незалежно від розміщення сил противника комп'ютер повинен грати по-різному, тобто його ходи повинні бути не передбачувані.

Необхідно згадати правила гри: учасники поєдинку роблять ходи по черзі, причому, якщо один з гравців потрапляє по кораблю суперника, то він отримує право наступного ходу. Якщо реалізувати пошук цілі комп'ютером у вигляді окремої процедури, то треба якось навчити його запам'ятовувати результати минулих пострілів, щоб адекватно провести наступний. З цього факту випливає, що саме просте і раціональне рішення даної проблеми можна оформити у вигляді кінцевого автомата, найбільш точно описує послідовність дій.

Можна виділити три стани:

1) простріл ігрового поля по випадкових координатах до влучення по кораблю, після чого перехід в другий стан;

2) обстріл навколо підбитиго осередку поля для визначення напрямку корабля (вертикальне чи горизонтальне), після чергового попадання - перехід в третій стан;

3) розстріл корабля в отриманому напрямку до повного його знищення, після чого перехід в перший стан.

І так, вся гра зациклена на трьох основних діях: простріл, обстріл і розстріл. Всі ці дії мають продовжуватися до тих пір, поки в однієї зі сторін не будуть знищені всі кораблі.

• Простріл.

На цьому етапі комп'ютер повинен зловити будь-який з кораблів противника. Для цього він буде стріляти по довільним незайнятим клітинам поля гравця. Набагато ефективніше спочатку розправитися з великими кораблями, тому вибираючи координати для пострілу треба перевіряти, щоб у цій позиції міг розміститися найбільший з решти кораблів. Процес припиняється, як тільки відбудеться влучання. Позначимо підбиту частину корабля значенням «*», а промах «~» відповідної комірки поля. Якщо у гравця залишилися тільки однопалубні кораблі, то цим попаданням корабель знищено повністю і обстрілювати її немає сенсу. В іншому випадку треба перейти до другого стану.

• Обстріл.

На цьому кроці завдання полягає у визначенні напрямку спійманого корабля. Для цього треба обстріляти чотири осередки (якщо вони вільні), які можуть служити продовженням. У разі, коли всі чотири клітини обстріляні, а попадання не відбулося (однопалубний корабель), треба перейти до першого стану. Якщо в якийсь момент вдалося підбити ще одну палубу противника, то можна переходить до розстрілу даного корабля, так як його напрям стало відомо. Аналогічно першому стану, якщо у гравця залишилися кораблі не більше двох палуб, то цим попаданням корабель знищений повністю і треба повернутися до прострілу.

• Розстріл.

На попередньому кроці вдалося встановити в якому напрямку розміщений спійманий корабель. Тепер завдання полягає в його повному знищенні. Для цього треба стріляти праворуч або ліворуч (зверху чи знизу) підбитих палуб, поки не доб'ємо його цілком, після чого повернемося в стан прострілу. При цьому слід враховувати максимально можливий корабель і намагатися потрапити по четвертій палубі, коли чотирьох палубний корабель знищений, немає ніякого сенсу.

 

Приклад

Поле кораблів

                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                       

 

Стратегія гри комп’ютера.

1. Вибираємо випадкову клітинку, роздивляється її значення.

2. Якщо значення = 1 – попали в корабель, відмічаємо удар «*»;

3. Якщо значення = 0 – не попали, відмічаємо удар «~»;

4. Якщо значення = «*» або значення = «~», значить в цю клітинку ми вже зробили удар, повертаємося до кроку 1.

Після того як всі кораблі розбиті, завершуємо бій. Поле розбитих кораблів

 

*
                                       

 
                                       
* * * ~ ~ * ~ ~ ~    
~ ~ ~ ~ ~ ~ * ~ ~ ~
~ ~ ~ ~ * ~ * ~ ~ ~
* ~ ~ ~ * ~ ~ ~ ~ ~
~ ~ ~ ~ ~ ~ ~ ~ ~ ~
~ ~ ~ ~   ~ ~ ~ ~ ~
~ ~ * ~ ~ ~ ~ ~   *
~ ~ ~ ~ ~ ~ ~ ~ ~ *
~ ~ ~ ~ * * ~ ~ ~ ~
* ~ * ~ ~ ~ ~ * * *
                                       

 

Date: 2015-07-25; view: 248; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию