205.24K
Категория: ПрограммированиеПрограммирование

Практикум: создание простого интерактивного приложения

1.

О.В. Максименкова, Д. Сагалов
Программирование на C#
Семинар 4
Практикум: создание простого интерактивного
приложения
1

2.

Полезные Материалы к Семинару
Метод TryParse (на примере int): https://docs.microsoft.com/en-us/dotnet/api/system.int32.tryparse
Модификатор out: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/out-parameter-modifier
Вещественные типы в C#:
• Основы: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types
• Спецификация decimal: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/languagespecification/types#838-the-decimal-type
Есть ли Epsilon у decimal: https://stackoverflow.com/questions/11781899/c-sharp-decimal-epsilon
Условия в C#:
• Операторы if и switch:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements
Выражение switch: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/switch-expression
Работа с консольным окном (координаты, курсор, цвета):
https://docs.microsoft.com/en-Us/dotnet/api/system.console
2

3.

Практика: Невероятные Приключения Звёздочки
В качестве практики Вам предстоит реализовать консольную игру, в которой игрок
управляет звёздочкой на экране, избегая препятствий и собирая ресурсы.
Интерфейс игры имеет приблизительно следующий вид:
3

4.

Постановка Задачи: Игровой Цикл
Основная игра:
1) Игровое поле должно представлять собой консольный экран зелёного цвета;
2) Доступное игровое пространство ограничено прямоугольной рамкой из
символов «_» и «|» чёрного цвета и составляет 2/4 консольного окна по
горизонтали и по вертикали, расположено по центру.
3) Игра сразу завершается, предотвращая перемещение игрока (и
последующее перемещение врага, см. далее), если пользователь нажал
клавишу Escape во время своего хода.
4

5.

Постановка Задачи: Поведение Игрока
Игрок:
1) Игрок представляет собой чёрный символ «*»;
2) Начальная позиция игрока – центр игрового поля;
3) Игрок может перемещаться вперёд-назад, влево-вправо при помощи
клавиш WASD;
4) Игрок не должен оставлять за собой никаких следов нахождения на
прошлой позиции (подумайте, как можно сделать предыдущую позицию
невидимой на консольном фоне);
5) Игрок не может «затирать» собой границы игрового поля. При попытке
выбраться за границу игрового поля слева игрок оказывается на единицу
левее правой границы поля. При попытке выйти за нижнюю границу, игрок
оказывается на единицу ниже верхней границей поля. Для переходов в
противоположные стороны поведение аналогичное.
5

6.

Постановка Задачи: Поведение Врага
Причудливый враг:
1) Причудливый враг представляет собой белый символ «#»;
2) Начальная позиция причудливого врага – случайная точка внутри поля, не
совпадающая со стартовой позицией других игровых сущностей;
3) Причудливый враг осуществляет ход каждый раз сразу после хода игрока;
4) Перемещение причудливого врага осуществляется случайным образом на
единицу вверх, вниз, влево или вправо. Каждое из этих перемещений
равновероятно;
5) Как и игрок, причудливый враг не может выходить за рамки игрового
поля и при попытке пересечь их оказывается в противоположном конце;
6) Аналогично игроку причудливый враг не должен оставлять за собой
никаких следов нахождения на прошлой позиции.
6

7.

Постановка Задачи: Завершение Игры
Конец игры:
1) Как описывалось ранее, игрок может закончить игру на своём ходу по
нажатию клавиши Escape;
2) Если в результате хода игрока или хода врага оба персонажа оказываются
в одной точке, их обозначение стирается с экрана, в рамке игрового поля
по центру выводится красное сообщение “GAME OVER!”, а игра
завершается:
7

8.

Доработка Игры про Звёздочку
В качестве самостоятельного упражнения по доработке игры попробуйте реализовать
дополнительный функционал.
Обратите внимание: предлагаемые далее возможности могут реализовываться как
независимо друг от друга, так и совместно – в том числе, и все сразу одновременно.
Подумайте, как корректно организовать последовательность действий, чтобы
избежать возникновения ошибок при взаимодействиях различных сущностей.
Попробуйте самостоятельно придумать дополнительную функциональность!
Важно: обязательно опишите, какие взаимодействия возникнут с основными
игровыми элементами, если решите реализовать собственные идеи.
8

9.

Доработка Игры: Враг-Сталкер
Враг-Сталкер:
1) Сталкер представляет собой красный символ «@», преследует игрока, постоянно стараясь
приблизиться к нему либо по X, либо по Y;
2) Сталкер двигается на одну клетку по оси X или по оси Y за ход в направление игрока
сразу после причудливого врага. Для приближения выбирается та ось, по которой до игрока
добраться ближе;
3) В начале игры сталкер появляется в случайной пустой клетке карты, не совпадающей ни с
чем другим;
4) Сталкер никогда не может оказаться на одной клетке с другими врагами. В случае
нахождения рядом враги не могут выбрать занятые друг другом точки по результатам
последних ходов;
5) Аналогично столкновению с причудливым врагом, нахождение на одной клетке со сталкером
приводит к “GAME OVER!”;
6) Как и причудливый враг, сталкер не может выйти за границу карты и действует по тем же
правилам.
9

10.

Доработка Игры: Монетка
Монетка:
1) Монетка – неподвижный объект на игровом поле, который может подбирать как игрок, так и
враги. Обозначается жёлтым символом «$»;
2) В начале игры монетка появляется в случайной клетке поля, на которой ничего не стоит;
3) В левом верхнем углу экрана отображается текст: “Player: <coin count>”, а на следующей
строке сразу под ним – “Enemy: <coin count>”;
4) При попадании игрока/врага на одну клетку с монеткой соответствующий счётчик
увеличивается на 1. При этом монетка удаляется, а новая сразу же появляется на случайной
пустой клетке.
5) Если счётчик монеток игрока/врагов становится равен 5, игра сразу же завершается, а на
экране красным цветом по центру выводится сообщение “Player wins!” или “Enemies win!” в
зависимости от победитель.
*В данной формулировке считается, что счётчик монет у всех врагов общий.
10

11.

Доработка Игры: Враг-Чарджер
Враг-чарджер:
1) Чарджер – вариация причудливого врага, которая перемещается аналогичным образом,
равновероятно выбирая случайное направление. Обозначается фиолетовым символом «%»
2) В отличие от причудливого врага, движется уже не на одну клетку, а на 5 в выбранном
направлении, оставляя за собой серый отравленный след из символов «%» до конца
следующего хода;
3) При наступлении игрока на серый след игра завершается и выводится сообщение “GAME
OVER!”. Другие враги не могут наступать на след чарджера (считают его занятой клеткой).
4) Чарджер не может совершить движение в заданном направлении, если на его пути уже есть
другой враг;
5) Если чарджер в результате своего хода проходит через игрока насквозь или оказывается с ним
на одной клетке, игра завершается и выводится сообщение “GAME OVER!”.
11

12.

Дополнительные Задачи-1
1) Напишите метод, находящий трёхзначное десятичное число s, все цифры которого
одинаковы и которое представляет собой сумму первых членов натурального ряда, то есть:
s = 1+2+3+4+…
Выведите полученное число, количество членов ряда и текстовое представление суммы, в
котором указаны первые три и последние три члена, а средние члены обозначены
многоточием.
Пример:
Если последний член равен 25, то вывести:
1+2+3+…+23+24+25.
2) Напишите метод, преобразующий целое число, переданное в качестве аргумента, в число,
представляющее запись исходного с обратным порядком цифр. Ведущие нули при этом
должны отбрасываться.
Примеры:
1024 → 4201
120 → 21
12

13.

Дополнительные Задачи-2
3) Напишите метод, вычисляющий логическое значение функции G=F(X,Y):
результат должен быть равен true, если точка с координатами (X, Y) попадает внутрь или на
границы сектора круга G с радиусом R = 2 в диапазоне углов -90<= fi <=45, и false в
противном случае.
4) Напишите метод, вычисляющий значение функции G=F(X,Y):
English     Русский Правила