Программирование игр для word

Вступление

Все мы знакомы с Excel. Вот и я, душный банковский служащий, что-то да слышал об этом инструменте.

Одни люди умеют лишь форматировать ячейки, другие создают клоны Doom, используя встроенный в Microsoft Office язык программирования.

Я не претендую на второй тип, но и к первым себя не отношу. Для меня Visual Basic for Applications, или VBA, стал тем первым ЯП, который заинтересовал и позволил уверовать в свои силы. Путешествие в этот интересный мир началось с автоматической записи макросов и разбора созданного программой кода.

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

Однако наступил такой момент, когда все рабочие задачи оказались решены и автоматизированы, а внутреннему программисту (ха-ха) все ещё хотелось чего-то большего.

Эта серия статей не была задумана как обучающая (ведь я сам ещё учусь), но если что-нибудь изложенное будет полезно начинающим программистам, которые только погружаются в мир Visual Basic, то считайте, что я пополнил интернет одной полезной ссылкой.

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

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

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

В этих статьях я буду описывать процесс создания игр в Excel, начиная с простейших пятнашек и заканчивая глобальной RPG. Это позволит мне больше углубиться в тему, а вам поглумиться над неумехой-программистом. Или, в лучшем случае, забрать готовое решение на работу и скрывать безделье за мнимой подготовкой отчета. Ссылки на все исходные материалы будут в свободном доступе.

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

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

Итак, хватит грофомании! ПЯТНАШКИ.

Первым делом…

Необходимо определиться с игровым полем. В данном случае все просто. Что есть пятнашки? Диапазон размером 4 на 4 ячейки, что в сумме даёт 16 ячеек. Переименовываем первый лист (по желанию), приводим нужные ячейки к квадратной форме и декорируем, как душе угодно. Получается примерно следующее:

Формирование игрового поля

На этом этапе необходимо в случайном порядке расположить числа от 1 до 15, а также пустое поле на выбранном диапазоне. Для этого открываем окно редактирования кода (Alt + F11), добавляем простой модуль (при желании и его можно переименовать для красоты).

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

Public rngPlayField As Range

Sub initializeField()

Dim collNumbers As New Collection, countNumbers As Byte, rndNumber As Byte, fndCells As Range

Set rngPlayField = Sheets(«MAIN»).Range(«B2:E5») ‘игровой диапазон

For countNumbers = 1 To 16 ‘формируем коллекцию чисел

collNumbers.Add countNumbers

Next

For Each fndCells In rngPlayField.Cells ‘цикл для каждого элемента на игровом поле

rndNumber = Application.WorksheetFunction.RandBetween(1, collNumbers.Count) ‘случайное число от 1 до количества элементов в коллекции
fndCells.Value = collNumbers.Item(rndNumber) ‘значение ячейки = случайное число из коллекции
collNumbers.Remove rndNumber ‘удаляем использованное число из коллекции

Next

Call decorateField ‘вызываем декорирование поля

End Sub

Сперва метод создаёт коллекцию чисел от 1 до 16.

Я заметил особенность, что в VBA в большинстве случаев удобнее пользоваться коллекциями элементов, чем одномерными массивами. В моей практике были и такие случаи, когда приходилось использовать коллекции массивов (возможно, из-за моей некомпетентности).

InitializeField() запускает цикл For Each, который распространяется на каждую ячейку нашего диапазона. На первом этапе цикла программа рассчитывает случайное число от 1 до значения размера нашей коллекции (в настоящий момент 16) и помещает в первую ячейку диапазона число, хранящееся в коллекции под полученным случайным индексом.

Далее цикл удаляет из коллекции использованное число и переходит к следующей ячейке.

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

UPD. Уже в процессе написания статьи я выяснил, что не все комбинации, полученные таким образом, изначально решаемы. Тогда мной в ускоренном темпе был написан код, который сперва формирует правильное поле от 1 до 16, а затем в стиле песков времени разбирает пятнашки в течении 300 ходов (что мы собственно и делаем в реальной жизни, когда хотим «рестартнуть» игру). Направление движения «костяшки» рассчитывается случайным образом.

Sub createRightField()

Dim countNumbers As Byte, fndCells As Range, countMoves As Integer, byteRndDir As Byte, fndRndRange As Range

countNumbers = 1

For Each fndCells In rngPlayField.Cells ‘заполняем поле значениями от 1 до 16

fndCells.Value = countNumbers
countNumbers = countNumbers + 1

Next

While countMoves < 300

byteRndDir = 3 * Rnd() + 1 ‘ 1 — up, 2 — down, 3 — left, 4 — right

For Each fndRndRange In rngPlayField.Cells

If fndRndRange.Value = 16 Then

Select Case byteRndDir ‘выбор направления

Case 1

If fndRndRange.Offset(-1, 0) <> «» Then

fndRndRange.Value = fndRndRange.Offset(-1, 0)
fndRndRange.Offset(-1, 0) = 16
countMoves = countMoves + 1

End If

Case 2

If fndRndRange.Offset(1, 0) <> «» Then

fndRndRange.Value = fndRndRange.Offset(1, 0)
fndRndRange.Offset(1, 0) = 16
countMoves = countMoves + 1

End If

Case 3

If fndRndRange.Offset(0, -1) <> «» Then

fndRndRange.Value = fndRndRange.Offset(0, -1)
fndRndRange.Offset(0, -1) = 16
countMoves = countMoves + 1

End If

Case 4

If fndRndRange.Offset(0, 1) <> «» Then

fndRndRange.Value = fndRndRange.Offset(0, 1)
fndRndRange.Offset(0, 1) = 16
countMoves = countMoves + 1

End If

End Select

End If

Next

Wend

Call decorateField

End Sub

Имитация движения «костяшек» по игровому полю

Сперва создаём обработчик события нажатия на определенную ячейку. Для этого в модуле листа, на котором расположено игровое поле, формируем метод Worksheet_SelectionChange и пишем в нем следующий код. Переменная Target при этом содержит адрес выбранной ячейки.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Set rngPlayField = Sheets(«MAIN»).Range(«B2:E5»)

If Target.Cells.Count > 1 Then

Exit Sub

ElseIf Not Application.Intersect(rngPlayField, Target) Is Nothing Then ‘считывает вхождение нажатой ячейки в игровое поле

Call moveCells(Target)

End If

End Sub

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

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

В основном модуле в методе moveCells(byVal rngCell as range) пишем следующее:

Sub moveCells(ByVal rngCell As Range) ‘процедура нажатия на ячейку с числом

Dim checkCells As Integer

For checkCells = -1 To 1 Step 2 ‘цикл для проверки ячеек слева/справа и сверху/снизу от выбранной ячейки

If rngCell.Offset(checkCells, 0).Value = 16 And Not Application.Intersect(rngPlayField, rngCell.Offset(checkCells, 0)) Is Nothing Then ‘проверка сверху/снизу

rngCell.Offset(checkCells, 0).Value = rngCell.Value
rngCell.Value = 16

ElseIf rngCell.Offset(0, checkCells).Value = 16 And Not Application.Intersect(rngPlayField, rngCell.Offset(0, checkCells)) Is Nothing Then ‘проверка слева/справа

rngCell.Offset(0, checkCells).Value = rngCell.Value
rngCell.Value = 16

End If

Next

Call decorateField ‘ вызываем декорирование поля

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

Декорирование игрового поля и проверка победы в методе decorateField()

Создаём в рабочей книге второй лист и размещаем на нем победный вариант. Пример:

Далее пишем следующий код:

Sub decorateField() ‘декорирует и проверяет на победу

Dim fndZero As Range, rngRightData As Range, countRows As Byte, countColumns As Byte, countRight As Integer

Set rngRightData = Sheets(«DATA»).Range(«A1:D4») ‘диапазон с правильными значениями

For countRows = 1 To 4

For countColumns = 1 To 4

If rngPlayField.Cells(countRows, countColumns) = rngRightData.Cells(countRows, countColumns) rngPlayField.Cells(countRows, countColumns) <> 16 Then ‘декорирование правильной позиции

With rngPlayField.Cells(countRows, countColumns)

.Interior.Color = RGB(0, 150, 0) ‘vbGreen показался мне слишком ярким
.Font.Color = vbWhite

End With

countRight = countRight + 1

Else

With rngPlayField.Cells(countRows, countColumns)

.Interior.Color = xlNone
.Font.Color = vbBlack

End With

End If

Next

Next

For Each fndZero In rngPlayField ‘цвет шрифта для нуля

If fndZero = 16 Then

fndZero.Font.Color = vbWhite

End If

Next

If countRight = 15 Then ‘проверка победы

MsgBox «Победа!», vbExclamation, «Победа»

End If

End Sub

Данная программа с помощью цикла проверяет значение каждой ячейки игрового поля на соответствие аналогичной ячейке поля с победной расстановкой значений и закрашивает правильные варианты в зелёный цвет. И наоборот. Далее метод проверяет поле на наличие числа 16 (которое имитирует пустую «костяшку», не забываем) и устанавливает для шрифта белый цвет. Последний момент: проверка победы. При каждом совпадении каких-либо чисел с правильной позицией увеличивается переменная countRight, и когда ее значение станет равно 15, игра сообщит о победе.

ЭПИЛОГ

В итоге должно получиться примерно следующее:

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

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

Сейчас же я считаю, что на этом можно остановиться.

Следующая статья выйдет When it’s done. Скорее всего в течение недели.

Время на прочтение
7 мин

Количество просмотров 8.1K

Картинка pch.vector, freepik

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

Однако если подобная деятельность производится с некоторой периодичностью, пытливый ум сразу начинает думать о способах оптимизации своего труда. Одним из таких способов является программирование в среде Visual Basic for Applications,- среде разработки, которая встроена в известные офисные продукты: Word, Excel, PowerPoint и т.д. Статья больше вводная, для тех, «кто совсем не в теме» :-).

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

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

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

В открывшемся окне перейти в настройку ленты:

Далее, в правом окне, под названием «Основные вкладки», поставить галочку рядом с опцией «разработчик»:

В результате этих действий на ленте сверху у вас появится вкладка «разработчик»:

Войдя в которую, в левой части, вы как раз и сможете найти две интересующие нас опции: «Visual Basic» и «Макросы»:

Соответственно, далее если мы нажимаем на кнопку «Запись макроса», то мы сможем записать нашу последовательность действий:

Созданный макрос можно сохранить либо в конкретном документе, либо сделать его доступным для всех документов (если сохраним его в шаблоне normal.dotm):

После чего, записанный макрос может быть воспроизведён, если мы перейдём, нажав на кнопку «Макросы»:

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

Здесь существуют 2 опции:

  • правка кода уже имеющегося макроса
  • написание кода с нуля.

Для первого случая, нам нужно перейти нажав на «макросы», для того чтобы открылась окно выбора макроса и нажать на кнопку «отладка»:

Это приведёт к запуску среды разработки, где вы сможете увидеть свой записанный макрос в виде кода. Кстати говоря, это является одним из интересных лайфхаков, когда недостаточное знание программирования на VBA вы подменяете сгенерированным кодом макроса и реверс-инжинирингом, с попыткой вникнуть, «а как оно там внутри устроено?»:

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

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

Список готовых макросов можно вызвать нажатием сочетания клавиш ALT+F8.

Visual Basic for Applications(VBA)
Как мы уже говорили, разработка кода для приложений Office ведётся с использованием специального кода, который является версией интерпретируемого языка Visual Basic (несколько упрощённой его версией).

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

Это означает, что теоретически, вы можете на VBA написать программу, которая будет использовать, например, средства Photoshop или Corel Draw, если конечно они установлены у вас на компьютере (однако, есть подозрение, что для этого потребуется более расширенная версия языка, чем тот, который идёт в комплекте с пакетом Office).

В рамках VBA объекты представлены в виде иерархии: Application/Document/Paragraph и т.д., то есть, как можно видеть в этой строке, каждый предыдущий — содержит последующий.

Получается своего рода «матрёшка», где одно вложено в другое и, если задуматься, это достаточно логично.

Например, главным объектом является Application. Создание этого объекта, другими словами, означает просто запуск Word. Но программа сама по себе никому не интересна, необходимо, чтобы внутри этой программы был создан или открыт некий документ (объект Document). В свою очередь, этот объект содержит целый ряд других элементов иерархии, которые служат для задания его параметров и оформления.

Согласно этому источнику, несмотря на то, что Word содержит множество объектов, по большому счёту, для успешной работы достаточно понимания всего лишь 5 объектов:

  • Application
  • Document
  • Selection
  • Range
  • Bookmark

Логика здесь следующая:

  • мы запустили Word (Application),
  • создали или открыли в нём документ(Document),
  • дальнейшие манипуляции в этом документе происходят либо с постановкой курсора в определенное место, либо с выделением определённого места в документе(Range).

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

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

Более подробно о их сути вы можете почитать вот здесь.

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

Вкратце, любая программа на Visual Basic представляет собой сочетание приложения (в нашем случае Word), среды разработки и модулей.

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

Для создания модуля, всего лишь нужно перейти в соответствующий шаблон (например, если мы создаём модуль, который должен быть доступен для всех документов, мы создаём его в шаблоне Normal). Для этого нажимаем на папке Microsoft Word Objects — правой кнопкой мыши и проходим по пути:

Модули могут быть представлены двумя видами:

  • подпрограммы
  • функции (предназначены для вычисления конкретного значения).

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

Sub имя_подпрограммы ([Параметры])
Тело подпрограммы
End Sub

Структура функции выглядит следующим образом:

Sub имя ([Параметры])
Тело функции
имя=выражение
End Sub

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

Sub TextFinder ([Параметры])
Тело функции
TextFinder=Selection.Find.found
End Sub

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

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

Visual Basic for Applications является объектно-ориентированном языком программирования и полностью поддерживает постулаты этой концепции.

Типичная команда выглядит как разделённая точками в стиле ООП, где мы спускаемся по иерархии в самый низ, — до конкретного действия:

Application.ActiveDocument.PageSetup.Orientation = wdOrientLandscape

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

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

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

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

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

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



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

Но тут есть один нюанс: как вы могли видеть выше, программа начинает исполняться с самого начала. Но программа может быть достаточно длинной! Как сделать так, чтобы можно было провести, условно говоря, «юнит-тест» участка программы, который находится не в самом начале?

Для этого нужно всего лишь кликнуть в серую зону слева от программы — и там появится красная метка. Она означает то место, с которого стартует выполнение кода. Теперь, если мы нажмём на F8, — начало исполнения перескочит на эту метку:


Вообще говоря, программирование на VBA может быть достаточно мощной штукой, так как позволяет не только писать некие простые макросы, но даже и создать свой программный продукт, для генерации каких-либо отчётов или форм (и не только). Да, конечно, я сам имею такую слабость, — не желая изучать имеющиеся у продукта инструменты, пытаюсь решить проблему собственными знакомыми костылями (ну, знаю я, например, Java, — значит, буду решать проблему в рамках этого языка, игнорируя встроенные возможности Word). Однако, это не совсем правильный подход, так как «ученье — свет» :-).

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

P.S. Вот мы тут гоняемся за интеллектуальными IDE, модными актуальными языками… А может вот оно, а? :-)

Будет очень интересно почитать в комментах, если кто то из читателей использовал неким интересным образом программирование под word в VBA и какие результаты это дало!

В двух словах изложу свой опыт: приходилось использовать достаточно продвинутые макросы для написания документации по компьютерному железу. Макросы позволяли «одним кликом» форматировать гигантскую таблицу с параметрами (регистры, поля регистров и их описание и т.д.). Форматировать хитро: первую строку выделить, первый столбец — искать в каждой строке диапазон битов регистра, вида [12:0], если найдено — применить стиль; такая же сложная логика форматирования по всей таблице (поиск определённых участков и их оформление. Скажем, таблица на 50 строк форматировалась… Секунд 15-20. Вручную — до бесконечности (в зависимости от лени и загруженности работой). Так что, макросы имеют право на жизнь!

Программная реализация логической игры ‘Сапер’

Введение

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

В этой курсовой работе мы остановились на обзоре операционной
системы Windows, в частности офисного пакета Microsoft Office и использовании
языка Visual Basic for Application в нем.

Этот язык позволяет создавать приложения, выполняемые в среде
Microsoft Office. Это могут быть разнообразные аналитические программы,
финансовые системы, программы учета кадров, системы автоматического создания
официальных писем / документов с помощью библиотеки готовых шаблонов,
логические игры и т.п. При этом интерфейс создаваемой программы может быть
совершенно непохожим на интерфейс того приложения, в котором она
написана.сочетает в себе практически неограниченные возможности с простотой
изучения и использования. Теперь большинство функций можно описать, не прибегая
к программированию. В том случае, если возможностей языка недостаточно, можно
обратиться к API-функциям Windows. Пожалуй, самое главное достоинство VBA в
том, что этот язык является единым для всех офисных приложений Microsoft и
поэтому позволяет связывать их между собой.

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

Объектом исследования является развитие памяти
и мышления.

Предметом исследования является программная
реализация логической игры «Сапер».

Цель курсовой работы: разработка логической игры
«Сапер» с использованием табличного процессора Excel объектно-ориентированного
языка VBA.

Для достижения цели исследования поставим перед собой
следующие задачи:

осуществить выбор языка и среды программирования;

разработать программную реализацию логической игры «Сапер»;

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

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

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

В первом разделе «Теоретические основы
проектирования логической игры «Сапер» описывается понятие логической
игры, ее особенности, выбирается технология, язык и среда программирования.

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

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

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

В приложении находится разработанная
логическая игра «Сапер», которая записана на цифровом носителе (CD-RW).

1. Теоретические основы проектирования логической
игры «Сапер»

1.1    Понятие логической игры,
ее особенности

программирование игра
приложение

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

Разработано множество игр, которые помогут углубить свои
познания в той или иной области, научат действовать в различных ситуациях,
поспособствуют формированию усидчивости, сосредоточенности, внимательности,
тренируют способность к логическому мышлению, пространственному воображению,
планированию и умению учиться на ошибках [12].

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

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

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

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

Написанный специально для Windows Робертом Доннером и Куртом
Джонсоном, «Сапер» стал настоящим расточителем человеческих временных ресурсов.
Спорить с этим бесполезно. Игра, появившаяся как самостоятельный продукт в 1990
году (до сапера игры подобного жанра были известны на ЭВМ ещё в 60-х годах
прошлого века), стала дополнением пакета развлечений. А вот уже в Windows 3.1
«Сапер» стал незаменимым атрибутом операционной системы [2].

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

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

1.2    Обоснование выбора языка и среды
разработки приложения

В последнее время все более и более возрастает значимость
разработки приложений на базе электронных таблиц Excel — продукта с высокой
степенью программируемости из-за поддержки VBA. Таким образом, для
разработчиков приложений важными являются следующие возможности использования VB в среде MS Excel:

файловая структура. Ориентация на многолистовую структуру
позволяет легко организовывать элементы приложения и хранить его в единственном
файле;

VBA — это макроязык, позволяет создавать
структурированные программы непосредственно в Excel.

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

для упрощения формул и вычислений можно с помощью VBA создавать
пользовательские функции рабочих листов [10].

Имеется возможность вносить изменения в элементы меню,
добавлять в имеющиеся меню новые элементы или создавать полностью новые меню.

Программирование в Excel, в основном, сводится к управлению
объектами. Эта задача выполняется с помощью инструкций, введенных на языке,
понятном Excel.Excel имеет встроенный язык программирования — Visual Basic for
Аpplications (VBA). Этот язык позволяет создавать приложения, выполняемые в
среде Microsoft Office.

Язык программирования VBA (Visual Basic for Application)
является составной частью всех последних версий приложений MS Office (Word,
Excel и т.д.) и предназначен для создания дополнительных решений не выходя из
среды этого приложения. Это могут быть разнообразные аналитические программы,
финансовые системы, программы учета кадров, системы автоматического создания
официальных писем / документов с помощью библиотеки готовых шаблонов,
логические игры и т.п. При этом интерфейс создаваемой программы может быть
совершенно непохожим на интерфейс того приложения, в котором она написана.

Первая версия VBA появилась как упрощенное подмножество более
раннего языка Microsoft Visual Basic(VB). Однако по мере развития VB и VBA
фирма — разработчик этих языков Microsoft практически их объединила [7].Basic
for Applications представляет собой новаторское достижение в языках
программирования, возможно наиболее значительное с тех пор, как состоялся
выпуск первой интегрированной среды разработки. Это означает, не то что VBA —
лучшее средство разработки, а лишь то, что VBA существует. Visual Basic,
вероятно, самое популярное средство разработки, и теперь совершенно неожиданно
этот язык включен в не менее популярный комплект прикладных программ.

Поскольку основой приложений Microsoft послужил один и тот же
язык программирования, вероятно, многим придет в голову мысль воспользоваться
им. Точно так же, как пользователям Windows для подготовки множества программ
необходимо освоить один интерфейс, в VBA достаточно изучить одну среду
программирования, чтобы составлять разнообразные приложения

Встраивание VBA в какое-то приложение означает для него
создание объектной модели, в результате VBA-программа может обращаться к
объектам этого приложения и манипулировать ими.- собственное подмножество VB5,
но на самом деле в VBA есть почти все, что можно найти в VB5. Надо признать,
что незначительные отличия все же имеются (например, запуск из Word, а не в
автономном режиме), но в любом случае программирование осуществляется
одинаково. Объектные модели Office имеют силу до тех пор, пока выполняются
приложения, которым они принадлежат, поэтому и VBA, и VB5 могут манипулировать
ими. Мы видим, что от аналогичной в VB5 интегрированная среда разработки в VBA
почти ничем не отличается.

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

Разработка языка программирования VBA, встраиваемого в
прикладные системы, является одним из стратегических направлений компании
Microsoft. Этот язык уже интегрирован в такие программы, как Word for Windows,
Power Point и ряд других. VBA позволяет создавать программные модули, меню,
диалоговые окна и другие ресурсы в среде Windows. Благодаря этому языку
появляется возможность значительно расширить набор функций в Excel, а также
создавать функции, значения которых зависят от некоторых условий и событий. В
принципе, можно полностью перепрограммировать все функции программы Excel, если
в этом появилась необходимость [14].

На наш взгляд VBA легок в освоении, благодаря этому
приложения могут создавать даже пользователи, не программирующие
профессионально. Все выше сказанное определило выбор языка программирования
Visual Basic for Аpplications и среды программирования MS Excel для разработки
логической игры «Сапер».


2. практическая реализация логической игры
«Сапер»

2.1 Руководство разработчика

Разработка программы велась с учетом
концепции объектно-ориентированного программирования, поэтому четко
определенной последовательности действий в ней нет.

Для успешной работы автоматизированной
системы применялись стандартные визуальные компоненты среды программирования
Visual Basic for Applications следующих классов:

1)   ListBox — предоставлял пользователю
выбрать значения;

2)      Label — использовался для
обозначения некоторых данных;

)        CommandButton — использовался для
выполнения команд;

При реализации системы учитывались
быстродействие выполнения команд, возможность ее использование на версиях Microsoft Office 2003 и выше.

Работа над приложением начиналась с
создания формы «Saper», на которой будет располагаться минное.

Рис. 1 Основная форма

Для начала работы с программным
приложением необходимо запустить файл «Сапер. Saper.xls».

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

Рис. 2 Выбор уровня сложности

При выборе команды «Новичок» появляется минное поле размером
с 40 минами, «Средний» — с 50 минами, «Профи» — с 60 минами. Чтобы начать новую
игру можно воспользоваться командой «Новая игра».

Цель игры: найти пустые ячейки, но не трогать ячейки,
содержащие мины.

Правила игры «Сапер» очень просты:

— Если открыта ячейка с миной, игра
проиграна.

Если открыта пустая ячейка, игра
продолжается.

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

Советы и подсказки:

отмечайте ячейки с минами;

изучите возможные сочетания;

старайтесь открывать закрытые области.

При проигрыше появляется форма о поражении, нажав кнопку «ОК»
пользователю предоставляется возможность начать новую игру (рис. 3).

Рис. 3 Форма при поражении

2.2 Руководство
пользователя

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

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

В соответствии с ГОСТом 19.701-90 руководство пользователя
должно содержать следующие разделы:

общие сведения о программном продукте;

— описание логической структуры;

используемые технические средства;

— описание запуска [3].

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

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

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

Пользователь может сам устанавливать уровень сложности игры,
выбрав нужную команду («Новичок», «Средний», «Профи»). При выборе команды
«Новичок» появляется минное поле размером с 40 минами, «Средний» — с 50 минами,
«Профи» — с 60 минами.

Чтобы начать новую игру можно воспользоваться командой «Новая
игра».

Используемые технические средства:

тип процессора — Intel Pentium и выше;

видеокарта — 64 Мб;

оперативная память — не менее 256 Мб;

место на жестком диске — 256 Мб;

наличие установленного приложения Microsoft Office Excel;

— устройство чтения дисков — дисковод для компакт-дисков;

тип манипулятор — мышь.

Описание запуска. Первым этапом любой
деятельности является ее начало, в данном случае — это открытие и вход в игру.
Для запуска программы необходимо скопировать папку «Сапер» на жесткий диск,
затем запустить файл «Saper» с расширением xls.

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

2.3 Выбор стратегии тестирования и разработка
тестов

Существующие на сегодняшний день методы
тестирования ПО не

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

Такой процесс формальной проверки или
верификации может доказать, что дефекты отсутствуют с точки зрения
используемого метода. (То есть, нет никакой возможности точно установить или
гарантировать отсутствие дефектов в программном продукте с учётом человеческого
фактора, присутствующего на всех этапах жизненного цикла ПО).

В качестве стратегии тестирования будем использовать метод
«Черного ящика».

«Черный ящик» — объект изучения, внутреннее устройство
которого либо неизвестно, либо слишком сложно для того, чтобы можно было по
свойствам его составных частей (элементов) и структуре связей между ними делать
выводы о поведении объекта; метод исследования таких объектов. Метод «Черного
ящика» применяют в тех случаях, когда внешнему наблюдателю известны лишь
входные воздействия на объект и его ответная реакция, а процессы, в нём
протекающие, неизвестны [13].

Однако как бы детально ни изучалось поведение «Черного
ящика», невозможно получить однозначное суждение о его внутреннем устройстве,
так как одно и то же поведение может быть характерно для разных объектов. Метод
«Черного ящика» широко применяют для решения задач моделирования управляемых
систем (например, при исследовании сложных систем), особенно в тех случаях,
когда представляет интерес поведение системы, а не её строение.

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

Ниже в таблице сведены тесты готового программного продукта
по принципу черного ящика.

Номер Теста

Назначение
Теста

Значения
исходных данных

Ожидаемый
результат

Реакция
программы

 Вывод

1.

Проверить
правильность создания минного поля

Нажатие пункта
в списке «количество мин»

Выбрать в поле
искомое количество

Программа
создает соответствующее минное поле

Система
правильно осуществляет запрос создания минного поля

2.

Проверить
правильность выполнения игры

Открываем
ячейку с миной, игра проиграна. Открываем пустую ячейку, игра продолжается.

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

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

Система
правильно осуществляет запрос выполнения игры.

Программа была протестирована по методу «черного ящика» что
помогло выявить и устранить ряд ошибок.


Заключение

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

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

При написании курсовой работы было спроектировано и
реализовано программное приложение «Сапер». В результате разработки приложения
была достигнута поставленная цель, а именно — создана логическая игра в
соответствии с техническим заданием. Для этого были разработаны алгоритмы и
программы для реализации данной логической игры с использованием современной
технологии программирования. Программное приложение реализовано с
использованием табличного процессора Excel и объектно-ориентированного языка
VBA. Тестирование, разрабатываемого приложения показало работоспособность
логической игры, целостность и структурированность.

В ходе выполнения курсовой работы изучены
нормативные документы, регламентирующие состав, содержание и форму технической
документации на разрабатываемый программный продукт, среди них ГОСТ 19.701-90 —
ЕСПД.

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

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


Список использованной литературы

1.   Антипенко, Н.Ф. Разработка пользовательский приложений средствами VBA / Н.Ф. Антипенко — Омск:
СибАДИ, 2012. — 95 с.

2.      Биллиг, В.А.VBA и Office 2000. Офисное программирование. / В.А.
Биллинг — М.: Русская редакция, 2000. — 480 с.

3.   Гарнаев,
А.Ю. Самоучитель VBA / А.Ю. Гарнаев — Спб.: БХВ-Петербург, 2007. — 560 с.

4.   Житкова, О.А. Практика программированияVBA в приложениях к Excel, Word и Power Point. / О.А. Житкова —
Москва: Первое сентября, 2006. — 25 с.

5.      Каинка, Б. Измерение, управление и регулирование с помощью
макросов VBA в Word и Excel / Б. Каинка — Киев: МК-Пресс, 2008. — 248 с.

6.      Кузьменко, В.Г. VBA. Эффективное использование. / В.Г. Кузьменко.
— М.: Бином-Пресс, 2012. — 624 с.

7.      Малышев, С.А. Самоучитель VBA. Как это делается в Word, Excel, Access. / С.А. Малышев — СПб.:
Наука и техника, 2001. — 496 с.

8.      Мачулина, Л.А. Использование средств Visual Basic.NET в создании
информационных систем / Л.А. Мачулина — Ростов-на-Дону, 2008. — 41 с.

9.      Михеев, Р. VBA и программирование в MS Office для пользователей /
Р. Михеев — СПб.: БВХ-Петербург, 2006. — 384 с.

10.    Модовозов, В.М. Управление документами Word и Exel в VBA / В.М. Модовозов — СПб,
2003. — 32 с.

11.    Орлов, А. VBA для тех, кто любит думать / А. Орлов — М.: Солон-Р,
2002. — 240 с.

13.    Слепцова, Л.Д. Программирование на VBA в Microsoft Office 2007 / Л.Д. Слепцова —
М.: Вильямс, 2007. — 432 с.

14. Хорев,
В.Д. Самоучитель программирования на VBA в Microsoft Office / В.Д. Хорев —
Киев: Юниор, 2001. — 320 с.

15.    Штайнер,
Г. VBA 6.3 / Г. Штайнер — М.: Лаборатория Базовых Знаний, 2002. — 784 с.

Приложение

Листинг логической игры «Сапер»

Private Sub Form_MouseDown (Button As Integer,
Shift As Integer, x As Single, y As Single)i As Integer, j As Integer, i1 As
Integer, j1 As IntegerButton = 1 Then= x: OldY = y: OldFace = Face.
FaceFaceCoord (x, y) Then FaceBtn 0 Else If Not GameOver Then FaceBtn 3Not
GameOver ThenDoskaCoord (x, y) ThenIJ x, y, i, jDoska1 (i, j) = 0 Theni, j, 15=
i: OldJ = j= 0: OldJ = 0IfIfIfNot GameOver ThenDoskaCoord (x, y) ThenIJ x, y,
i, jCase Doska1 (i, j)0 ‘Устанавливаем флажокind(0).value >= 1
Then(i, j) = 1i, j, 10, ind(0).value — 1If1 Устанавливаем метку (?)(i, j) = 2i,
j, 20, ind(0).value + 12 ‘Снимаем метку (?)(i, j) = 0i, j,
0SelectIfIfIfSub

Sub Form_MouseMove (Button As Integer, Shift As
Integer, x As Single, y As Single)i As Integer, j As Integer, i1 As Integer, j1
As IntegerButton = 1 ThenFaceCoord (OldX, OldY) ThenFaceCoord (x, y) Then
FaceBtn 0 Else FaceBtn OldFaceIfNot GameOver ThenOldI > 0 Then DoskaCell
OldI, OldJ, 0DoskaCoord (x, y) ThenIJ x, y, i, jDoska1 (i, j) = 0 Theni, j, 15=
i: OldJ = jIfIfIfIfSub

Sub Form_MouseUp (Button As Integer, Shift As
Integer, x As Single, y As Single)i As Integer, j As Integer, i1 As Integer, j1
As Integer, empt As IntegerButton = 1 Then= 0: OldJ = 0FaceCoord (OldX, OldY)
And FaceCoord (x, y) Then InitGame Else FaceBtnNot GameOver ThenDoskaCoord (x,
y) ThenNot Timer1. Enabled Then Timer1. Enabled = True: Timer1_TimerIJ x, y, i,
jDoska1 (i, j) = 0 ThenCase Doska (i, j)-1 ‘Мина!!!i, j0 To 8 ‘Пронесло(i, j) =
3i, j, (8 — Doska (i, j)) + 7= CloseCell — 1

If CloseCell = KolMines Then WinDoska (i, j) = 0
Then

empt = 1While empt > 0= 0i = 1 To SizeYj = 1
To SizeXDoska (i, j) = 0 And Doska1 (i, j) = 3 Theni1 = i — 1 To i + 1j1 = j —
1 To j + 1i1 >= 1 And i1 <= SizeY And j1 >= 1 And j1 <= SizeX
ThenDoska1 (i1, j1) = 0 Then= empt + 1(i1, j1) = 3i1, j1, (8 — Doska (i1, j1))
+ 7= CloseCell — 1CloseCell = KolMines Then WinIfIfIfIf

Sub mnuGameRang_Click (Index As Integer)i As
Integeri = 0 To 3(i).Checked = False= Index(Index).Checked = True ‘Выбор
нужного уровня сложности
Case Index0 ‘Новичок= 8= 8= 401 ‘Средний= 16= 16= 502
‘Профи= 16= 30= 69.
Show vbModalSelect

Sub XY2IJ (x As Single, y As Single, i As
Integer, j As Integer)= x — Dsk.x= y — Dsk.y= y conCellHeight= x
conCellWidthy Mod conCellHeight > 0 Then i = i + 1x Mod conCellWidth > 0
Then j = j + 1 Sub

‘Функция проверяет находится ли точка (X, Y) в пределах доски

Private Function DoskaCoord (x As Single, y As
Single) As Booleanx >= Dsk.x + 15 And x <= Dsk.x + Dsk.width — 15 And y
>= Dsk.y + 15 And _<= Dsk.y + Dsk.height — 15 Then DoskaCoord = True Function

‘Функция проверяет находится ли точка (X, Y) в пределах кнопки с
рожицей

Private Function FaceCoord (x As Single, y As
Single) As Booleanx >= Face.x And x <= Face.x + conFaceWidth And y >=
Face.y And _<= Face.y + conFaceWidth Then FaceCoord = TrueFunction ‘Победа!!!

Sub Win()i As Integer, j As Integer

‘Выводим на месте неоткрытых клеток флажки

For i = 1 To SizeYj = 1 To SizeXDoska1 (i, j)
< 3 Then(i, j) = 1i, j, 10, 0IfIfIf Sub ‘Поражение!?

На чтение 6 мин Просмотров 4.4к. Опубликовано 28.03.2022

Содержание

  1. Введение
  2. Импорт модулей
  3. Написание кода
  4. Заключение

Введение

В этой статье напишем игру “Виселица” на python. Создание данной игры отлично подойдёт для тренировки начинающих python.

Правила создаваемой игры:

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

Импорт модулей

На самом деле нам понадобится всего один модуль, а именно модуль random из которого мы возьмём choice.

Импортируем:

from random import choice

Написание кода

Создадим кортеж, хранящий в себе этапы неверных предположений игрока:

HANGMAN = (
    """
     ------
     |    |
     |
     |
     |
     |
     |
    ----------
    """,
    """
     ------
     |    |
     |    O
     |
     |
     |
     |
    ----------
    """,
    """
     ------
     |    |
     |    O
     |    |
     | 
     |   
     |    
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|
     |   
     |   
     |   
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|\
     |   
     |   
     |     
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|\
     |   /
     |   
     |    
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|\
     |   / \
     |   
     |   
    ----------
    """
)

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

max_wrong = len(HANGMAN) - 1

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

WORDS = ("python", "игра", "программирование")  # Слова для угадывания

word = choice(WORDS)  # Слово, которое нужно угадать

Добавим ещё 2 переменных, хранящих чёрточки на каждую букву в слове и количество неверных предположений, а так же список угаданных букв:

so_far = "_" * len(word)  # Одна черточка для каждой буквы в слове, которое нужно угадать
wrong = 0  # Количество неверных предположений, сделанных игроком
used = []  # Буквы уже угаданы

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

while wrong < max_wrong and so_far != word:
    print(HANGMAN[wrong])  # Вывод висельника по индексу
    print("nВы использовали следующие буквы:n", used)
    print("nНа данный момент слово выглядит так:n", so_far)

В цикле добавим переменную, в которую игрок будет вводить предполагаемые буквы:

guess = input("nnВведите свое предположение: ")  # Пользователь вводит предполагаемую букву

В основном цикле while создадим ещё один цикл, который проверяет, вводилась ли данная буква игроком ранее:

    while guess in used:
        print("Вы уже вводили букву", guess)  # Если буква уже вводилась ранее, то выводим соответствующее сообщение
        guess = input("Введите свое предположение: ")  # Пользователь вводит предполагаемую букву

Если буква не вводилась ранее, то она добавится в основном цикле в список used:

used.append(guess)  # В список использованных букв добавляется введённая буква

В основном цикле создаём условие, проверяющее есть ли введённая буква в загаданном слове:

    if guess in word:  # Если введённая буква есть в загаданном слове, то выводим соответствующее сообщение
        print("nДа!", guess, "есть в слове!")
        new = ""
        for i in range(len(word)):  # В цикле добавляем найденную букву в нужное место
            if guess == word[i]:
                new += guess
            else:
                new += so_far[i]
        so_far = new

    else:
        print("nИзвините, буквы "" + guess + "" нет в слове.")  # Если буквы нет, то выводим соответствующее сообщение
        wrong += 1

Последнее условие, которое находится после цикла проверяет, превышено ли количество ошибок:

if wrong == max_wrong:  # Если игрок превысил кол-во ошибок, то его повесили
    print(HANGMAN[wrong])
    print("nТебя повесили!")
else:  # Если кол-во ошибок не превышено, то игрок выиграл
    print("nВы угадали слово!")

И в конце кода будет выводиться загаданное слово:

print("nЗагаданное слово было "" + word + '"')

Весь код:

from random import choice

HANGMAN = (
    """
     ------
     |    |
     |
     |
     |
     |
     |
    ----------
    """,
    """
     ------
     |    |
     |    O
     |
     |
     |
     |
    ----------
    """,
    """
     ------
     |    |
     |    O
     |    |
     | 
     |   
     |    
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|
     |   
     |   
     |   
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|\
     |   
     |   
     |     
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|\
     |   /
     |   
     |    
    ----------
    """,
    """
     ------
     |    |
     |    O
     |   /|\
     |   / \
     |   
     |   
    ----------
    """
)

max_wrong = len(HANGMAN) - 1
WORDS = ("python", "игра", "программирование")  # Слова для угадывания

word = choice(WORDS)  # Слово, которое нужно угадать
so_far = "_" * len(word)  # Одна черточка для каждой буквы в слове, которое нужно угадать
wrong = 0  # Количество неверных предположений, сделанных игроком
used = []  # Буквы уже угаданы

while wrong < max_wrong and so_far != word:
    print(HANGMAN[wrong])  # Вывод висельника по индексу
    print("nВы использовали следующие буквы:n", used)
    print("nНа данный момент слово выглядит так:n", so_far)

    guess = input("nnВведите свое предположение: ")  # Пользователь вводит предполагаемую букву

    while guess in used:
        print("Вы уже вводили букву", guess)  # Если буква уже вводилась ранее, то выводим соответствующее сообщение
        guess = input("Введите свое предположение: ")  # Пользователь вводит предполагаемую букву

    used.append(guess)  # В список использованных букв добавляется введённая буква

    if guess in word:  # Если введённая буква есть в загаданном слове, то выводим соответствующее сообщение
        print("nДа!", guess, "есть в слове!")
        new = ""
        for i in range(len(word)):  # В цикле добавляем найденную букву в нужное место
            if guess == word[i]:
                new += guess
            else:
                new += so_far[i]
        so_far = new

    else:
        print("nИзвините, буквы "" + guess + "" нет в слове.")  # Если буквы нет, то выводим соответствующее сообщение
        wrong += 1

if wrong == max_wrong:  # Если игрок превысил кол-во ошибок, то его повесили
    print(HANGMAN[wrong])
    print("nТебя повесили!")
else:  # Если кол-во ошибок не превышено, то игрок выиграл
    print("nВы угадали слово!")

print("nЗагаданное слово было "" + word + '"')

Заключение

В данной статье мы написали игру “Виселица” на python. Игра довольно простая, но код объёмный, надеюсь Вам понравилась статья 🙂

Спасибо всем, кто читал, удачи Вам 😉

Обновлено 23.06.2022

Просмотров 2018

Tricks of the Windows Game Programming Gurus Second Edition

Книга предназначена для читателей, интересующихся вопросами разработки игр в операционной системе Windows. В ней освещены разнообразные аспекты программирования игр — от азов программирования до серьезного рассмотрения различных компонентов DirectX, от простейших физических моделей до сложных вопросов искусственного интеллекта. Книга будет полезна как начинающим, так и профессиональным разработчикам игр для Windows, хотя определенные знания в области программирования (в частности, языка программирования C или C++), математики и физики существенно облегчат изучение материала.

Автор: Andre LaMothe

Скачать (PDF)

Видео

Делаю РАБОЧИЕ ИГРЫ в PowerPoint, MS Word (2048)Скачать

Делаю РАБОЧИЕ ИГРЫ в PowerPoint, MS Word (2048)

Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8Скачать

Microsoft: Создание игр на DirectX для Windows 8 и Windows Phone 8

Как Сделать Игру Без ПрограммированияСкачать

Как Сделать Игру Без Программирования

С чего начать делать игры | Разработка для новичковСкачать

С чего начать делать игры | Разработка для новичков

Делаю игру на ОЧЕНЬ СТАРОМ ноутбукеСкачать

Делаю игру на ОЧЕНЬ СТАРОМ ноутбуке

Игра Gems Of War — PvP и новая неделя [Stream 7/2023]Скачать

Игра Gems Of War - PvP и новая неделя [Stream   7/2023]

КАК СДЕЛАТЬ ИГРУ НА C# + WinForms ЗА 30 МИНУТ? 👾 #1Скачать

КАК СДЕЛАТЬ ИГРУ НА C# + WinForms ЗА 30 МИНУТ? 👾 #1

ДУМ И ЗЕЛЬДА В ТАБЛИЦАХ! Игры в Microsoft ExcelСкачать

ДУМ И ЗЕЛЬДА В ТАБЛИЦАХ! Игры в Microsoft Excel

Программирование на Java: создание игры Змейка. Часть 1.Скачать

Программирование на Java: создание игры Змейка. Часть 1.

Игры, которые обучат вас программированиюСкачать

Игры, которые обучат вас программированию

5 популярных игр и их языки программированияСкачать

5 популярных игр и их языки программирования

Я пытался изучить программирование с нуля за 7 дней и вот что получилось в итогеСкачать

Я пытался изучить программирование с нуля за 7 дней и вот что получилось в итоге

Windows 18! Microsoft, что ты сделала??!!Скачать

Windows 18! Microsoft, что ты сделала??!!

Игры для программистов, о которых вы наверняка не слышали. GeekBrainsСкачать

Игры для программистов, о которых вы наверняка не слышали. GeekBrains

Как сделать Flappy Bird на С++Скачать

Как сделать Flappy Bird на С++

ТОП 5 ИГР, которые учат программированию | ИГРЫ ДЛЯ ПРОГРАММИСТОВСкачать

ТОП 5 ИГР, которые учат программированию | ИГРЫ ДЛЯ ПРОГРАММИСТОВ

Как научиться программировать с нуля играя в игры. Java, JavaScript, C++, C#, Python, PHP, RubyСкачать

Как научиться программировать с нуля играя в игры. Java, JavaScript, C++, C#, Python, PHP, Ruby

Разработка игры на Python | Pygame. Урок #1Скачать

Разработка игры на Python | Pygame. Урок #1

Учим Unity за 1 час! #От ПрофессионалаСкачать

Учим Unity за 1 час! #От Профессионала

Понравилась статья? Поделить с друзьями:
  • Программирование для таблиц excel
  • Программирование для excel функции
  • Программирование для excel 2013
  • Программирование в текстовом процессоре microsoft word
  • Программирование в приложениях excel