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

Чтобы играть в «морской бой» участникам следует взять по листку бумаги в клеточку и начертить на них по два поля боя. Размеры их – 10 на 10 клеточек, два квадрата. Одно поле для расположения на нем своих кораблей.

Второе – для того, чтобы отмечать результаты попаданий или промахов по кораблям противника. Верхняя часть квадратов размечается буквами алфавита, по горизонтали; вертикаль слева – цифрами. Так, каждая выбранная точка будет иметь координаты: 1а или 9г.

Чем больше попаданий в цель на поле противника, тем ближе победа и играть в «морской бой» становится интереснее.

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

У каждого игрока одинаковое количество кораблей, которые имеют разные размеры. Тем занимательнее играть в «морской бой», чем разнообразнее будет расстановка «вооруженных сил» на поле. У каждого игрока будет по десять кораблей:

  • Четыре корабля с одной палубой,
  • Три — с двумя,
  • Два — с тремя палубами,
  • Один — самый большой, четырехпалубный.

Располагать свои корабли только по клеткам: по вертикали или горизонтали – никакого касания углами. Между кораблями должно быть оставлено расстояние — одна клетка. Если все подготовлено участниками, то можно начинать играть в «морской бой».

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

Игровые поля во время боя — закрыты: противники не должны видеть, как расположены корабли. Первый, кто начинает сражение, называет координаты точки, отмечая ее у себя на втором поле. Если попадает, то помечает квадрат крестиком. В противном случае – точкой. Играть в «морской бой» следует до первого промаха. Промахнулся — ход переходит ко второму участнику.

Участники находят координаты называемых точек и сообщают противнику: «попал», «мимо», «ранил». Так, происходит «стрельба». Участники продолжают играть в «морской бой» до момента, когда у одного не будут подбиты все корабли.

Как играть в военные игры на листе бумаги: танки и морской бой. Правила, подробное описание с фото.

Игры на листе бумаги для двоих: танчики и морской бой

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

И если игра «Морской бой» знакома почти всем людям в нашей стране, чье детство пришлось на 80 — 90-е годы или раньше, то игра на бумаге в танки, или как ласково называли ее многие, «Танчики», была известной, но не настолько.

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

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

Эти игры и сейчас помогут детям увлекательно и с пользой провести время. Польза этих игр не только в том, что это живое общение, способ заняться чем-то интересным, отвлечься от чего-то, расслабиться. Для дошкольников это способ подготовить руку к письму, в игре «морской бой» повторить некоторые буквы и числа.

Еще игра в танки развивает глазомер, а игра в морской бой позволяет потренировать интуицию, учит находить на игровом поле квадрат с заданными координатами (правда, одна из них обозначена буквой), дает возможность разработать собственную стратегию ведения боя, попытаться разгадать стратегию соперника, представить, как он мыслит, как мог расставить свои корабли.

Танки (танчики) — игра на бумаге. Правила

Для знакомства с игрой начинающим игрокам и младшим детям желательно взять двойной тетрадный лист в клеточку (его вырывают из середины тетради).

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

Получится красивее и нагляднее, если цвета, которыми пишут ручки соперников, отличаются, но можно, чтобы они были одинаковыми.

Подготовка к игре

Сгиб — это граница. С одной стороны листа расположена территория одного участника, с другой — другого. Каждый участник рисует свои танки на своей стороне листа.

О количестве танков договариваются заранее, оно должно быть одинаковым (от 5 до 10 штук у каждого). Танки должны быть небольшими, примерно 1х2 клетки.

Лучше рисовать их подальше от границы и друг от друга — так сопернику будет сложнее в них попасть.

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

До начала обстрела договориться о правилах.

Правила игры «Танки»

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

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

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

Морской бой — игра на бумаге. Правила

Сейчас в «Морской бой» можно играть и в компьютерном, и в настольном варианте, тем не менее, простой классический бумажный вариант пока еще не забыт. Игра позволяет почувствовать себя военачальником, в ней нужно задавать координаты для обстрела флота противника и продумывать расположение кораблей своего флота так, чтобы уничтожить флот другого участника раньше, чем он уничтожит ваш.

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

Подготовка к игре

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

Например, в моем детстве и я, и все мои друзья и знакомые, с которыми мы играли в «Морской бой», рисовали трехклеточные и четырехклеточные корабли в произвольном порядке: в форме прямоугольников, буквы «г», буквы «z», квадрата. А оказывается, по правилам классического варианта игры это недопустимо — корабли могут быть расположены только ровно, без изгибов.

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

Игровые поля игры «Морской бой»

Для игры «Морской бой» каждому из участников потребуются листок бумаги в клеточку и ручка (можно карандаш или фломастер).

Перед игрой участники чертят на своем листочке два квадрата со сторонами 10 клеток.

В клеточках слева от каждого квадрата по вертикали сверху вниз должны быть расположены числа от 1 до 10 в порядке возрастания, а над каждым квадратом по горизонтали слева направо — буквы от «А» до «К», за исключением букв «Ё» и «Й». Т.е. вот такой ряд: «А Б В Г Д Е Ж З И К». Иногда вместо букв алфавита по горизонтали пишут слово, состоящее из десяти неповторяющихся букв.

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

В первом квадрате каждый игрок располагает свой флот, во втором отмечает расположение флота соперника.

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

Форма, количество и расположение кораблей в игре «Морской бой»

Сколько кораблей должно быть в игре морской бой? В классическом варианте у каждого игрока 10 кораблей:

  • 1 шт. — 4 кл.,
  • 2 шт. — 3 кл.,
  • 3 шт. — 2 кл.,
  • 4 шт. — 1 кл.

Подробнее:

  • один корабль, состоящий из четырех клеточек — линкор (такие корабли еще называют четырехпалубными или четырехтрубными)
  • два корабля, состоящих из трех клеточек — крейсер (трехпалубный)
  • три корабля, состоящих из двух клеточек — эсминец (двухпалубный)
  • четыре корабля, состоящих из одной клетки — подводная лодка или торпедный катер (однопалубный)

Корабли должны быть расположены в ровный вертикальный или горизонтальный ряд без изгибов, и ни в коем случае не по диагонали. Строго запрещено располагать корабли так, чтобы они касались друг друга сторонами или углами. То есть между ними обязательно должно быть расстояние не меньше одной клетки. Корабли могут касаться сторон поля, в котором они расположены.

Очень важно, чтобы ни один из игроков не увидел расположение флота соперника.

Правила игры «Морской бой»

Первый игрок стреляет (называет координаты клеточки, в которой, как он предполагает, у соперника может оказаться корабль, к примеру, К-10).

Второй игрок на первом поле (поле со своими кораблями) находит эту клетку.

  • Если клетка пуста, второй игрок ставит в ней точку и говорит вслух: «Мимо». Первый игрок тоже отмечает эту клетку точкой, но на втором поле. Ход переходит ко второму игроку.
  • Если в этой клетке расположен средний или большой корабль, второй игрок ставит в ней крестик и сообщает: «Ранен», если маленький (однопалубный), то «Убит». Также «Убит» говорят в том случае, когда соперник попадает в последнюю целую (не отмеченную крестиком) палубу многопалубного корабля. Первый игрок в этой клетке на втором поле также ставит крестик и делает еще ход.

Игроки ходят по очереди, но после каждого меткого попадания игрок получает еще один ход. Выигрывает тот, кто первым взорвет все корабли другого участника. Когда игра окончена, участникам можно смотреть игровые поля друг друга.

Если победивший игрок нарушил правила, победителем считается другой игрок.

Возможные нарушения:

  • ошибся в подписи или размере полей
  • ошибся в форме, количестве или расположении кораблей
  • в ходе игры переместил корабль
  • пытался подсмотреть, как расположены корабли соперника и т.д.

Как играть в «Морской бой», чтобы выиграть

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

© Юлия Валерьевна Шерстюк, https://сайт

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

Размещение материалов сайта (изображений и текста) на других ресурсах без письменного разрешения автора запрещено и преследуется по закону
.

И снова Морской бой, но на этот раз об классической школьной игре, в которую играют на тетрадных листочках. История не сохранила сведений о том, кто и когда изобрел эту удивительную игру, но то, что в нее играли много поколений школьников Советского Союза, это факт.

Об этой игре слагали легенды и писали стихи, придумывали разные варианты боев и новые правила.

Не удивительно, что бум по Морскому бою продолжается и даже набирает новых оборотов, теперь можно играть не только с соперником, но и с компьютером, планшетом и даже с телефоном…

Совсем недавно, на нашем сайте, мы описывали , а сегодня поговорим о классических правилах игры Морской бой на бумаге. В классический вариант игры морской бой играют два человека. Для игры понадобятся два тетрадных листика в клетку и два карандаша или ручки.

Игроки берут по листочку бумаги и ручке и рассаживаются так, чтобы они не могли видеть листочки друг друга — это настоящая военная тайна и от скрытности позиций флота зависит судьбы целой компании.

Дальше игроки чертят по два квадрата размером 10 на 10 клеток и нумеруют вертикальную сторону, а по горизонтальной стороне пишут буквы алфавита. Следует обратить внимание на написание одинаковых букв у двух игроков, иначе игра будет испорчена.

Конечно, можно изменять расположения букв и цифр, можно увеличить или уменьшить размер игрового поля, но обязательным условием является то, что это нужно делать одинаково у двух игроков.

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

  • в классических правилах игры «Морской бой» корабли располагаются только по горизонтали или вертикале и не могут быть искривлены;
  • в классической игре «Морской бой» корабли не могут касаться друг друга ни сторонами не углами, между кораблями должно быть расстояние не менее чем в одну клетку;
  • в классической игре «Морской бой» каждый из игроков расставляет 10 (десять) кораблей разного размера:
    • 1-н (один) четырех-клеточный линкор;
    • 2-а (два) трех-клеточных крейсера;
    • 3-и (три) двух-клеточных эсминца;
    • 4-е (четыре) одно-клеточных подводных лодок или торпедных катеров (кому как больше нравится).

Корабли следует расставлять на левом квадрате, а правый будет использоваться для отметок вашей стрельбы, анализа обстановки и ведения огня по кораблям противника.

На рисунке изображен пример расстановки кораблей.

Внимание, если Вы решили изменить правила игры увеличить число кораблей, то необходимо увеличивать и размер игровых квадратов, иначе попросту не хватит места для расстановки кораблей.

Когда корабли расставлены, приходит время начинать морской бой и один из адмиралов, согласно жребия, делает свой первый выстрел.

Делается это так: игрок смотрит на правый квадрат и выбирает любое доступное для выстрела место и вслух называет его. Например: «е2» или «и9».

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

  • мимо (промах) — если эта точка пустая, в этом случае оба игрока отмечают на этом месте точку, что означает, по этим координатам уже стреляли и там корабля нет;
  • ранил — если это одно из мест, на котором стоит корабль и у этого корабля еще есть целые фрагменты корпуса, в этом случае делается отметка крестиком с началом линий в углах квадрата;
  • убил (потопил) — если на этом месте стоит одно-клеточная подводная лодка или другой корабль, у которого все фрагменты корпуса уже повреждены, в этом случае ставится крестик и весь корабль обносится точками, т.к. корабль потоплен, его координаты полностью определены, а по правилам морского боя на соседних клетках не могут находится другие корабли. Таким образом делается отметка и по этим координатам огонь больше вестись не будет.
Читайте также:  Округление чисел в excel как сделать

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

Внимание, при желании можно изменять правила игры и добавлять свои элементы. Например, некоторые вводят в игру одну или две морские мины. При попадании в такую мину, стреляющий игрок, должен назвать координаты любого своего не потопленного корабля.

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

Введение новых правил в игру разнообразит её и сделает более увлекательной, однако эти правила нужно тщательно продумывать и опробовать на практике.

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

На нашем сайте Вы можете найти другие , в которые можно играть со своими друзьями.

Источник: https://rst-music.ru/battleship-how-to-draw-a-field-how-to-play-sea-battle-on-paper/

Приемы работы в программе Excel | Блог Валерия Морозова

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

Коллеги, сегодня предлагаю Вашему вниманию практическое занятие в программе Excel. С чего-то надо же начинать! Мы, учителя физической культуры, практики, и готовы показать результаты своей работы, не «прибегая» к словам и объяснениям. Мы можем объяснить, а лучше всего показать то или иное техническое действие из любого раздела физической культуры. А, вот, написать, создать документ в той или иной программе – это не для нас.

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

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

Поверьте, что работа в программе Excel пригодится. Она не сложна и пугаться не стоит при виде Рабочей области.

  • Знакомство с программой начинается с окна.
  • Как сделать морской бой в excel?
  •  При входе в программу Вы видите окно Excel и на экран выводится пустая рабочая книга с именем Книга1 (Лист 1).

Рабочая область состоит из множества ячеек. Над ней располагается строка формул, чуть выше панель инструментов и строка меню. Каждая ячейка имеет свои координаты (как в игре «Морской бой») А1, В1 и так далее. Интерфейс программы я не буду далее объяснять, потому что на картинке все и так понятно показано.

Сейчас моя цель научить Вас создавать Рабочий листок класса, куда войдут:

  1. Список класса
  2. Зачетное упражнение, которое состоит из трех колонок: результат, очки и оценка.
  3. Сделаем первые шаги по введению формул.

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

Итак, открыли Лист 1, задали нужную ширину столбцов, (шрифт и размер шрифта можно выбрать в любое время).

Далее, объединить ячейки от А1 до D1 (чтобы ввести заголовок таблицы).

Выделить ячейки A2:D19 (можно выделять любое количество ячеек) для того, чтобы сделать рамку таблицы. Ввести заголовок, список класса, упражнение (на картинках все подробно расписано.

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

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

Формул в программе Excel, огромное количество и все их знать нет необходимости. На первых порах программа может сообщать Вам, что не правильно введена формула (т.е. ОШИБКА). Переживать не стоит.

Нужно внимательно пересмотреть введенную формулу: Буквы столбцов должны быть латинские и заглавные, пробелов между буквами, цифрами и знаками НЕТ и количество открытых скобок равняется количеству закрытых.

Вот формула:
=ЕСЛИ(B3=0;»»;ЕСЛИ(B3=190;B3=195; B3=200);5)))))

Попробую объяснить содержание ее: Эта ячейка D3 полностью зависит от введенных данных в ячейку В3. Нормативы по прыжкам в длину с места следующие: отметка 3 результат 190 см., отметка 4 — 195 см. и отметка 5 — 200 см.

Расшифровываю формулу: если ячейка В3 пустая, то в D3 тоже будет пусто. Если результат меньше 190, то отметка 2 (двойка). Если результат больше или равно 190 (>=190) и меньше 195 (=195) и меньше 200 см.

 (=200), то отметка 5 (пятерка).

  1. Чтобы ввести такую же формулу в другие ячейки (от D4 до D17), достаточно скопировать ячейку D3 , выделить ячейки от D4 до D17 и нажать копировать.
  2. Формула в ячейке D19 позволяет узнать среднюю оценку класса за выполненное упражнение: =СРЗНАЧ(D3:D17) 
  3. Чтобы выбрать ту или иную формулу достаточно нажать на этот значок
  4. Как сделать морской бой в excel?
  5.  Предположим, что Рабочий листок класса мы создали и заполнили текущие результаты триместра. Ниже представлена эта Таблица:
  6. Как сделать морской бой в excel?

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

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

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

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

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

Источник: http://mvpblog.ru/innovacii_v_obrazovanii/priemy-raboty-v-programme-excel.html

Чем заняться айтишнику в армии или как я на VBA игры писал

Как сделать морской бой в excel? Прошло уже больше двух месяцев с момента моей демобилизации. Я уже освоился на свободе, пришло время рассказать правду. Служил я в разведке!.. «Секретная» в/ч ОсНаз ГРУ. По распределению попал в отдел ЦРП (Центр радиоперехвата). Работенка не пыльная, сидишь ночами в наушниках и слушаешь врага. Но речь пойдет не об этом. У каждого оператора поста радиоперехвата (таковыми мы числились) был в распоряжении компьютер с подключенными к нему РПУ (радио-приемными устройствами). На компьютере стоял спецсофт + Excel. Все остальное было заблочено. После N-ного дежурства я стал скучать… Зачесались руки. Вспомнил, что когда-то имел дело с VBA. Никогда дальше написания простейшей функции не заходил. Решил посмотреть, что может получится при более детальном изучении. После ночи мучений я родил черепаху змею! Классическая змейка, реализованная путем закраски нужных ячеек. Была возможность создавать себе препятствия, опять же, просто закрашивая нужные ячейки. Как сделать морской бой в excel? После змейки было еще парочка небольших игрушек, но все это мелочи… Как сделать морской бой в excel? Сослуживцы ходили и клянчили, чтобы я им все это скинул, всем надоело играть в косынку. Способов сделать это я не знал. Порты USB отключены аппаратно. Но, как выяснилось, все компьютеры были объединены в локальную сеть. Запустив через Excel командную строку, я смог зайти на соседний компьютер и скинуть туда необходимые файлы. И тут меня осенило… Excel, VBA, чтение/запись файлов, локальная сеть… Смекаете?

Морской бой

Первую версию я реализовал так же путем закраски ячеек листа. Долгое время никому не показывал, отлаживали глубокой ночью с другом. Как сделать морской бой в excel? Все работало достойно, но прежде чем я выкатил игру в массы, увидел проект ребят, служивших до меня. Это был файловый менеджер, аккуратно спрятанный у начальника смены на компьютере, реализованный на формах: Как сделать морской бой в excel? Респект этим ребятам. До сего момента я не видел возможность использования форм на VBA. Не заметил сразу, да и не задумался над этим. Этой же ночью было решено переписать морской бой на формах. Код получился компактней, интерфейс дружелюбней, работоспособность выше. Как сделать морской бой в excel? Работа в отделе встала! Морской бой любят все… кроме меня. Ну не нравится мне эти глупые перестрелки. В общем, на нем я не остановился. Но, забегая вперед, скажу, что морской бой был самым популярным.

Bomber Man

Кто-то в шутку сказал «а слабо написать Bomber Man?». Вызов принят! Месяц неторопливых мучений и в свет вышел ОН. Как сделать морской бой в excel? Как сделать морской бой в excel? Миниатюрки отрисованы в Paint. Игра рассчитана на одновременное подключение 4-х человек с разных компьютеров. Приложение клиент-серверное. Сервер был запущен в отдельном приложении. Количество жизней не ограничено (я думаю, по количеству надгробий это понятно). Но все не так гладко, как кажется. При записи/чтении файлов возникали ошибки из-за одновременного обращения и добиться более 10 кадров в секунду мне не удалось. Если игра шла на двух человек, то все укладывалось в 25-30 кадров, но на четырех добиться хороших скоростей мне не удалось. Отсутствие интернета не дало возможности найти решение. Далее меня просили сделать танчики, но от разработки экшн игр, ввиду описанных выше проблем, я решил отказаться.

Texas Holdem Poker

Я очень люблю покер. В армии мне его сильно не хватало. Реализацию покера на 9 человек я видел не такой уж и сложной. Разве что над алгоритмами поиска собранной комбинации пришлось поломать голову, но это было интересно. Отсутствие интернета заставило поднапрячься. Одну ночь я потратил на отрисовку колоды карт. Другую на стол и фишки. А дальше начался процесс написания. Покер у меня получился быстрее Bomber Man. В одну из ночей мы оттестировали его на максимальное количество игроков, тесты прошли вполне успешно. Как сделать морской бой в excel? Но вот полноценно поиграть так и не удалось. Я заболел пневмонией. После возвращения в часть на боевые дежурства (за пост радиоперехвата) я больше не вернулся, и до дембеля ходил в наряды. Вообще говоря, это было очень опасное и кропотливое дело, не дай бог кто-то спалит за таким занятием, да еще на боевом дежурстве. Кто служил, тот поймет. За обычную косынку снимали с дежурств и ставили в наряды, а тут такое… Спасибо одному хорошему человеку за то, что скинул себе на флешку все эти скриншоты и переслал мне на почту. Оставлю себе на память.

Продолжение следует.

Источник: https://habr.com/post/237641/

Excel для игр? Почему бы и нет, 5 игр, в которые вы сможете сыграть в MS Excel

MS Excel – табличный процессор очень здорово выручает при выполнении широкого круга задач, от решения транспортных задач, или нахождения корней полиномов до фильтрации данных и моделирования экономических ситуаций, с помощью Excel можно даже писать программные решения. Но, если можно писать программы, то может можно и игры, ведь, по сути, игра – это та же программа. Абсолютно верное предположение, представляем Вашему вниманию шесть игр, написанных в Excel.

Чтобы запустить игру, необходимо наличие табличного процессора Excel, а также нужно разрешить выполнение макросов.

2048

Первая игра с незамысловатым названием 2048.

Суть игры заключается в том, чтобы собрать один квадрат с числом 2048, до того, как на поле закончатся пустые клетки, двигая поле в одном из четырех направлений за один ход, если рядом находятся квадраты с одинаковым числом, они сливаются. За каждый ход пользователя на поле появляется дополнительная клетка с минимальным числом «2». Игра очень затягивает, поэтому хорошенько подумайте, прежде чем запустить.

Ссылка, по которой можно закачать книгу excel с игрой.

Но это еще не все, если игра Вам пришлась по вкусу, но вы боитесь быть пойманным, все-таки, хоть игра и находится в среде Excel, объяснить, что это полезно по работе будет достаточно сложно, особенно в режиме 3D, поэтому есть версия, замаскированная под финансовый отчет.

Правила те же, только все действо осуществляется на поле G8:J12. Скачать замаскированную версию можно по ссылке.

Candy Number Crunch Saga

Здесь вы можете почувствовать себя трейдером на бирже прямо из книги Excel. Скрытой версии нет, но если удалить цветастые буквы, то можно притворится, что документ относится к работе (конечно, если вы не на стройке разгружаете кирпичи, а то вообще странно будет выглядеть).

Ссылка на файл Excel.

Монополия

Эта игра не нуждается в представлении, теперь для того, чтобы в нее играть Вам нужен только Excel.

  • Ссылка на файл Excel.
  • 3D лабиринт.

Трехмерным его можно назвать условно, но выглядит впечатляюще, интересно что дальше? Портирование DOOM в Excel? Не исключено.

Arena.Xlsm

Ролевая игра, выполненная в Excel, включает 2000 всевозможных противников, 1000 вариантов комбинации различных вещей, 31 заклинание и 4 концовки.

Скачать Arena.Xlsm можно по ссылке.

Источник: https://msoffice-prowork.com/excel-dlya-igr-pochemu-by-i-net-5-igr-v-kotorye-vy-smozhete-sygrat-v-ms-excel/

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

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

Читайте также:  Как сделать прогрессию в Excel 2007?

Возможно, игры и не исчезли, а просто их упрятали поглубже. Если вам известно, как запустить в 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). Обычно на нем пишут какие-нибудь полезные вещи — сложные расчеты, поиск объектов по определенному признаку, хитрое форматирование данных. Но никто не запрещает и игру написать.

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

Информатика. практика. Excel. Теория

Электронные
таблицы

С помощью электронных таблиц (ЭТ) можно
решать финансовые, экономические,
математические и статистические задачи.

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

При работе с ЭТ
практически исключается традиционное,
программирование
(например, с помощью процедурно-ориентированных
языков).

Другое равноправное
название электронной таблицы— табличный
процессор.

Первую электронную
таблицу VisiCalc
создали в 1979 г. Дэн Бриклин (Dan
Bricklin)
и Боб Фрэнкстон (Bob
Frankston).
В 1982 г. Мич Кейпор (Mitch
Карог) и Джонатан
Сачс (Jonathan
Sachs)
разработали другую удачную про грамму
Lotus
1-2-3. В 1987 г. фирма Microsoft
создала популярную в настоящее
время электронную таблицу MS
Excel.

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

Термины «лист» и «таблица» являются
практически синонимами.

Электронная таблица
состоит из столбцов и строк. Столбцы
чаще все го обозначаются заглавными
латинскими буквами (А, В, С, .., АА, АВ,
АС,..), а строки
— арабскими цифрами. Каждое пересечение
строки и столбца образует
«клетку» таблицы, которая может содержать
текст, число или формулу.

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

Заметим, что кроме
рассмотренного стиля маркировки ячеек,
который получил
название А1, существует стиль, при котором
вначале указывается порядковый
номер строки, а затем порядковый номер
столбца. Название это го стиля R1C1.

Формула = В2 + С4,
расположенная в ячейке В6 (см. предыдущий
ри сунок), означает, что нужно взять
содержимое ячейки В2, к нему прибавить
содержимое
ячейки С4 и результат поместить в ячейку
В6. Всякое изменение содержимого
ячеек В2 или С4 приведет к автоматическому
изменению результата в ячейке В6.

Пользователь может
задать любой ячейке собственное имя
и затем
использовать
его при расчетах. Например, =ВЗ+ИТОГ. В
данном случае од ной
из ячеек дано имя «ИТОГ». Использование
имен ячеек облегчает составление формул
и делает их более наглядными и
информативными. Например, следующая
формула говорит сама за себя:

  • =ДОХОД-РАСХОД
  • Формулы позволяют
    обрабатывать содержимое сразу нескольких
    ячеек (диапазона ячеек). Например,
    чтобы просуммировать содержимое ячеек
    В7, С7, D7, Е7, достаточно
    записать:
  • =СУММ(В7:Е7)
  • Формулы могут ссылаться на ячейки
    текущего листа, ячейки листов той же
    книги или ячейки других книг.
  • Диапазоном ячеек (также диапазоном
    ссылок) называются две или более ячейки,
    расположенные на одном листе.
  • Синтаксисом формул
    называется правила записи (структура)
    элементов, входящих в формулу.
  • Формулы содержат
    знак равенства (=), вычисляемые элементы
    (операнды) и операторы.
  • Операнды
    величины, с которыми оперирует (работает)
    ЭТ.

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

Константы
это величины, которые не изменяются в
процессе вычислений, например, число
4 или текст «Прибыль». При записи констант
перед ними знак равенства не ставится.

Ссылка
координата ячейки, ее адрес.

Заголовки — ключевые слова,
размещенные сверху столбца и слева от
строки, с помощью которых описываются
данные внутри блока данных. Заголовки
можно использовать при ссылке на
необходимые данные. В следующей
таблице заголовками являются слова:
Иванов, Петров, Сидоров, Фи зика,
Химия.

  1. Заголовки в ряде
    случаев делают обработку информации
    очень наглядной. Например, чтобы
    напечатать оценку Петрова по химии
    достаточно набрать формулу:
  2. =Петров Химия
  3. Пробел между
    заголовками является оператором
    пересечения диапазонов,
    который предписывает формуле вернуть
    значение из ячейки, находящейся на
    пересечении строки «Петров» и столбца
    «Химия».
  4. Создаются заголовки
    с помощью специальной процедуры, с
    которой можно
    ознакомиться по книгам, посвященным
    программе MS
    Excel.
  5. Функция
    это стандартная подпрограмма с уникальным
    именем, которая
    возвращает результат выполнения
    определенных действий над элементами,
    выступающими в роли аргументов. Например,
    функция
  6. =МАКС(А1:А5;ВЗ:В7) отбирает
    максимальное число среди чисел двух
    указанных диапазонов ячеек.

Функции облегчают выполнение стандартных
расчетов. Перед функцией ставится знак
равенства, а аргументы заключаются в
круглые скобки.

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

Операторами
обозначаются
операции, которые выполняются над
операндами. В
Microsoft
Excel
имеется четыре вида операторов:
арифметические,
текстовые, сравнения, а также адресные
операторы.

Арифметические
операторы
используются
для выполнения математических операций
над числами (сложение, вычитание,
умножение, деление, возведение
в степень, вычисление процентов).
Результатом выполнения арифметической
операции всегда является число.

Текстовой оператор
& (амперсант) позволяет объединить
последовательности
символов, находящихся в разных ячейках,
в одну последовательность.

Операторы сравнения
используются
для сопоставления двух чисел. К ним
относятся операторы: равно, больше,
меньше, больше или равно, меньше
или равно, неравно. Результатом выполнения
операции сравнения являются
логические значения ИСТИНА или ЛОЖЬ.

  • Например, следующая
    функция позволяет просуммировать числа,
    значения которых больше четырех:
  • =СУММЕСЛИ(А1:А7; «>4»)
  • Адресные операторы
    — двоеточие,
    запятая и пробел объединяют диапазоны
    ячеек.

Например, формула
=СУММ(А1:А7) говорит о том, что должно быть
просуммировано содержимое ячеек А1, А2, …, А7.

Формула

=МИН(В1:В5,С5:С9) отберет минимальное число
из ячеек двух указанных диапазонов.
Наконец, пробел в формуле =Иванов Физика
позволит вывести содержимое
ячейки, находящейся на пересечении этих
заголовков.

В настоящее время
широкое распространение имеет электронная
таблица MS
Excel,
которая представляет собой как бы
скоросшиватель (книгу), состоящую
из нескольких листов (таблиц).

Пользовательский
интерфейс программы MS
Excel
показан на предыдущем рисунке.

При обработке
числовых данных могут выполняться
арифметические операции (сложение,
вычитание, умножение и т. д.), а также
вычисляться многие математические
функции (определение среднего значения,
дисперсии, медианы,
нахождение максимального значения и
т. п.).

ЭТ обладают элементами искусственного
интеллекта.

Режим Автозаполнения
позволяет быстро ввести дни недели (от
понедельника
до воскресенья), причем достаточно
набрать на клавиатуре только первый
элемент, а остальные будут добавлены
автоматически по технологии Drag
and
Drop.
Аналогично можно ввести месяцы (от
января до декабря) либо другую
заранее подготовленную последовательность
элементов (например, фамилии).

Еще одна интересная
возможность ЭТ состоит в использовании
арифметических
и геометрических прогрессий для быстрого
заполнения большого числа ячеек.

Например, чтобы
ввести порядковые номера студентов,
достаточно указать только цифры 1 и 2.
Все остальные номера будут введены
автоматически. С помощью арифметической
прогрессии
легко
ввести, например, только четные (или
нечетные) номера.

За счет геометрической
прогрессии
просто
сформировать такие (и подобные)
последовательности чисел: 5; 20; 80; 320 или
1; 2; 4; 8; 16; 32.

ЭТ позволяют
«предсказывать»
результаты.
Например, если известны антропологические
параметры трех студентов, то можно
попытаться «угадать» параметры четвертого
студента, для которого известна только
часть параметров.

  1. Предположим, что
    рост студента 170 см, а вес неизвестен.
    Расчет веса можно произвести с
    помощью функции:
  2. =ПРЕДСКАЗ(170;{52;63;74};{152;163;174})
    В результате
    будет получен ответ: 70 кг.
  3. Расчеты в данном
    случае ведутся по методу наименьших
    квадратов, и исходная зависимость
    заменяется (аппроксимируется) уравнением
    прямой линии.
  4. В качестве аргументов здесь использованы
    два массива чисел, которые заключены в
    фигурные скобки.
  5. ЭТ дают возможность
    копировать или перемещать содержимое
    клетки в другие позиции (при этом
    используется принцип Drag
    and
    Drop).

Благодаря технологии OLE
(Object Linking
and Embedding)
имеется возможность
встраивать в клетки электронной таблицы
объекты, созданные, например,
в графическом редакторе. Таким образом,
ведомость с расчетом заработной платы
может содержать фотографии сотрудников.

Рассмотрим два важных понятия:
относительная и абсолютная ссылки.

На следующем рисунке
в ячейке С1 записана формула сложения
содержимого ячеек А1 и В1. При этом
использованы относительные ссылки.
Копирование этой формулы в ячейку С2
привело к автоматическому изменению
ссылок.

Вместо фор мулы =А1+В1 в ячейке
С2 появилась фор мула =А2+В2. В ячейке С4
записана фор мула сложения, в которой
использованы абсолютные ссылки.
Легко заметить, что добавлены знаки
долларов.

Копирование этой формулы в
ячейку С5 не привело к изменению этой
формулы.

Понятно, что использование относительных
и абсолютных ссылок дает разные
результаты. Это иллюстрирует следующий
рисунок.

Таким образом,
абсолютная
ссылка
— это
использующаяся в формуле
ссылка, которая не изменяется при
копировании в другую ячейку.

Относительная
ссылка
— это
ссылка, которая изменяется при копировании
формулы.

Источник: https://studfile.net/preview/5388782/

Реализация игры "Морской бой"

Реализация игры «Морской бой»

Прежде, чем приступить к изучению алгоритмов игры в Морской бой советую Вам ознакомиться с базовой литературой, которая поможет Вам освоить азы программирования, чувствовать себя уверенно при изучении программного кода и научить самостоятельно разрабатывать сложные алгоритмы.

Эта небольшая статья может оказаться интересна тем, кто увлекается программированием и хочет узнать новые алгоритмы или решения новых задач. Речь пойдет о реализации игры «Морской бой» (подобной той, что можно скачать) на Делфи, а точнее, на Паскале, т.к.

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

Выбор пал именно на Паскаль по двум причинам: во-первых, игра была написана на нем; во-вторых, он наиболее нагляден и идеально подходит для представления алгоритмов. Сразу оговорюсь, что полный исходный текст программы выложен не был, т.к.

эту игру я писал достаточно давно, когда еще учился в школе, и код получился достаточно запутанным и непонятным (тогда я так писал). Тем не менее, если Вам очень нужны исходники, напишите мне, и я вышлю их по мылу.

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

Читайте также:  Как сделать ссылки постранично в word?

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

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

type TPole = array[1..10,1..10] of Integer; var Pole: TPole;

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

procedure Init (var Pole: TPole); var X, Y: Integer; begin   Randomize;  for X := 1 to 10 do     for Y := 1 to 10 do       Pole[X,Y] := -1;end; {proc Init}

По правилам игры два корабля не могут соприкасаться друг с другом, т.е. между ними должно быть пустое пространство минимум в одну клетку.

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

И только если все они не заняты можно дать положительный ответ (True), в противном случае — отрицательный (False):

function Freedom (x, y: Integer; Pole: TPole): Boolean; const d: array[1..8,1..2] of Integer =       ((0,1),(1,0),(0,-1),(-1,0),(1,1),(-1,1),(1,-1),(-1,-1));var i: Integer;     dx, dy: Integer;begin   if (x > 0) and (x < 11) and (y > 0) and (y < 11) and (Pole[x,y] = -1) then   begin     for i := 1 to 8 do     begin       dx := x + d[i,1];       dy := y + d[i,2];      if (dx > 0) and (dx < 11) and (dy > 0) and (dy < 11) and (Pole[dx,dy] > -1) then       begin         Result := False;         Exit;      end; {if}     end; {for}     Result := True;  end else Result := False; end; {func Freedom}

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

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

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

procedure Ships (var Pole: TPole); var N, M, i: Integer;     x, y, kx, ky: Integer;     B: Boolean;begin   Init (Pole);  for N := 3 downto 0 do     for M := 0 to 3 — N do     repeat       x := Random (10) + 1;       y := Random (10) + 1;       kx := Random (2);      if kx = 0 then ky := 1                 else ky := 0;       B := True;      for i := 0 to N do         if not Freedom (x + kx * i, y + ky * i, Pole) then B := False;       if B then         for i := 0 to N do           Pole[x+kx*i,y+ky*i] := 0;    until B; end; {proc Ships}

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

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

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

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

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

Если Вы не знаете теорию автоматов, то можете прочесть соответствующую литературу, ссылку на которую можно найти в моем списке литературы. Можно выделить три состояния:

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

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

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

var Play: TPole;     Kor: array[1..4] of Integer;     State: Integer;// состояние автомата     Len: Integer;// кол-во подбитых палуб текущего корабля     Pkx, Pky: Integer;// направление удара     Px, Py: Integer;// позиция попадания

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

procedure Start; var I: Integer; begin   Init (Play);   Ships (Pole);   State := 1;  for I := 1 to 4 do     Kor[I] := 5 — I;end; {proc Start}

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

function MaxShip: Integer; var i: Integer; begin   for i := 1 to 4 do     if Kor[i] > 0 then Result := i; end; {func MaxShip}

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

function GameOver: Boolean; var I: Integer; begin   for I := 1 to 4 do     if Kor[I] > 0 then     begin       Result := False;       Exit;    end; {if}   Result := True;end; {func GameOver}

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

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

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

Приведем код описанной функции:

function State1 (var x, y: Integer): Boolean; var k, i, n, m: Integer;     B: Boolean;     tmp: Integer;begin   repeat     repeat       x := Random (10) + 1;       y := Random (10) + 1;    until Freedom (x, y, Play);     Pkx := Random (2);     Pky := Pkx — 1;    for m := 1 to 2 do     begin       i := 0;       k := 0;      for n := 1 to 2 do       begin         while Freedom (x + Pkx * i, y + Pky * i, Play) do         begin           Inc (k);           Inc (i);

  •         end; {while}
  •       end; {for}
  •       if B then Break;
  •     end; {for}

        Pkx := -Pkx;         Pky := -Pky;         i := 1;       B := k >= MaxShip;       tmp := Pkx;       Pkx := Pky;       Pky := tmp;   until B;   Result := Killed (x, y);  if Result then   begin     Px := x;     Py := y;     Len := 1;    if MaxShip > 1       then State := 2       else Dec (Kor[Len]);   end; {if} end; {func State1}

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

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

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

Посмотрим, как все это выглядит:

function State2 (var x, y: Integer): Boolean; var Old: ShortInt;     tmp: Integer;     k: Integer;begin   Old := Play[Px,Py];   Play[Px,Py] := -1;  repeat     if not Freedom (Px + Pkx, Py + Pky, Play) and not Freedom (Px — Pkx, Py — Pky, Play) then     begin       tmp := Pkx;       Pkx := Pky;       Pky := tmp;    end; {if}     if Random (2) = 0 then     begin       x := Px + Pkx;       y := Py + Pky;    end else     begin       x := Px — Pkx;       y := Py — Pky;    end; {if}   until Freedom (x, y, Play);   Result := Killed (x, y);  if Result then   begin     Len := 2;     State := 1;    if MaxShip > 2       then State := 3       else Dec (Kor[Len]);   end else   begin     k := 4;    if not Freedom (Px + 1, Py, Play) then Dec (k);     if not Freedom (Px — 1, Py, Play) then Dec (k);     if not Freedom (Px, Py + 1, Play) then Dec (k);     if not Freedom (Px, Py — 1, Play) then Dec (k);     if k < 2 then State := 1;   end; {if}   Play[Px,Py] := Old;end; {func State2}

Расстрел. На предыдущем шаге удалось установить в каком направлении размещен пойманный корабль. Теперь задача заключается в его полном уничтожении.

Для этого надо стрелять справа или слева (сверху или снизу) подбитых палуб, пока не добьем его целиком, после чего вернемся в состояние прострела.

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

function State3 (var x, y: Integer): Boolean; var Old: ShortInt;     i: Integer;     B: Boolean;begin   for i := 1 to 2 do   begin     x := Px;     y := Py;    while Play[x,y] = 1 do     begin       Inc (x, Pkx);       Inc (y, Pky);

  1.     end; {while}
  2.     if B then Break;
  3.   end; {for}

    Old := Play[x-Pkx,y-Pky];     Play[x-Pkx,y-Pky] := -1;     B := Freedom (x, y, Play);     Play[x-Pkx,y-Pky] := Old;     Pkx := -Pkx;     Pky := -Pky;   if B then   begin     Result := Killed (x, y);    if Result then     begin       Inc (Len);      if Len = MaxShip then       begin         Dec (Kor[Len]);         State := 1;      end; {if}     end;   end else   begin     Dec (Kor[Len]);     State := 1;     Result := State1 (x, y);  end; {if} end; {func State3}

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

procedure Comput; var x, y: Integer;     Kill: Boolean;begin   repeat     case State of       1: Kill := State1 (x, y);       2: Kill := State2 (x, y);       3: Kill := State3 (x, y);    end; {case}     if Kill then Play[x,y] := 1             else Play[x,y] := -2;   until not Kill or GameOver; end; {proc Comput}

Можно заметить, что функция Killed вызывается ровно один раз при каждом ходе компьютера. От сюда следует, что компьютер не подглядывает расположение кораблей игрока, т.к. другой возможности узнать о состоянии какой-либо ячейки поля юзера у него нет.

В этом можно убедиться на практике, собрав все эти части кода вместе и сделав консольное приложение, в котором функция Killed спрашивала бы у игрока, попал компьютер или промазал. Все это легко с минимальными изменениями реализовать на Turbo Pascal 7.

0, готовый вариант можно скачать (8K), в архиве исходный текст и откомпилированная программа.

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

Остается пожелать Вам удачи в реализации данной игры и в разработке новых программ!

Источник: http://aka-alex.narod.ru/seabattle.htm

Ссылка на основную публикацию
Adblock
detector