А вот моя работа, взял идею у одного из комментаторов с выводом еще и косинусоиды
https://yadi.sk/d/-7PPbK-Nsz0HxQ
Вот этот весь набор функций и т.п. называется Windows API ? В нем мне стоит разобраться, да?
Можно и так сказать, но WinAPI - это очень обширная область :) Скорее это подраздел WinAPI касательно работы с консолью :)
Просто тогда мне стоит подробно изучить все эти консольные функции, макросы, типы и т.п., чтобы разбираться лучше в твоих уроках. Не подскажешь литературу какую-нибудь или гайды?
А нам вообще нужны будут в дальнейшем все эти штуки для консоли Windows, типа положения курсора, цвета символов и фона? Просто очень сложно все это понимать, если не знаешь в целом как и для чего это используется. А писать код не думая - бессмысленно.
А консольная система рендера - это прототип реальной системы рендера :)
@Dansken, напомни, пожалуйста, почему в "void RenderSystemDrawText(int r, int c, const char* text,...)" идет ссылка на адрес символа "const char*"?
Потому что текстовые строки в С/С++ - это последовательные массивы символов :)
Мы берем адрес самого первого символа( указатель на него ) и дальше сдвигаемся по одному символу пока не встретим символ с кодом ноль.
Думаю скоро прочту Ваши посты до конца, и буду в поисках подобных примеров. Может Вы знаете где поискать, именно примеры готовых программ, не задачи. Прочитал в одном из посте что Вы в плариуме работали, у меня туда коллега ушла, вроде как администратором работает, Оля зовут.
Да программ - полный интернет :) Ищи - не хочу, на любой вид и вкус :)
P.S. А фамилия какая? )))
Спасибо Вам за Ваши труды. В свободное время учу программирование, вроде как теории хватает, но вот как раз подобных примеров не хватает. Причем вот отрисовка поля меня вообще поразила, на столько просто Вы это сделали, я бы кагутил как мог, а тут все легко и просто. Еще раз спасибо.
А в C# можно использовать данный рендер ?(обновлять только изменившийся символ), а то у меня сатана какая то выходит. Каждый раз обновляет всё и жутко дергается. Пытался совместить прошлый РПГ урок, с рендером из текущего, но стало только хуже.
Хэлп все сделал как в уроке вроде без ошибок при запуске 2 ошибки одна из них lnk2019 кто то знает в чем причина и как пофиксить ?
Кстати случаем не знаешь как окно на весь экран, с скрытием рамки окна, сделать? В инете не могу найти на с++((
Забудь пока про это :) Консоль - это не то место, где стоит делать такие штуки :) В 10м уроке можно будет сделать нормальный полноэкранный рендер :)
@Tinaynox, Привет, прости только руки дошли, обещаю ускориться)))
https://drive.google.com/open?id=14bD9-eVNGGofA3vYIKDn7UQsTbDS2_pY
Так все норм, все понятно, но информации много не лезет в голову))
Весьма неплохо, только что-то грузит все приложение :) FPS всего 17, а должен быть несколько тысяч :)
@Tinaynox, Добрый день уважаемый. Вот моё ДЗ https://yadi.sk/d/Njgium4l3QJYvx . Походу я тут первый у кого, при смещении, синусоида потихоньку сваливает вниз( если движение вправо). Исправлял по-всякому, создавал отдельный массив со значениями оси Y( заполненный по формуле).... не помогло.... Вернул все в более менее рабочий вариант, Ж-жопорукость=))). п.с. ещё раз спасибо за ваш труд.
Ни как не пойму как работает RenderSystemDrawText, объясните пожалуйста, кому не сложно.
А точнее не понимаю про text++, как мы указателю прибавляем единицу?
Строка текста - это последовательный массив однобайтовых(char) ASCII-символов( заканчивающийся нулевым символом ). Поэтому для работы со строками используют указатель на первый символ строки. Смещая этот указатель последовательно по одному символу(байту) до нулевого символа, мы сможем пройтись по всем символам строки.
text++ - это собственно смещение указателя на один байт.
Капец, забыл я тригонометрию уже конечно....
А это норм что он жрет четверть проца?
Я конечно понимаю что это бесконечный цикл, но не много ли для фактически пустой и не меняющейся консоли?
У меня вопросы возникли по поводу вот этой части. Я пытался с этим разобраться, и правильно ли я понял, что сначала мы сохраняем в переменную дескриптор выходного потока. Потом создаем переменную типа CONSOLE_CURSOR_INFO. Она является структурой и имеет две переменные: dwSize - это размер курсора в процентах от 1 до 100, bVisible - это виден курсор или нет.
Дальше мы вызываем функцию SetConsoleCursorInfo, которая устанавливает значения в консоль. Только вот я не понимаю, зачем там нужен первый аргумент. Понятно, что второй нам нужен для курсора, но зачем первый?
У тебя же может быть не одно, а (теоретически) несколько консольных окон :) Нужно указать в каком именно устанавливается новое cursorInfo :)
А консольная система рендера - это прототип реальной системы рендера :)
Можете помочь разобрать с ошибками? Директива stdafx.h подключена к основному файлу "game6"
Проект создан с использованием Precompiled Header (stdafx.h) :) При создании проекта нужно не забывать ставить галку "Empty project", чтобы этого не было.
Кое какую синусоиду всё таки сделал. Но вот заставить её двигаться, так и не сообразил как.
https://pp.vk.me/c631618/v631618965/21f43/phXC9hR85H8.jpg
P.S. не знаю как вы картинки в посты добавляете. На пикабу исключительно ради данных уроков зарегался
Норм норм :)
Для движения введи дополнительную переменную типа float и прибавляй к ней dt умноженный на какой-нибудь коэффициент :) В рендере синусоиды прибавляй этот коэффициент к x при вычислении синуса. :)
P.S. Картинки можно вставлять только если набрать достаточное количество рейтинга (лайков) :)
Спасибо за урок.
Надеюсь, я правильно понял принцип действия синуса и построение синусоиды -- ибо со школьной скамьи активно забивал всеми чреслами на тригонометрию. В другие работы не подглядывал, поэтому как есть...
Получается подключая renderSystem.h в game.cpp мы не видим там ничего кроме размера экрана и структуру ConsoleSymbolData :)
Классная система рендера, так всё просто)
Спасибо за урок)
Какая-то такая вышла синусоида и поверх нанёс еще косинусоиду)
Мать моя женщина, чтож это за звиздец. Обьясни будь добр что происходит когда мы пишем так: return(bla bla > 0) и если возможно про побитовые И и ИЛИ.
При (bla_bla > 0) получим true, если bla_bla больше нуля и false если bla_bla меньше или равно нулю. Return просто вернет это true или false как результат функции.
Побитовые И/ИЛИ для двух чисел - это выполнение операций И/ИЛИ для каждой соответствующей пары бит этих чисел: первый бит первого числа с первым битом второго и т.д. Результирующие биты дадут новое число, которое и будет результатом :)
https://github.com/Sacerdus/Thats-for-Learning/blob/master/R... вот ссылка(если так работает). Пока пытаюсь починить лаги, по этому близко к краю карты(или выходу) не подходить. Не додумал механику игры и расположение некоторых объектов условно. (просто теневой набросок раскрытия тумана войны косячит, условий недобавил)
Мне кажется. что дело в "Console.WriteLine()" внутри RenderSystemFlush.. Зачем там этот вызов?
https://yadi.sk/i/3g8kzZyLhnaAk main.cpp
https://yadi.sk/i/dnFkd-luhnaAv renderSystem.cpp
https://yadi.sk/i/Zmn-5XxQhnaAz renderSystem.h
https://yadi.sk/i/rKxaO9u9hnaAa consoleColor.h
Выполнил часть этого поста про систему рендера, не выводит ничего какая может быть ошибка?
Все, понял о чем вы.Да, он ни на что не влияет. что есть он там что нету, попробывал без него(просто мой косяк что он там есть, но эффекта он не дает, это как лишняя строка)
Осилил :)
https://github.com/deadly-cat/cpp-mario-console
Сделал оба ДЗ. Правда синусоида почему-то мне не нравится. Видимо потому что с математикой у меня плохо.
Систему координат сделал не столбики и колонки, а ширина, высота.
И не понравился больно длинный if для проверки изменилась ли ячейка, поэтому перегрузил операторы сравнения для ConsoleSymbolData
выводит ошибку
"... undefined reference to" к каждой функции, в renderSystem (.h или .cpp - я не знаю (( )