Курсы создания компьютерных игр на C/C++ ( Часть 7.2 )

Для самых-самых начинающих программистов :] Часть 7 - http://pikabu.ru/story/_3476138
Курсы создания компьютерных игр на C/C++ ( Часть 7.2 ) Для самых-самых начинающих программистов :]  Часть 7 - <a href="http://pikabu.ru/story/kursyi_sozdaniya_kompyuternyikh_igr_na_cc__chast_7__3476138">http://pikabu.ru/story/_3476138</a>
4
Автор поста оценил этот комментарий

Исходники кода из поста:

https://drive.google.com/file/d/0B-jUIcoflGh7OVlNb3M5UEZVeTg...

Автор поста оценил этот комментарий

блин, зачем ты это делаешь?))

если учишься, тогда понятно

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Думаешь это никому не нужно? :\
показать ответы
1
Автор поста оценил этот комментарий

Спустя неделю все же наконец доделал урок и все домашние задания. В процессе ловил невероятное количество багов по самым наиглупейшим причинам и испытывал невероятное удовлетворение когда наконец удавалось их пофиксить. За это время накопилось немного вопросов:
1. Почему в вашей игре около 30к фпс, а в моей всего 7к?
2. Я наверное дурачок, но я абсолютно не понял часть кода в предпоследнем слайде, а именно "unitType==UnitType_None", объясните пожалуйста, зачем нужна эта проверка.

Ну и конечно прошу оценить то что получилось, в игре всего 2 уровня и большинство выполненных ДЗ находятся именно во втором. https://yadi.sk/d/TheKvhuDjXp0LA

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

По уровню хардкорности эта игра явно соперничает с Dark Souls...
Тут определенно не хватает счетчика смертей :D

Ответы:
- хз, производительность процессора, версия консоли, все что угодно )) Когда фпс измеряется тысячами это не имеет значения )
- Это проверка, что препятствие сбоку - это не юнит, а значит нет смысла идти на него( атаковать ) и нужно развернуться в другую сторону

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

блин( голову себе сломал, но не смог заставить двигаться спрятавшуюся черепаху. Точнее могу ее заставить двигаться, но тогда все они (если их больше 1ой на экране) начинают гонять и УБИВАТЬ (меняю характеристику скорости в описании существа).

https://yadi.sk/d/_rJA8rd6sFfRp

Автор, если не сложно, подскажи, как это можно реализовать?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Вот мой самый первый черновой вариант с перевернутыми черепахами, чисто для ознакомления:
https://drive.google.com/file/d/0B3_Edi1DQIOhOVhvdG5jU0diTnM...
:)

P.S.

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

@Dansken, вот моя "Go, рубль, go!" версия :)

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


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



https://yadi.sk/d/U067igj0omqym

Иллюстрация к комментарию
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Вот тут лайк можешь поставить, если Стим аккаунт есть:
http://steamcommunity.com/sharedfiles/filedetails/?id=619492...
;)

P.S. Оригинальная графика ))))
P.P.S. Еще и столько скрытых блоков - зачет вообще )))

Автор поста оценил этот комментарий

deltaSpeed = gravitySpeed * deltaTime; (dv = v*dt) - физики не одобрят. Но это не страшно, длиннопост отличный, как и предыдущие. Продолжай в том же духе!

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

дааа, это маленький грязный хак физики :)

Автор поста оценил этот комментарий

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Вот вам все и сразу :) Пишу я продолжение, пишу :)

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

Ну блин, они же зелёные! Или я чего-то не знаю о Ваших местных гусях? :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Они же с крыльями и клювом! Или я чего-то не знаю о Ваших местных черепахах?  :)

показать ответы
1
Автор поста оценил этот комментарий

Я кажется понял в чем дело. Вы говорили о цепочке проверок

if ...

else if ...

else if ...

...


А я вас понял так словно вы говорили о вложенных проверках, когда внутри блока if или else используется еще if.


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

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

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Иллюстрация к комментарию
Автор поста оценил этот комментарий

Уважаемый @Dansken, могу ли я поинтересоваться, когда выйдет следующий длиннопост по этой тематике?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Та вот я сам бы хотел знать :) Увы, сейчас своим временем не слишком располагаю - может сегодня, а может через неделю :)
показать ответы
Автор поста оценил этот комментарий

Центр*

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Лови, набросал за полчасика, может сгодится на что-то :)

https://drive.google.com/file/d/0B-jUIcoflGh7djlvNUtsQXVoMXc...

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

https://drive.google.com/file/d/0B-5kzMyUwusIUTJ1S29BdFRGX3c...

Сорцы в топовом комменте этой ветки :)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Выбиваем гриб и сразу же выбиваем кристалл => получаем ездящий кристалл! :)


P.S. Сложно когда даже героем нельзя касаться врагов - очень хадкорно особенно против прыгающих ))

P.P.S. Гуси совсем бессмертные?

P.P.P.S. А не, в бездне умирают )))

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

Постройка по вершинам и повороты.Мы даже на бумаге не можем реализовать это.Есть версия про соединение четырёх точек попарно линиями(Первая-со второй и четвёртой,2 - с 1 и 3 и т.д),а вот с поворотом сложнее,так как матричный способ мы не осилили.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

эээ? А чем вас учили графику то выводить? :)


Формула поворота точки на на угол angle вокруг начала координат:

newX = x*cos(angle) - y*sin(angle);

newY = x*sin(angle) + y*cos(angle);

показать ответы
1
Автор поста оценил этот комментарий

Благодарю за ответы, а как вам идея с убегающим грибом?)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Чем-то напомнило Syobon Action :D

1
Автор поста оценил этот комментарий

Добрый вечер Tinaynox . Дз сделаны не полностью, зато я добавил стрельбу на пробел=))
https://yadi.sk/d/ZtmRha8Y3QSyTp 
п.с. вносить изменения в такую структуру кода, как у вас, одно удовольствие, никаких тебе непонятных int x,  и т.д.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Очень здорово! Продолжайте в том же духе :)
1
Автор поста оценил этот комментарий

Ну просто надо было несколько уровней сделать, а придумывать новые уровни было лень. Поэтому придумал так, и механика перехода уровней есть, и уровней самих нет.

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

Была еще проблема, что персонаж мог прыгать, даже если поверхность находилась через клетку от него, что выглядело убого. Но это тоже исправил, я просто после каждого прыжка ставлю персонажа на клетку Номер_клетки + 0.999, а при прыжке проверяю есть ли в клетке +0.001 от герой поверхность или нет.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ну из явного дискомфорта ощущается то, что скорость по Y не обнуляется при столкновении башкой с блоком сверху :) И почему-то очки не начисляются :)

показать ответы
1
Автор поста оценил этот комментарий

Я смог наконец-то сделать ее. Правда я писал ее почти с нуля. На твой код почти не смотрел взял только задания. Есть пара мелочей, которые надо бы допилить, но в целом оно вроде работает.
http://wdfiles.ru/1FH7

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Очень и очень неплохо :) Концовочка милая :)
показать ответы
1
Автор поста оценил этот комментарий

Также по ходу разбора кода заметил, что блок "// Only monsters actions" в MoveToUnit() можно полностью убрать, если немного модернизировать блок "// Can not move cell left" и аналогичный "...right" в UpdateAI() -- ведь монстры отталкиваются от всего, кроме пустоты -- остается только добавить нанесение урона при встрече с героем:

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Как вариант :)

1
Автор поста оценил этот комментарий

@Dansken, небольшой вопрос по поводу отрывка из функции UpdateUnit():
зачем локальной переменной row обновлять свои данные, если последующий блок кода в котором упоминается row не выполнится из условия if-else, или это ради эстетики? Аналогичный отрывок и с X: column = int(pointerToUnitData->x);

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Пардон, я там изначально как-то алгоритм с последующим использованием row и column строил, но потом упростил и забыл это убрать :))

показать ответы
1
Автор поста оценил этот комментарий

https://yadi.sk/d/CUJV6laWnS8cP Вот

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Во первых не увеличиваешь unitsCount:

unitsCount++

А во вторых там еще куча багов ))) Короче попробуй построчно сравнить с моим кодом :)

показать ответы
1
Автор поста оценил этот комментарий

https://yadi.sk/i/_rwGpbJ8nRXYc    Посмотри пожалуйста что не так, почему-то "марио" не ходит.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Одного файла проекта мало ))) Нужен еще весь код :)

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

Скажи пожалуйста в чем ошибка

Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

int c = 0; r < levelColumns; r++

показать ответы
1
Автор поста оценил этот комментарий

Спасибо за урок, сделал всё, кроме прыгающих гусей, как только не пробовал сделать, но что-то всё не выходит( Потому есть только обычные гуси) Было бы неплохо, если бы вы направили меня что ли, пока пробовал в UpdateAI сделать отлов того, что это JumpKoopa и если он, то order указываем Backward, но не работает(


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


https://drive.google.com/file/d/0ByEaJ3u-v31md1FkTlB1TXNNZ28...

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Отличная игра, даже пришлось попотеть над вторым уровнем )))

А по поводу JumpKoopa - так по идее и нужно делать, нужно дебажить, искать ошибку :)

Автор поста оценил этот комментарий

Спасибо,но увы,мы не можем это открыть и использовать.Делать необходимо в CodBlocks,а к визуалке нам запрещено подходить.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ну принцип тот же самый :) Смотри внутренности файла main.cxx :)


А в сети валяются мануалы как эту либу прикрутить к чему угодно:
https://www.youtube.com/watch?v=FxCdMM9H66I

показать ответы
Автор поста оценил этот комментарий

Раз уж ты все еще не выпустил новый урок, решил пофиксить баги))
Изменения:
* исправлен баг, когда марио умирал запрыгивая на противников
* добавлен туман войны
* добавлен рестарт уровня по клавише 'R'


https://drive.google.com/file/d/0B-5kzMyUwusIajUwUmFCbVUyTm8...

раскрыть ветку (1)
Автор поста оценил этот комментарий
Туман зачетно выглядит ))
Автор поста оценил этот комментарий

ты сам уроки пишешь или копипастишь?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Полная импровизация ))

P.S. Там же стоит тег "[мое]" :))

Автор поста оценил этот комментарий

Только уж не gravitySpeed, а acceleration

раскрыть ветку (1)
Автор поста оценил этот комментарий

Просто попытался дать названия переменным как можно проще и понятнее )))

показать ответы
Автор поста оценил этот комментарий

Автор, ты куда пропал? :(

раскрыть ветку (1)
Автор поста оценил этот комментарий
Никуда я не пропадал, просто сейчас не так много времени :) А на один пост уходит - ого-го.. Новый пост уже на 50% закончен
показать ответы
Автор поста оценил этот комментарий

Обьясните плиз значение операнда "->"

раскрыть ветку (1)
Автор поста оценил этот комментарий

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

(*pointerToSomeStruct).field = 10;

и

pointerToSomeStruct->field = 10;

это одно и тоже

показать ответы
Автор поста оценил этот комментарий

Чувак, ты крут )

Напоминает то, чем я занимался в 10-летнем возрасте )


Один вопрос: почему Купы -- это гуси? :D

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

В посте назвал на автомате ))

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

У меня вопрос, Я вообще .net'чик. Просто залез посмотреть. Для меня все эти многоуровневые if - else'ы выглядят как жуткий говнокод. Но подозреваю что это специфика языков С\С++? Так вот вопрос, сколько лет опыта работы с языками у тебя? Или это ты учишься и выкладываешь?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Пускай будет говнокод :) 6 лет трудового cтажа :)
показать ответы
Автор поста оценил этот комментарий
Ну это черепахи по задумке оригинальных разработчиков, но мы в детстве называли их "гусями" за этот странный спрайт )))

В посте назвал на автомате ))

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий
А, вот - особенно вариант летающих Koopa:
Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий

А препод - большой оригинал... Консольный вывод его насколько понимаю не устроит? А что за графическая библиотека?

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

А можно вопрос не совсем по игре,но так же по C++?Дали задание:Пользователь вводит координаты вершин(не более 4 точек) и полученную фигуру мы должны перемещать или поворачивать по\против часовой стрелке при нажатии на соответствующие клавиши\кнопки.Мы с другом уже 4 день не можем реализовать первую половину задания.Можете помочь? 

раскрыть ветку (1)
Автор поста оценил этот комментарий
А до какой части идет первая половина задания? :)
показать ответы
Автор поста оценил этот комментарий

Никак не могу понять где у меня ошибка.
https://github.com/deadly-cat/cpp-mario-console

Грибы двигаются только влево и ни в какую не хотят менять направление.


раскрыть ветку (1)
Автор поста оценил этот комментарий

Вместо сравнений у тебя в if-ах зачастую присваивания (не двойные равно, а одинарные)

показать ответы
Автор поста оценил этот комментарий

https://yadi.sk/d/CNQgKbAYhrKr9

Исправил теперь всё работает. Генератор уровней даже есть. 

раскрыть ветку (1)
Автор поста оценил этот комментарий

Забавно :)

Автор поста оценил этот комментарий

В смысле все существа перестали двигаться

раскрыть ветку (1)
Автор поста оценил этот комментарий

Возможно программа попадает в бесконечный цикл или проблема в самом апдейте, ставь точку останова внутри Update, запускай и смотри как там идет выполнение, или не идет :)

Если не доходит до Update, то нужно отдебажить SetupSystem и инициализацию.

показать ответы
Автор поста оценил этот комментарий

https://yadi.sk/i/3g8kzZyLhnaAk main.cpp

https://yadi.sk/i/C4t_Y-KQhsvYK generator.h

https://yadi.sk/d/4Amh3LsChsvb6 game_6

Я придумал генератор уровней, но всё перестало двигаться как можно это исправить?

раскрыть ветку (1)
Автор поста оценил этот комментарий

А что конкретно значит "все перестало двигаться"? Попробуй выполнить пошаговую отладку программы с точками останова :)

показать ответы
Автор поста оценил этот комментарий

@dansken немного не понял насчет гашения скорости и странного управления

раскрыть ветку (1)
Автор поста оценил этот комментарий
Когда прыгаешь например головой в блок, то висишь некоторое время под ним, пока скорость не изменится на положительную благодаря гравитации :) А у меня в коде я сразу обнуляю эту скорость для случаев когда нельзя попасть в этот блок :)


if( pointerToUnitData->ySpeed > 0.0 )

   pointerToUnitData->ySpeed = 0.0;


if( pointerToUnitData->ySpeed < 0.0 )

   pointerToUnitData->ySpeed = 0.0;

показать ответы
Автор поста оценил этот комментарий

https://yadi.sk/d/CNQgKbAYhrKr9 Моя работа, 2 уровень довольно странный но его можно пройти.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Not bad, из-за того, что нет гашения скорости немного странное управление ))

показать ответы
Автор поста оценил этот комментарий

Ну это логично, судя по тематике твоих постов) 

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

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

раскрыть ветку (1)
Автор поста оценил этот комментарий
Можешь и автоматически, если придумаешь для этого сложный красивый алгоритм для создания правдоподобных уровней :)


P.S. Не следующими, но буду :)

показать ответы
Автор поста оценил этот комментарий

Извиняюсь за нескромный вопрос, а кем ты работаешь?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Конкретно сейчас - никем ))) А вообще - С++ game-developer :)
показать ответы
Автор поста оценил этот комментарий

народ, глупый вопрос, но как собрать exe, для запуска на другом компе?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Release-сборка как указано в конце Части 2:

http://pikabu.ru/story/kursyi_sozdaniya_kompyuternyikh_igr_n...

А еще посмотри Часть 5.5:

http://pikabu.ru/story/kursyi_sozdaniya_kompyuternyikh_igr_n...

показать ответы
Автор поста оценил этот комментарий

Ну что более графическое. Я в этом не очень разбираюсь, но какое-нибудь создание проектов-игр при помощи OpenGL. Я как-то написал там кубик Рубика, но не очень хорошо разобрался с интерфейсом некоторых классов и прочим.  И что-то менее сухое, чем маны))

раскрыть ветку (1)
Автор поста оценил этот комментарий
Ну попробуйте разобратся с Hello World движка Irrlicht :)

http://irrlicht.ru/?page_id=37

показать ответы
Автор поста оценил этот комментарий

Спасибо огромное) думал, что поломал что-то) И еще вопрос, примеры с добавлением таких рисунков как у тебя в постах, будут еще? Очень хотелсь бы запилить что-то типа героев вторых)

раскрыть ветку (1)
Автор поста оценил этот комментарий

Будут, научимся и "рисунки" выводить :) А запилить вторые герои - это.. мм.. амбициозно :)

показать ответы
Автор поста оценил этот комментарий

Народ, такой вопрос, фигня с visual, нормально работал. Потом комп перезагрузился, и теперь при компиляции пишет что не может открыть source файл. Переустанавливал visual-не помогло. Кто знает как бороться?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Удали из солюшена source файлы и добавь как Add Existing
показать ответы
Автор поста оценил этот комментарий

Продолжение будут? Если нет, то где об этом всяком можно почитать? Я не профан в программировании, если что

раскрыть ветку (1)
Автор поста оценил этот комментарий
Будут, как только время и силы найду :) О чем конкретно почитать?
показать ответы
Автор поста оценил этот комментарий

Это WinApi чтоль? 

раскрыть ветку (1)
Автор поста оценил этот комментарий
Только консоль Винды :)
Автор поста оценил этот комментарий

Не читал предыдущие части, как и эту, но всё же интересно, как реализована отрисовка. Это просто вывод разноцветных символов в определённом месте?

раскрыть ветку (1)
Автор поста оценил этот комментарий
yeap :)
Автор поста оценил этот комментарий

Если будет не лень, то исправлю, чтобы касание снизу-вверх не считалось))


Гусей которые спрятались в панцирь убить никак нельзя. Только остановить, но это уже очень крутой скилл нужен. У меня не получилось )))

Летающие и бегающие вполне смертные)

раскрыть ветку (1)
Автор поста оценил этот комментарий
Раза с тридцатого прошел третий уровень :)

Well done... До последнего ждал в начальном запертом боксе какую-нибудь пасхалку, а там всего-лишь еще один гриб :)

показать ответы
Автор поста оценил этот комментарий

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

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

раскрыть ветку (1)
Автор поста оценил этот комментарий
Злит, что враг подпрыгнувший и ударивший тебя снизу - убивает тебя всесто того чтобы убится самому )))
показать ответы
Автор поста оценил этот комментарий

https://drive.google.com/file/d/0B-5kzMyUwusIUTJ1S29BdFRGX3c...

Сорцы в топовом комменте этой ветки :)

раскрыть ветку (1)
Автор поста оценил этот комментарий

У кого будет требовать dll-ку, скачайте и поставьте vc_redist.x86 отсюда:

https://www.microsoft.com/en-us/download/details.aspx?id=468...


Игра - супер ))) А перезапуска для безвыходных ситуаций нет? )))

Иллюстрация к комментарию
показать ответы
1
Автор поста оценил этот комментарий

Потратил два дня, но реализовал все задания :)

Теперь у меня свой марио с луиджи и гусями.


раскрыть ветку (1)
Автор поста оценил этот комментарий
Эй! А поделится релизным экзешником? ))
показать ответы