Как создать игру в формах Windows

Обновлено: 24.11.2024

Обязательный гигантский паук!

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

Это не лучшая игра в мире. На самом деле, он очень короткий и некрасивый.

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

РАЗДЕЛЫ

Дополнительные уроки (улучшения игры)

Улучшение качества кода SuperAdventure за счет рефакторинга

Добавление продавца в локации (с покупкой и продажей товаров)

Использовать SQL для сохранения и восстановления игровых данных игрока

Создание пользовательского интерфейса консоли для SuperAdventure

Окончательный рефакторинг (очистка) исходного кода SuperAdventure

Новые возможности игры

Исправлены ошибки

Поделитесь своими личными, расширенными версиями SuperAdventure здесь!

458 комментариев

Привет,
Я только что добрался до главы 18 и начал заниматься "свободным программированием". Я пытаюсь добавить изображения при смене оружия/исцеления или при появлении монстра, но не могу заставить это работать. Я просто недостаточно хорош или это что-то, что нельзя сделать?
Обожаю этот урок, кстати

Можете ли вы загрузить свое решение (включая каталоги в нем и все файлы в этих каталогах) на GitHub, Dropbox или в другое место для обмена файлами, чтобы я мог его просмотреть?

Можете ли вы также рассказать мне больше об изменении, которое вы пытаетесь внести? Какие изображения вы пытаетесь изменить (монстры, локации, новые типы изображений)? Вы получаете сообщение об ошибке или изображения не отображаются?

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

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

Вчера, когда я отправил свое предыдущее сообщение, я загрузил изображения оружия в Properties.Resources в Engine. Никаких ошибок тогда не было, но картинка не появлялась. Я подумал: «Это проблема будущего меня», удалил код и продолжил изучение вашего руководства.

Теперь, когда я увидел ваш ответ, я вернул этот код, но получаю сообщение об ошибке (я поместил это в комментарий, и он находится в UpdateWeaponListInUI())

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

ССЫЛКА УДАЛЕНА В СООТВЕТСТВИИ С КОНФИДЕНЦИАЛЬНОСТЬЮ

Изменения World.cs и HealingPotion.cs касаются только добавления изображения зелья.

В Form1.cs основные изменения заключались в том, чтобы убедиться, что изображения оружия и лечебного зелья удаляются при изменении выбранного игроком оружия, выбранного лечебного зелья.
Строка 281: заполняет свойство CurrentWeapon игрока.
Строка 286: устанавливает для свойства Image окна с изображением изображение CurrentWeapon игрока. «?» предотвращает ошибку, если CurrentWeapon игрока имеет значение null.
Строка 307: очищает изображение лечебного зелья, если в инвентаре игрока нет лечебных зелий.
Строка 316: Заполняет изображение лечебного зелья, если в инвентаре игрока есть лечебное зелье.
Строка 495: заполняет изображение оружия, когда игрок выбирает другое оружие из списка оружия.

Сообщите мне, если возникнут какие-либо проблемы с этими изменениями или у вас возникнут вопросы по ним.

Основная идея заключается в том, что обработчики событий SelectedIndexChanged поля со списком настраиваются до заполнения свойств DataSource полей со списком. Когда вы устанавливаете DataSource, если есть какие-либо элементы, то первый из них «выбирается» по умолчанию. Если обработчики событий не настроены до установки DataSource, SelectedIndexChanged не обнаруживается, когда выбран параметр по умолчанию (первый).

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

Используйте эти руководства, чтобы узнать о следующих задачах в Visual Studio Integrated Design Environment (IDE).

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

В этом первом уроке вы узнаете, как:

  • Создайте проект Visual Studio, использующий Windows Forms.
  • Добавить и отформатировать элемент макета.
  • Добавьте и отформатируйте ярлыки для отображения.

Предпосылки

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

Создайте свой проект игры на соответствие Windows Forms

При создании игры на совпадение первым шагом является создание проекта приложения Windows Forms.

Откройте Visual Studio.

В строке меню выберите "Файл" > "Создать" > "Проект".

Дополнительную информацию см. на странице "Установка Visual Studio".

Откройте Visual Studio.

В начальном окне выберите Создать новый проект.

В окне "Создать новый проект" найдите Windows Forms. Затем выберите «Рабочий стол» в списке «Все типы проектов».

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

В окне "Настройка нового проекта" назовите проект MatchingGame, затем выберите "Создать".

Visual Studio создает решение для вашего приложения. Решение — это контейнер для всех проектов и файлов, необходимых вашему приложению.

В этот момент Visual Studio отображает пустую форму в конструкторе форм Windows.

Создайте макет для своей игры

В этом разделе вы создадите сетку игры четыре на четыре.

  • Измените свойство Text с Form1 на Matching Game. Этот текст появляется в верхней части игрового окна.
  • Задайте размер формы. Вы можете изменить его, задав для свойства Size значение 550, 550 или перетащив угол формы, пока не увидите правильный размер в нижней части интегрированной среды разработки Visual Studio.

Выберите вкладку "Панель инструментов" в левой части IDE. Если вы его не видите, выберите «Просмотр» > «Панель инструментов» в строке меню или Ctrl+Alt+X.

Перетащите элемент управления TableLayoutPanel из категории "Контейнеры" на панели инструментов или дважды щелкните его. Задайте следующие свойства панели в окне свойств.

Установите для свойства BackColor значение CornflowerBlue. Чтобы установить это свойство, щелкните стрелку рядом со свойством BackColor. В диалоговом окне BackColor выберите Web. В доступных названиях цветов выберите CornflowerBlue.

Цвета расположены не в алфавитном порядке, а Васильковый находится в конце списка.

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

Установите для свойства CellBorderStyle значение Inset. Это значение обеспечивает визуальные границы между каждой ячейкой на доске.

Нажмите треугольную кнопку в правом верхнем углу TableLayoutPanel, чтобы отобразить меню задач. В меню задач дважды выберите «Добавить строку», чтобы добавить еще две строки. Затем дважды выберите Добавить столбец, чтобы добавить еще два столбца.

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

Выберите «Строки» в списке в верхней части окна, а затем установите высоту каждой строки на 25 процентов.

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

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

Добавить и отформатировать ярлыки для отображения

В этом разделе вы создаете и форматируете метки, которые будут отображаться во время игры.

Убедитесь, что TableLayoutPanel выбран в редакторе форм. Вы должны увидеть tableLayoutPanel1 в верхней части окна свойств. Если он не выбран, выберите TableLayoutPanel в форме или выберите его из списка в верхней части окна свойств.

Откройте панель инструментов, как и раньше, и откройте категорию «Общие элементы управления». Добавьте элемент управления Label в верхнюю левую ячейку TableLayoutPanel. Элемент управления меткой теперь выбран в среде IDE. Установите для него следующие свойства.

  • Установите для свойства BackColor ярлыка значение CornflowerBlue.
  • Установите для свойства AutoSize значение False.
  • Задайте для свойства Dock значение Fill.
  • Установите для свойства TextAlign значение MiddleCenter, выбрав кнопку раскрывающегося списка рядом со свойством, а затем нажав среднюю кнопку. Это значение обеспечивает отображение значка в середине ячейки.
  • Выберите свойство «Шрифт». Появится кнопка с многоточием (. ). Выберите многоточие и установите для параметра "Шрифт" значение "Webdings", для параметра "Стиль шрифта" значение "Жирный", а для параметра "Размер" — значение 48.
  • Задайте для свойства Text метки букву c.

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

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

Вместо c попробуйте использовать другие буквы в свойстве Text. Восклицательный знак – это паук, заглавная N – глаз, а запятая – перец чили.

Выберите элемент управления Label и скопируйте его в следующую ячейку в TableLayoutPanel. Выберите клавиши Ctrl+C или в строке меню Правка > Копировать. Затем вставьте его, используя Ctrl+V или Правка > Вставить.

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

На этом шаге завершается макет формы.

Дальнейшие шаги

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

Установите интегрированную среду разработки Visual Studio

Шаг 1. Загрузите установщик Visual Studio

Шаг 2. Запустите установщик Visual Studio

Создание нового приложения Windows Forms с помощью Visual Studio

Шаг 1. Создайте новый проект

Структура файла проекта

Наш GameLoopProject будет состоять из 5 файлов. Файл Program.cs, который является основной точкой входа нашего приложения, файл Form1.cs, который является нашим диалоговым окном Windows Forms, отображающим нашу графику, файл GameLoop.cs, который управляет нашим игровым циклом, файл Game.cs, который содержит нашу игровую логику. и файл GameSprite.cs, представляющий собой модель данных, содержащую информацию о спрайтах.

Шаг 1. Создайте следующие файлы классов

  • Создайте новый файл класса с именем GameSprite.cs
  • Создайте новый файл класса с именем GameLoop.cs
  • Создайте новый файл класса с именем Game.cs

ПРИМЕЧАНИЕ. Чтобы добавить класс в Visual Studio, в обозревателе решений щелкните проект правой кнопкой мыши, выберите "Добавить", а затем выберите "Класс".

Добавьте изображения спрайтов в свои ресурсы проекта

Шаг 1. Загрузите изображение bomber-sprite.jpg отсюда

Шаг 2. Добавьте файл bomber-sprite.jpg в качестве ресурса в свой проект

  • В Visual Studio выберите «Проект» > «Свойства» в строке меню. Когда появится конструктор проектов, выберите вкладку "Ресурсы".
  • Перетащите файл bomber-sprite.jpg в окно ресурсов.

Добавить ссылки для обнаружения ввода с клавиатуры

Шаг 1. Добавьте следующие ссылки в свое проектное решение

  • Добавить PresentationCore в ссылки проекта
  • Добавить WindowsBase в ссылки проекта

ПРИМЕЧАНИЕ. Чтобы добавить ссылки, перейдите на вкладку «Ссылки». Нажмите кнопку «Добавить ссылки», чтобы открыть диалоговое окно «Добавить ссылку». В диалоговом окне "Добавить ссылку" выберите вкладку, указывающую тип компонента, на который вы хотите сослаться. Выберите компоненты, на которые вы хотите сослаться, и нажмите OK.

Создание моделей данных игровых спрайтов

Создать игру

  • Метод Load(), который выполняется только один раз для загрузки спрайтов и музыкального контента
  • Метод Unload() для выгрузки содержимого после остановки игрового цикла
  • Update() — часто выполняемый метод для обновления ввода контроллера и анимации спрайтов.
  • Draw(). Часто выполняемый метод для отрисовки спрайтовой графики на экране.

ПРИМЕЧАНИЕ. Если в игре отображаются ошибки.cs, то, скорее всего, PresentationCore и справочник по WindowsBase не были включены в ваш файл или проект

  • в Game.cs наведите указатель мыши на клавиатуру, нажмите кнопку раскрывающегося списка и выберите с помощью System.Windows.Input (из PresentationCore)

Создать игровой цикл

  • Метод Load() для загрузки класса Game.cs
  • Метод Start() для запуска игрового цикла и запуска класса Game.cs
  • Метод Stop() для остановки игрового цикла и выгрузки класса Game.cs
  • Draw() Часто выполняемый метод, вызывающий метод рисования класса Game.cs

Form1.cs (пример кода)

Запуск проекта в Visual Studio 2019

Visual Studio создает проект, преобразуя исходный код в исполняемый файл (файл .exe)

  1. Создайте полноценную игру про змей в Visual Studio.
  2. Использование пользовательских классов для загрузки и перезагрузки настроек по умолчанию
  3. Использование пользовательских классов для отрисовки змеи и еды в игре
  4. Работа с элементами управления клавиатуры
  5. Сохранение счета и рекорда в текущей игровой сессии.
  6. Возможность сделать снимок игры, когда она закончится
  7. Запуск и перезапуск игры для воспроизведения

Загрузите полный проект и исходный код из репозитория MOO ICT GitHub

Исходный код —

Круговой класс –

Этот класс поможет нам рисовать круги в форме, мы будем использовать его для определения положения кругов на экране по осям X и Y. Это будет использоваться как для ЗМЕИ, так и для объектов Еды внутри игры.

Класс настроек

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

Это основной код form1.cs. В этом сценарии мы дали все инструкции, необходимые для игры и того, как она будет себя вести при загрузке игры. У нас есть несколько событий в приведенном ниже коде, например, Key Down, Key Up, Timer, 2 Click Events и Paint Event. Также у нас есть 3 настраиваемые функции, такие как «Перезапустить игру», «Игра окончена» и «Ешь еду» для змеи.

подпись. Text = "Я набрал: " + score + " и мой рекорд " + highScore + " в Snake Game от MOO ICT" ;

Поделиться:

Вот так:

есть ли какая-то причина, по которой у вас есть флаги для указания влево, вправо, вверх и вниз?
Кроме того, нужна ли функция KeyIsUp?

Я изменил ваш код на:

пространство имен змея
общедоступный частичный класс Form1 : Форма
частный список Snake = new List();
private Circle food = new Circle();
инт максширина;
инт maxHeight;
Случайный случай = новый случайный();

Читайте также: