Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

Очень интересно! ии сайт крутой жалко что умирает(
У Вас число превысит максимальное число int. Можно использовать в Вашем случае uint, но лучше все переписать на double.
Добавление к программе строки glutReshapeFunc(changeSize); приводит к тому, что треугольник перестаёт совсем отрисовываться.
Выдаёт ошибку glut32.dll не найден! При том, что он лежит в System32! Всё решил) Нужно отправить не в System32, а в System.
Спасибо за статью. Я не Ваш студент. Но мне она помогла написать функцию для Канторова множества на Python для черепашки: import turtle def kanter(x, y, d):     if d > 1:         turtle...

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Среда программирования: 
GMS2

В этом уроке мы продолжаем работу над IO игрой. С первого урока мы помним где что находится, как создавать спрайты, объекты и события.
Для начала изменим размеры комнаты и поставим их 1500 на 1500(1) Потом включим использование камер и отображение первой камеры (2), Установим размеры экрана(то как видим мы) (3) и размеры камеры (то что видит камера) (4) так же сделаем слежку за нашим игроком (5), и расставим стены по периметру комнаты (6):

Теперь в объекте o_player в событии step меняем строку
speed = 5
на
speed = 6 - global.size
Так мы установили зависимость скорости от размера.
Дальше в объекте o_control мы создаем событие Draw GUI - ото отвечает за рисование на экране.
Пишем туда этот код
draw_text(20,20,"Mass " + string(global.size))
draw_text(20,40,"Speed " + string(o_player.speed))

Эти строки будут переводить численные переменные в текстовые и писать на экране их значения. В первом случае мы обращаемся к глобальной переменной которая доступна от куда угодно, а во втором случае мы обращаемся к переменной игрока и запрашиваем его скорость.
Теперь самое интересное, создание простого бота - который будет стараться съесть нас.
первое что нужно сделать, создадим спрайт для него, я дублировал спрайт игрока, переименовал его в s_bot и перекрасил в красный.
Создадим объект o_bot и создадим события как на скрине:

В событии Create пишем код:
mass = 1 // Создадим локальную переменную массы
В событии Draw пишем код:
draw_self() //рисуем себя
image_xscale = global.size // увеличение по x
image_yscale = global.size // увеличение по y

В событии столкновения с o_food
mass += 0.01
В событии столкновения с o_wall
Ничего не пишем
В событии столкновения с o_player
if (mass < global.size) { //Если масса бота меньше размера игрока то бот уничтожится
instance_destroy()
} else { // если масса бота больше то уничтожится игрок и игра закончится
instance_destroy(o_player)
}

В событии Step пишем:
speed = 6 - mass
direction = point_direction(x,y,instance_nearest(x, y, o_food).x,instance_nearest(x, y, o_food).y)
if (point_distance(x,y,o_player.x,o_player.y) < 150 ){
if (mass > global.size){
direction = point_direction(x,y,o_player.x,o_player.y)
} else {
direction = point_direction(x,y,o_player.x,o_player.y) - 180
}
}

Первая строка устанавливает скорость в зависимости от массы
вторая строка выбирает направление движения к ближайшему объекту o_food чтобы его съесть.
point_direction(x1,y1,x2,y2) - выстраивает прямую от точки x1 y1 до точки x2 y2
instance_nearest(x,y,obj) - возращает ид ближайшего объекта типа obj к точке x y
x и y - локальные переменные местонахождения объекта в комнате.
После выбора направления простое условие, если бот на расстоянии 150 пикселей видит игрока то он должен принять решение, если его масса больше то преследовать игрока чтобы его уничтожить, если его масса будет меньше то он будет убегать от игрока.
После этого расставим в комнате 3 бота:

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

Прикрепленный файлРазмер
GMS2Lesson2 - Game.zip1.94 Мб
GMS2Lesson2 - sourse.zip17.92 кб