Как сделать морской бой в excel

Как сделать морской бой в excel?

Как сделать морской бой в excel?

Список необходимой литературы

Эта небольшая статья может оказаться интересна тем, кто увлекается программированием и хочет узнать новые алгоритмы или решения новых задач. Речь пойдет о реализации игры «Морской бой» (подобной той, что можно скачать) на Делфи, а точнее, на Паскале, т.к. вопросов, связанных с организацией интерфейса, мы касаться не будем. Если Вас не устраивает язык Pascal, то можете перевести представленный ниже код на любой другой язык. Выбор пал именно на Паскаль по двум причинам: во-первых, игра была написана на нем; во-вторых, он наиболее нагляден и идеально подходит для представления алгоритмов. Сразу оговорюсь, что полный исходный текст программы выложен не был, т.к. эту игру я писал достаточно давно, когда еще учился в школе, и код получился достаточно запутанным и непонятным (тогда я так писал). Тем не менее, если Вам очень нужны исходники, напишите мне, и я вышлю их по мылу.

Что бы компьютер мог играть, он должен научиться расставлять свои корабли на игровом поле и делать правильные ходы. На самом деле это две разные задачи и рассматривать их надо отдельно.

Алгоритм размещения кораблей на игровом поле

Игровое поле нужно как-то хранить в памяти компьютера. Наиболее простая реализация — в виде матрицы 10×10 клеток (ячеек). Определим соответствующий тип и переменные, которые нам понадобятся:

Обусловимся, что пустая ячейка будет иметь значение -1, а ячейка, в которой находится корабль: . Перед началом процесса размещения кораблей необходимо очистить поле. Помимо этого надо еще и обновить счетчик случайных чисел, что бы добиться реальной случайности позиций флота компьютера. Все эти действия лучше оформить в виде отдельной процедуры:

По правилам игры два корабля не могут соприкасаться друг с другом, т.е. между ними должно быть пустое пространство минимум в одну клетку. Нам понадобится вспомогательная функция, которая позволит определить, можно ли поставить однопалубный корабль в указанную ячейку или нет. Для этого необходимо проверить саму эту ячейку и все соседние (их 8 штук). И только если все они не заняты можно дать положительный ответ (True), в противном случае — отрицательный (False):

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

Это, собственно, и все, что касается размещения кораблей компьютера. Теперь достаточно сделать вызов: Ship (Pole); и корабли будут случайным образом расставлены по своим местам. Подобным образом можно помочь пользователю, что бы он каждый раз не тратил время на эту операцию, вызвав Ship (Play); где Play — поле игрока (тип TPole).

Стратегия игры компьютера

Задача заключается в разработке алгоритма, по которому компьютер сможет играть в «Морской бой» с максимальным качеством и при этом не подглядывая расположение флота игрока. Дополнительное и очевидное условие: при каждой новой игре вне зависимости от размещения сил противника компьютер должен играть по-разному, т.е. его ходы должны быть не предсказуемы. Необходимо вспомнить правила игры: участники поединка делают ходы поочередно, причем, если один из игроков попадает по кораблю соперника, то он получает право следующего хода. Если реализовать поиск цели компьютером в виде отдельной процедуры, то надо как-то научить его запоминать исходы прошлых выстрелов, чтобы адекватно произвести следующий. Из этого факта вытекает, что самое простое и рациональное решение данной проблемы можно оформить в виде конечного автомата, наиболее точно описывающего последовательность действий. Если Вы не знаете теорию автоматов, то можете прочесть соответствующую литературу, ссылку на которую можно найти в моем списке литературы. Можно выделить три состояния:

  1. прострел игрового поля по случайным координатам до попадания по кораблю, после чего переход во второе состояние;
  2. обстрел вокруг подбитой ячейки поля для определения направления корабля (вертикальное или горизонтальное), после очередного попадания — переход в третье состояние;
  3. расстрел корабля в полученном направлении до полного его уничтожения, после чего переход в первое состояние.

И так, вся игра зациклена на трех основных действиях: прострел, обстрел и расстрел. Все эти действия должны продолжаться до тех пор, пока у одной из сторон не будут уничтожены все корабли.

Компьютеру потребуется еще одно поле, на котором он будет вести игру. Назовем его Play. Помимо этого нужно помнить, какие корабли остались у игрока, а какие уже разбиты. Объявим все необходимые переменные:

Перед началом игры надо настроить все значения. Это удобно сделать в отдельной процедуре:

Предположим, что у нас есть функция, которая выдает истину, если в ячейки (x,y) игрока стоит корабль и ложь в противном случае: function Killed (x, y: Integer): Boolean;. Еще потребуется функция, определяющая длину самого большого корабля игрока:

И функция, определяющая проигрыш юзера:

Все вспомогательные подпрограммы готовы и можно приступить к реализации самого автомата. Для большей наглядности каждое состояние оформим в виде отдельной процедуры. И так, все по порядку.

Прострел. На этом этапе компьютер должен поймать какой-либо из кораблей противника. Для этого он будет стрелять по произвольным незанятым клеткам поля игрока. Гораздо эффективнее сначала разделаться с большими кораблями, поэтому выбирая координаты для выстрела надо проверять, что бы в этой позиции мог разместиться самый большой из оставшихся кораблей. Процесс прекращается, как только произойдет попадание. Обозначим подбитую часть корабля значением 1, а промах -2 соответствующей ячейки поля. Если у игрока остались только однопалубные корабли, то этим попаданием корабль уничтожен полностью и обстреливать его нет смысла. В противном случае надо перейти ко второму состоянию. Приведем код описанной функции:

Ее результатом служат координаты выстрела и показатель попадания.

Обстрел. На этом шаге задача заключается в определении направления пойманного корабля. Для этого надо обстрелять четыре ячейки (если они свободны), которые могут служить продолжением. В случае, когда все четыре клетки обстреляны, а попадания не произошло (однопалубный корабль), надо перейти к первому состоянию. Если в какой-то момент удалось подбить еще одну палубу противника, то можно переходит к расстрелу данного корабля, т.к. его направление стало известно. Аналогично первому состоянию, если у игрока остались корабли не более двух палуб, то этим попаданием корабль уничтожен полностью и надо вернуться к прострелу. Посмотрим, как все это выглядит:

Источник:
http://svrecord.ru/excel/kak-sdelat-morskoj-boj-v-excel.html

Электронная таблица MS Excel Игра «Морской бой» Электронная таблица MS Excel. — презентация

Презентация была опубликована 2 года назад пользователемЖенис Садуакасов

Похожие презентации

Презентация на тему: » Электронная таблица MS Excel Игра «Морской бой» Электронная таблица MS Excel.» — Транскрипт:

2 Электронная таблица MS Excel Игра «Морской бой»

3 Электронная таблица MS Excel

4 Как запустить электронную таблицу?

5 Как образуется адрес ячейки?

7 Чему будет равно значение ячейки A5?

11 Правильные ответы теста 1 вариант 1. А 2. А 3. С 4. С 5. А 2 вариант 1. В 2. А 3. В 4. А 5.С

Похожие презентации

Тест по теме: Начать тест Начать тест. 2 вариант ответа 3 вариант ответа 1 вариант ответа 4 вариант ответа Вопрос 1.

ГУ «Новопокровская СШ» учитель информатики Стецов С. М. Электронные таблицы MS Excel.

ТЕСТ Вопрос Ответ 1 Ответ 2 Ответ 3 Ответ 4 Вопрос Ответ 1 Ответ 2 Ответ 3 Ответ 4.

Читайте также  Трехмерные диаграммы (поверхности и изолинии) в EXCEL

В электронной таблице значение формулы =СУММ(D2:D4) равно 16. Чему равно значение ячейки D1, если значение формулы =СРЗНАЧ(D1:D4) равно 5? 1) 5 2) 11 3)

ТЕСТ по теме …. Вопрос 1 Ответ 1 Правильный ответ Ответ 3 Ответ 4.

1 Окно программы Excel В любую ячейку электронной таблицы можно ввести: число формулу текст.

Цель урока: Изучение новых встроенных функций закрепление умения работать с табличным процессором MS Excel.

Предмет Тема теста 0 класс Amo45- 001. Текст вопроса 1 вариант ответа — верный 2 вариант ответа — верный Выбор многих из многих ( 3 из 4 – верный ответ.

Предмет Тема теста 0 класс Amo45- 001. Текст вопроса 1 вариант ответа — верный 2 вариант ответа Выбор одного из многих (1 из 4 – верный ответ 1) 3 вариант.

Предмет Тема теста 0 класс Amo45- 001. Текст вопроса 1 вариант ответа — верный 2 вариант ответа — верный Выбор многих из многих ( 2 из 4 – верный ответ.

Электронные таблицы EXCEL. Электронные таблицы Электронные таблицы; Электронные таблицы Рабочая книга; Рабочая книга Строка; Фрагмент; Фрагмент Столбцы.

Проверочная работа по теме: «Расчеты в Excel». Вариант 1. Укажите устройство компьютера, предназначенное для обработки информации: а) внешняя память;

Электронные таблицы Microsoft Excel Ссылки. Формула электронной таблицы может включать ссылки. Ссылки адреса ячеек, которые однозначно определяют их месторасположение.

Начать тест Название теста h t t p : / / w w w. n a c h a l k a. c o m / t e s t s h a b l o n.

Таблица умножения на 2.. футбол Кликай на правильных ответах.

1 ТАБЛИЧНЫЕ БАЗЫ ДАННЫХ тест. 2 Тест на проверку знания основных понятий темы «Базы данных» Ответы оформить в данной презентации, оставляя правильный.

L o g o Повторение материала «Основы электронных таблиц» МОУ «СОШ с. Вязовка», 2011 год.

Электронная таблица: среда и принципы работы. Для работы с числовой информацией используют специальную программу, называемую электронной таблицей. Мы.

ТЕСТ ПО ТЕМЕ. Какое из уравнений не имеет корней? х 2 +5 х-1=0 х 2 -х+1=0 х 2 +4 х+4=0 Х 2 -3 х+2=0.

Источник:
http://www.myshared.ru/slide/1377226/

Как в Excel поиграть в компьютерные игры

Excel — мощная программа, в которой можно создавать другие программы, поменьше. Даже отдельные функции являют собой, по сути дела, особые программки. Не все они служат скучным целям. Игр, написанных специально для Excel, довольно много. Возможно, игры и не исчезли, а просто их упрятали поглубже. Если вам известно, как запустить в Microsoft Office какую-нибудь игрушку, напишите мне, пожалуйста. Иногда в творческом процессе так хочется кого-нибудь пристрелить или где-нибудь полетать…

Игры inside

В версиях Excel 95-2000 игрушки, придуманные авторами программы, «спрятаны». Например, в Excel 95 нужно проделать следующие шаманские действия.

  1. Создать новую книгу.
  2. Выделить строку gод номером 95.
  3. Нажать клавишу табуляции.
  4. Открыть меню Справка ► 0 программе.
  5. Удерживая одновременно клавиши Ctr, Alt и Shift, щелкнуть на пункте Техническая поддержка.

И запускается «стрелялка», напоминающая комбатс и светлой памяти Doom, только попроще!

В Excel 97 действия для вызова игры такие.

  1. Выполнить команду Сервис ► Параметры и в открывшемся окне на вкладке Общие снять флажок Стиль ссылок R1C1.
  2. Создать таблицу.
  3. Нажать F5 и ввести в появившемся окне кабалистическую надпись Х97:_97.
  4. Нажать Enter.
  5. Выделить строку с номером 97.
  6. Нажать клавишу табуляции, а затем, удерживая Shift и Ctrl, щелкнуть на значке Мастера диаграмм и подождать, пока открывающееся окно не заполнит весь экран.

В результате вы сможете оценить достоинства авиасимулятора, придуманного и разработанного программистами Microsoft.

В Excel 2000 процедура запуска игры усложнена. Нужно выполнить такие действия.

  1. Создать новую книгу.
  2. Сохранить ее в формате веб-страницы (Сохранить как Web-страницу), установив флажки выделенное: Лист и Добавить интерактивность.
  3. Открыть созданную страницу в Internet Explorer версии не ниже 5.0.
  4. Выделить строку 2000.
  5. Клавишей табуляции перевести выделение на ячейку WC 2000.
  6. Одновременно нажать клавиши Ctrl, Alt и Shift, расположенные на клавиатуре слева, и щелкнуть в левом верхнем углу внедренного в веб-страницу листа Excel на эмблеме Office.

После этого у вас появляется возможность погонять по виртуальной трассе виртуальные же машинки.

После 2000 года руководство компании Microsoft, видимо, узнало, чем занимаются программисты вместо того, чтобы улучшать интерфейс и повышать надежность программных продуктов. Или еще что-то случилось. Во всяком случае, начиная с Office ХР «встроенные» игры из Excel исчезли. А заодно и из Word, где была, например, неплохая вариация на тему игры Pinball.

Игры-макросы

В Excel (и вообще в любой программе Microsoft Office) есть возможность написать мини-приложение на языке программирования VBA (Visual Basic for Applications). Обычно на нем пишут какие-нибудь полезные вещи — сложные расчеты, поиск объектов по определенному признаку, хитрое форматирование данных. Но никто не запрещает и игру написать.

А хоть бы и запрещали! В Интернете полно игр, написанных для Excel. Не буду даже советовать конкретные сайты. Достаточно зайти на поисковый сервер (например, http://www.google.com или http://www.yandex.ru) и в строке поиска написать Excel игра или, если хотя бы чуть-чуть читаете по-английски, Excel game. Увидите множество ресурсов, где есть подходящие игрушки. Правда, для их запуска нужно немного изменить настройки программы.

Давайте я вам расскажу, как установить какую-нибудь игру, а заодно и передохну на совершенно законном основании. Для тестирования я выбрал старый добрый «Тетрис». Ностальгия, знаете ли, замучила: молодость, лаборатория нелинейной спектроскопии, поляризация лазера на красителях, расчет эксперимента на ЭВМ «Мазовия», а в перерывах… М-да… Молодость ушла, а «Тетрис» жив и постоянно появляется в самых неожиданных формах: например в виде игрушки для Excel. Файл игры я скачал с одного популярного интернет-портала. Это обычный документ Excel под названием Tetris.xls. Открыл его… и туг же обнаружил многозначительное предупреждение.

Ни в коем случае не разрешайте выполнение неизвестных макросов, если не уверены в их безвредности! Я бы ни за что не стал этого делать, но надо же вас научить играть в «Тетрис»!

Это очень важное предупреждение. Давайте с ним разберемся, прежде чем пойти дальше. Как я уже писал, игры — это мини-программы (макросы), написанные на языке VBA. Это не очень «навороченный* язык, по всякого рода вредители навострились писать вирусы и на нем.

Поэтому в Excel 2007-2013 по умолчанию выполнение всех макросов запрещено. Как известно, воздержание — единственный надежный метод предохранения. Поэтому, увидев такое предупреждение в незнакомом файле, который вы получили неизвестно от кого, лучше сразу закройте его и займитесь чем-нибудь другим. В данном случае я трижды плюнул через левое плечо, помолился лицензионному антивирусу, который стережет мой компьютер, и не стал закрывать файл. Более того, я нажал кнопку Параметры и увидел окно настроек.

Тут я еще раз поплевал через плечо и установил переключатель в положение Включить это содержимое. И нажал ОК. С этой секунды все макросы, записанные в файле Tetris.xls, перешли в активное состояние. При внимательном рассмотрении файл с игрой «Тетрис» оказался очень простым. Кроме данных об авторе, на листе оказались две кнопки — Запуск и Выход, а также список уровней сложности, от первого до пятого. Я, естественно, начал с самого сложного, пятого, и погрузился в игру.

Выяснилось, что руки до сих пор помнят клавиши управления игрой: на цифровой клавиатуре стрелки ← и → сдвигают фигуру соответственно влево и вправо; стрелка ↑ поворачивает фигуру вокруг своей оси; стрелка ↓ ускоряет движение вниз. Мышечная память оказалась очень кстати, потому что в самом файле об управлении игрой — ни слова.

Источник:
http://excel2010.ru/kak-v-excel-poigrat-v-kompyuternye-igry.html

Как сделать морской бой в excel?

Как сделать морской бой в excel?

Список необходимой литературы

Эта небольшая статья может оказаться интересна тем, кто увлекается программированием и хочет узнать новые алгоритмы или решения новых задач. Речь пойдет о реализации игры «Морской бой» (подобной той, что можно скачать) на Делфи, а точнее, на Паскале, т.к. вопросов, связанных с организацией интерфейса, мы касаться не будем. Если Вас не устраивает язык Pascal, то можете перевести представленный ниже код на любой другой язык. Выбор пал именно на Паскаль по двум причинам: во-первых, игра была написана на нем; во-вторых, он наиболее нагляден и идеально подходит для представления алгоритмов. Сразу оговорюсь, что полный исходный текст программы выложен не был, т.к. эту игру я писал достаточно давно, когда еще учился в школе, и код получился достаточно запутанным и непонятным (тогда я так писал). Тем не менее, если Вам очень нужны исходники, напишите мне, и я вышлю их по мылу.

Читайте также  Товарная накладная

Что бы компьютер мог играть, он должен научиться расставлять свои корабли на игровом поле и делать правильные ходы. На самом деле это две разные задачи и рассматривать их надо отдельно.

Алгоритм размещения кораблей на игровом поле

Игровое поле нужно как-то хранить в памяти компьютера. Наиболее простая реализация — в виде матрицы 10×10 клеток (ячеек). Определим соответствующий тип и переменные, которые нам понадобятся:

Обусловимся, что пустая ячейка будет иметь значение -1, а ячейка, в которой находится корабль: . Перед началом процесса размещения кораблей необходимо очистить поле. Помимо этого надо еще и обновить счетчик случайных чисел, что бы добиться реальной случайности позиций флота компьютера. Все эти действия лучше оформить в виде отдельной процедуры:

По правилам игры два корабля не могут соприкасаться друг с другом, т.е. между ними должно быть пустое пространство минимум в одну клетку. Нам понадобится вспомогательная функция, которая позволит определить, можно ли поставить однопалубный корабль в указанную ячейку или нет. Для этого необходимо проверить саму эту ячейку и все соседние (их 8 штук). И только если все они не заняты можно дать положительный ответ (True), в противном случае — отрицательный (False):

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

Это, собственно, и все, что касается размещения кораблей компьютера. Теперь достаточно сделать вызов: Ship (Pole); и корабли будут случайным образом расставлены по своим местам. Подобным образом можно помочь пользователю, что бы он каждый раз не тратил время на эту операцию, вызвав Ship (Play); где Play — поле игрока (тип TPole).

Стратегия игры компьютера

Задача заключается в разработке алгоритма, по которому компьютер сможет играть в «Морской бой» с максимальным качеством и при этом не подглядывая расположение флота игрока. Дополнительное и очевидное условие: при каждой новой игре вне зависимости от размещения сил противника компьютер должен играть по-разному, т.е. его ходы должны быть не предсказуемы. Необходимо вспомнить правила игры: участники поединка делают ходы поочередно, причем, если один из игроков попадает по кораблю соперника, то он получает право следующего хода. Если реализовать поиск цели компьютером в виде отдельной процедуры, то надо как-то научить его запоминать исходы прошлых выстрелов, чтобы адекватно произвести следующий. Из этого факта вытекает, что самое простое и рациональное решение данной проблемы можно оформить в виде конечного автомата, наиболее точно описывающего последовательность действий. Если Вы не знаете теорию автоматов, то можете прочесть соответствующую литературу, ссылку на которую можно найти в моем списке литературы. Можно выделить три состояния:

  1. прострел игрового поля по случайным координатам до попадания по кораблю, после чего переход во второе состояние;
  2. обстрел вокруг подбитой ячейки поля для определения направления корабля (вертикальное или горизонтальное), после очередного попадания — переход в третье состояние;
  3. расстрел корабля в полученном направлении до полного его уничтожения, после чего переход в первое состояние.

И так, вся игра зациклена на трех основных действиях: прострел, обстрел и расстрел. Все эти действия должны продолжаться до тех пор, пока у одной из сторон не будут уничтожены все корабли.

Компьютеру потребуется еще одно поле, на котором он будет вести игру. Назовем его Play. Помимо этого нужно помнить, какие корабли остались у игрока, а какие уже разбиты. Объявим все необходимые переменные:

Перед началом игры надо настроить все значения. Это удобно сделать в отдельной процедуре:

Предположим, что у нас есть функция, которая выдает истину, если в ячейки (x,y) игрока стоит корабль и ложь в противном случае: function Killed (x, y: Integer): Boolean;. Еще потребуется функция, определяющая длину самого большого корабля игрока:

И функция, определяющая проигрыш юзера:

Все вспомогательные подпрограммы готовы и можно приступить к реализации самого автомата. Для большей наглядности каждое состояние оформим в виде отдельной процедуры. И так, все по порядку.

Прострел. На этом этапе компьютер должен поймать какой-либо из кораблей противника. Для этого он будет стрелять по произвольным незанятым клеткам поля игрока. Гораздо эффективнее сначала разделаться с большими кораблями, поэтому выбирая координаты для выстрела надо проверять, что бы в этой позиции мог разместиться самый большой из оставшихся кораблей. Процесс прекращается, как только произойдет попадание. Обозначим подбитую часть корабля значением 1, а промах -2 соответствующей ячейки поля. Если у игрока остались только однопалубные корабли, то этим попаданием корабль уничтожен полностью и обстреливать его нет смысла. В противном случае надо перейти ко второму состоянию. Приведем код описанной функции:

Ее результатом служат координаты выстрела и показатель попадания.

Обстрел. На этом шаге задача заключается в определении направления пойманного корабля. Для этого надо обстрелять четыре ячейки (если они свободны), которые могут служить продолжением. В случае, когда все четыре клетки обстреляны, а попадания не произошло (однопалубный корабль), надо перейти к первому состоянию. Если в какой-то момент удалось подбить еще одну палубу противника, то можно переходит к расстрелу данного корабля, т.к. его направление стало известно. Аналогично первому состоянию, если у игрока остались корабли не более двух палуб, то этим попаданием корабль уничтожен полностью и надо вернуться к прострелу. Посмотрим, как все это выглядит:

Источник:
http://t-tservice.ru/excel/kak-sdelat-morskoj-boj-v-excel.html

хочу создать игру Морской бой. need help:)

З.Ы: новичек!
захотелось мне написать игру «Морской бой» естествено под Win,

для чего?
— Для того что бы окунутся в game development

написания этой игры я вижу такой потенциал:
1. отсюда должно приди понимание, что игра состоит из блока логики и блока визуализации.
2. ходы противника. нужно писать будет AI (ИИ). причем можно любого уровня сложности. от случайной пальбы, до супермозга. отсюда придет понимание принципов ООП (что мне пока не хватает )
3. ходы противника 2. но уже другого человека. тут можно развернуться насчет сетевой игры или простейшего hot seat (поочередно каждый со своего «пульта») и до игра online по сети.
.потом если получится написать это дело, можно будет реализовать игру в 2d >3d и т.к
и.т.п. эту игру можно развивать довольно долго.

главная идея получить дорогоценную практику ! ! !
знаю основы программирования.

язык программирования думаю самое то будет:
C# 2.0 или C++

скажу сразу: игры никогда не писал и особого представления об этом не имею, но очень хочу этому научится

есть куча вопросов у меня

Читайте также  Как выделить границы таблицы в Экселе
[1] первый и самый смешной 😀 :
С чего начать ? (Какие мануалы курить(желательно ru, eng средний уровень) ? как этому учится и т.к )

Буду очень благодарен, за любого рода помощь 🙂

***
У меня есть сейчас такие мысли по поводу создать игру:
надо как то реализовать — Отображение двухмерной сетки (короче говоря двухмерного масива) и кучя всяких безполезных вещей, которые еще не известно как реализовать :confused:

Насчет блоков визуализации и логики ты абсолютно прав.
Мои рекомендации (из личного опыта).
1. Лучше начать с чего-то вроде hot sit. Противники играют на одной машине и ходят по очереди. Неудобно с практической точки зрения (противники должны отворачиваться, когда ходит другой), но получаем начальную практику написания алгоритмов прорисовки, стрельбы и т. п.
2. Переходим к сетевому варианту. В первую очередь нужно продумать — будет клиент-серверный вариант или «peer-to-peer». Получаем опыт работы с сетевыми приложениями.
3. Если первые два пункта удались, можно заняться AI. Это — самое сложное, и без математики тут никак. Читаем математическую логику, теорию алгоритмов, дискретку, если удалось их понять — можно попробовать почитать нейросети и прочие достижения в области искусственного интеллекта. Но это не всем дано 🙂
В любом случае нужно разделить блок игровой информации от блока AI (поскольку первый знает расположение кораблей обоих противников, и если у блока AI есть неограниченный доступ к этой информации — это будет просто читерством).
Главное в данном конкретном случае — не нейросети. Игра для этого слишком проста. Главное — умение мыслить логически, и научить машину мыслить так же. Вот пример: при попадании в некоторую клетку блок игровой информации нам сообщил либо «убит», либо «попал», если «убит» — корабль был одноместным, по соседним клеткам бить не стоит, в противном случае наоборот, лучше бить по соседним клеткам.
И еще. Ты упоминал про ООП. Эта концепция мало связана с искусственным интеллектом. Это две независимые концепции.

Итак, читаем мануалы по DirectX (коль скоро пишем под винды). Библиотека удобная и объектно-ориентированная, лично мне понравилось, удобно. Всё в классах и методах, а не в функциях.
Линии (сетку) рисуем непосредственно, различные фигурки (пустая клетка, подбитый корабль, мертвый корабль) можно рисовать из готовых картинок, лежащих в файлах (в WinAPI есть удобные функции для загрузки, преобразования, прорисовки BMP).

Полезная рекомендация. Здесь, на codenet, есть раздел «исходники», и игрушек там куча. Скачиваем, читаем, разбираемся.

Источник:
http://forum.codenet.ru/q41790/

Сетевая игра МОРСКОЙ БОЙ+. Управляемая форма

Игра возможна как с компьютером, так и с оппонентом по сети. В качестве сетевого ресурса обмена информацией между игроками используется КаталогВременныхФайлов сервера 1С (кластера). Т.е. в игру можно играть как в рамках одной конфигурации так и в двух различных, единственное условие — эти конфигурации должны использовать один общий сервер 1С (кластер).

P.S. Возможна медленная работа из-за особенностей платформы, т.к. в обработке используется графическая схема, а она, похоже, каждый раз «перерисовывается» целиком, после очередного действия, производимого над ней. Даже попытка использования gif-анимации приводит к статической картинке. Т.е. графическая схема формируется не сервере одним рисунком и затем публикуется для отображения на клиенте.

Related Posts

45 Comments

Поддержу (1), действительно симпатично смотрится.

Только вот 1с для даже для такой простейшей игры не предназанчена — не тянет.

Автор, корабли не могут соприкасаться «бортами».

Еще бы порекомендовал паузу 1-2 секунда между последовательными ходами компьютера — а то графически трудно уследить, куда он ходит, приходитмся читать/искать текстовое описание хода.

Ну, и заодно иммитация «компьютер вроде как думает».

А то ляпает ходы и «бездумно», и не видно куда

(5) frc, только углами.

(6) frc, это можно сделать самостоятельно. Найти в тексте модуля формы текст ПодключитьОбработчикОжидания и установить время в секундах, сейчас 1 сек.

Еще бы между пользователями игру замутить, а то вроде как с компьютером не интересно. Может чекать как-то активных и присылать им приглашение?

(10) Ёпрст, в каждом отдельно взятом регионе свои правила.

(9) RomAsVo, что-то подобное было здесь на инфостарте, поищите.

Автор молодчик. Классная игрушка! Только одно замечание, если корабль «убит», он должен по перефирии полностью обводиться. Скрин прилагаю. А так супер, безукоризненно плюс автору.

(13) soulsteps, обводится «убитый» полностью, т.к. прошу не забывать, что в правилах этой игры корабли могут соприкасаться углами, поэтому обводятся только те клетки, которые соприкасаютя гранями.

обнаружил небольшой баг — если после промаха игрок продолжит нажимать на клетки в поле противника, то продолжится обстрел поля компьютера — нет блокировки ходов игрока, пока компьютер не сделал свой шаг. я так выиграл, не дав сделать ни одного шага компьютеру)

(16) scorp_23, ну да, забыл про это. обработчик ожидания работает только когда нет активности пользователя.

Впервые слышу про ограничения по размещению кораблей на поле.

Плюс за творческий подход к реализации графической составляющей игры.

Еще бы сетевую игру сделать, например, через записи справочника/документа/регистра

(18) ivs200999, Впервые слышу что их нету.

bobank, в «Морском бое» действительно есть ограничение на размещение кораблей, углы не должны соприкасаться. Я ещё со школы помню когда играли на двух тетрадных листах Потом на компьютерах появились игры, там тоже такие же правила. Если не ошибаюсь сетевой «Морской бой» был реализован в маил.ру агенте и там тоже такие же правила.

а почему игра не запускается

потому что на управляемых формах и должна запускаться в УП.

корабли, когда «плавают», бортами не соприкасаются

(24) frc, всё сообразил )))

Автору +. Интересное оформление получилось. Как-то писал морской бой на visual basic в технаре. Только в правилах обычно принято, чтобы корабли не соприкасались углами и обводить убитого со всех сторон соответственно. Предлагаю добавить уровни сложности. Алгоритм элементарный: добитие раненых включается с определенного уровня и в зависимости от уровня у компьютера может быть несколько «невидимых» попыток попасть. т.е. он бьет один раз — не попал — ячейку не открываем, а даем ему еще одну попытку и только во второй(или 3,4 — в зависимости от сложности) открываем ячейку даже если не попал. Ну а если попал то все как обычно. Выше 5-ого уровня играть не реально), а десятый разносит за 2-3 хода.

Прикольно. Автор молодец.

Противник расставляет кораблики рядом, красивоо сделано +.

Игру по сети делать будете?

Сетевая версия на подходе. Выбираю варианты взаимодействия — либо через общий сетевой ресурс, либо через объект конфигурации, но тогда теряется смысл во внешней обработке. Так же разрабатываю протокол обмена (мне он для других целей потом пригодится).

Готовую версию обработки выложу ориентировчно в понедельник — вторник.

(32) vbuots, да я уже писал выше, что в правилах этой игры корабли могут соприкасаться углами, но не гранями.

Реализован сетевой режим, т.е. игра с оппонентом.

(35) красивая реализация, зачетно

Улыбнуло, нужная вещь

В правилах классической игры «Морской бой» корабли ни в коем случае не соприкасаются углами. О том, что есть другой вариант игры, когда это возможно, узнал впервые из этой публикации. Это ж читерство чистой воды

Только вчера подумал как написать, а тут уже есть. Молодец.

Источник:
http://open-budget.ru/public/144251/