Процесс создания простой 3д бродилки без дополнительных библиотек на основе технологии Ray Casting Скачать проект можно по ссылке: www.dropbox.co... Проект с генерацией лабиринта (нажать пробел): github.com/dms...
Пікірлер: 180
@karelhana99773 жыл бұрын
Great job, everything works great. I would expect these programs run on C ++ or another low-level language, but trying it in C # is not a bad idea. As a big C # fan, your video helped me a lot, thanks :) Czechia
@DmitryStopkevich3 жыл бұрын
I'm glad you like the video, despite the fact that it was not recorded in English
@darthvader81443 жыл бұрын
čuš
@DenisShaver3 жыл бұрын
@@DmitryStopkevich " it was not recorded in English". Ну сейчас вроде неплохой перевод с распознаванием речи )
@user-nc2xw1zb3y2 жыл бұрын
C++ low-level language?!
@abrajmek_zalilov2 жыл бұрын
@@user-nc2xw1zb3y btw closer to hardware then C#, afaik
@sergiko1134 жыл бұрын
Топ контент
@AndrewPstvt3 жыл бұрын
Спасибо за видео. Сделал свою версию в windows forms , и все прекрасно работает. Еще устранил эффект рыбьего глаза и добавил объекты разной высоты.
@DmitryStopkevich3 жыл бұрын
Пожалуйста) Рыбий глаз устраняется добавлением fov в этой строчке: int ceiling = (int)(ScreenHeight / 2.0 - ScreenHeight * Fov / distanceToWall);
@jellygrelly2 жыл бұрын
@@DmitryStopkevich здравствуйте, а что делать, если показывает только точки на экране?
@starlord02083 жыл бұрын
Огромное спасибо, всегда хотел разобраться с этим, и тут наткнулся на твое видео.
@user-zg8zp2zi2k2 жыл бұрын
Странно, что какие-то бесполезные Романы , набирают по 100 к подписчиков, которые только записывают видео для мотивация.
@Panaxet2 жыл бұрын
Очень круто!!! Я тоже написал такой шутер, но пошел дальше: я еще и текстурировать стены смог!!! А в будущем планирую сделать мультиплеер и генерацию каких-нибудь структур.
@Cun_I Жыл бұрын
а можешь результат в ютубе или гитхабе показать?
@mr.lelick3 жыл бұрын
Пора железо менять! FPS жестко проседает! спасибо за контент!
@sausage32739 ай бұрын
Если перед вами сплошная стена, это нормально - просто координаты игрока равны (0; 0) по x и по y соответственно. Поменяйте их, как в видео, на (3; 3). Также, если имеется проблема с дёрганой прорисовкой в консоли, это проблема с разрешением в консоли. Пишите: Console.SetWindowSize(ScreenWidth, ScreenHeight + 1); Console.SetBufferSize(ScreenWidth, ScreenHeight + 1); Поиграйтесь с разрешением в консоли, если мой вариант не помогает. Надеюсь кому-то поможет.
@robertjjack3 жыл бұрын
3:38 чтобы так выделить нужно зажать ALT
@bunikido22983 жыл бұрын
Спасибо!
@ДенисФолюш-ж5ъ3 жыл бұрын
Бля где ти бил до Этого?????????????????????????
@ExCyberino3 жыл бұрын
Hard type of content to find, especially in C# ,thank you for this. I'll try to reproduce here. Cheers from Brazil
@quackemail58393 жыл бұрын
Парень красавчик, запарился!
@tarpaha7 ай бұрын
Круто, однако идти вдоль луча по 0.1 далеко не оптимально. На прямоугольной сетке raycast можно свести к построению линии алгоритмом Брезенхэма, где пикселями выступают блоки. В результате определение пересечения будет на порядок быстрее, а если использовать fixed point, то прям ну очень быстро. Собств-но как оно и было сделано в Wolfenstein 3D.
@kudesn1k5143 жыл бұрын
Шикарно,просто великолепно) Огромное тебе спасибо,быстро и по делу)) Удачи)
@ChaoticWhirl2 жыл бұрын
Хороший ролик. Идея такой реализации на канале javidx9, он пишет на C++, и подробно объясняет всю физику и математику.
@ВалерийШестаков-у8ь2 жыл бұрын
Жаль, что не могу поставить сразу 10 лайков! Дружище, ты гений!
@moisha134 жыл бұрын
Очень круто
@vladislavkochegin36283 жыл бұрын
Очень крутой видос, но хочется сделать замечание по поводу этого момента 25:25 Во-первых стринг и стрингбилдер оба ссылочные А причина по которой в этом сценарии стрингбилдер работает быстрее это потому что стринг неизменяемый, и когда мы его изменяем, то на самом деле для него каждый раз создаётся новый объект (что достаточно долго), а вот стрингбилдер уже изменять можно и никаких новых созданий объектов не происходит
@DmitryStopkevich3 жыл бұрын
Вы правы, они оба ссылочные. Тем не менее, как вы упомянули, стринг несет в себе много характеристик велью типов, являясь неизменяемым объектом, а также когда мы передаём его в методы, в них попадает копия этого объекта, так же как происходит с интом, например. Так что если называть стринг ссылочным типом, теряется суть его поведения. Архитектура этого типа ссылочная по историческим причинам, еще с с++. В то же время StringBuilder это классический reference тип, который единожды инициализируется и в последствии работа ведется с одним экземпляром
@vladislavkochegin36283 жыл бұрын
@@DmitryStopkevich да, так и есть, но с одним я тут не согласен. Насколько я знаю стринг при передаче его в качестве параметра не копируется. Копируется только ссылка на него
@DmitryStopkevich3 жыл бұрын
@@vladislavkochegin3628 Вот простой эксперимент: void Main() { string s = "Foo"; Test(s); Console.WriteLine(s); //Выведется Foo. Если бы в Test пришла ссылка на s, то при изменении его внутри этого метода, он бы изменился и в maine :) } void Test(string s) { s = "Bar"; }
@DmitryStopkevich3 жыл бұрын
@@vladislavkochegin3628 Единственный бонус от "ссылочности" у стринга это большее количество памяти чем у value type
@vladislavkochegin36283 жыл бұрын
@@DmitryStopkevich вы не так понимаете что тут происходит :) Тут в метод Test передаётся копия ссылки. Собственно она и изменяется в пределах этого метода, а как только метод отрабатывает, то копия, которой присвоен новый стринг удаляется, а ссылка в main остаётся неизменной)
@flosti.3 жыл бұрын
Просто спасибо тебе!!!!!
@DmitryStopkevich3 жыл бұрын
Пожалуйста)
@user-vi8du7lp8y3 жыл бұрын
просто божественный видос
@marsik37733 жыл бұрын
Почему так мало подписчиков у такого умного человека?
@keithmartens88933 жыл бұрын
музыка из дума дает правильный настрой с первых секунд
@leozero88343 жыл бұрын
Спасибо большое! Очень интересно, и без лишней информации.
@rkgamesstudio69773 жыл бұрын
Awesome
@irox_76373 жыл бұрын
Это настолько круто, что у меня просто нет слов
@polanas18793 жыл бұрын
Видео очень помогло, спасибо!
@volodymyr_o3 жыл бұрын
добавлю в библиотеку, повторю как-то:)
@nicel39083 жыл бұрын
Проблема с фпсом из-за того, что ты компилировал в debug'е программу. Но вообще годно, молодец
@user-yp1xd9ho4g3 жыл бұрын
Оригинально, интересно, круто
@gamerscreen6044 Жыл бұрын
А можно вопрос, я что-то не понимаю или тут нельзя стрелять? Хотя мне без разницы, я долго искал как можно сделать Ray Casting в C# в консоли, и по этому видос ПРОСТО ТОП! Ставлю лайк)
@gamerscreen6044 Жыл бұрын
Так быстро лайк?) Спасибо)
@gamerscreen6044 Жыл бұрын
Кстати, можно как-то добавить оружие в эту игру?
@DmitryStopkevich Жыл бұрын
@@gamerscreen6044Можно конечно. Но для начала хорошо бы добавить врагов в виде спрайтов)
@imbydlo1552 Жыл бұрын
Снимай видео о том как ты стал таким крутым программистом
@user-il3ev4tm9n3 ай бұрын
А можно в collision ещё условие отступа от стены типа margin постоянного сделать? Если расстояние, например меньше полуметра, то дальше нельзя.Или это на 6,33 обьяснил?
@stanislavshilo60223 жыл бұрын
pantera - this love играет ;)
@DInfinity33 жыл бұрын
Красава!
@АлександрЕгоров-ф4н4 жыл бұрын
А из-за чего может быть трясение? Идет постоянное смещение вверх и вниз по одной строчке # стены (да и потом с \u**** тоже). Как будто считывает 2 разных расстояния через каждую итерацию. Более менее гладко становится только при глубине 20, но все равно достаточно сильно раздражает. А так тема очень интересная) По ней писал курсовую (из-за чего впрочем и решил видос глянуть), но на питоне) И если не трудно, можно полный код
@pess53104 жыл бұрын
Могу предположить, что это из-за маленького размера окна консоли (была 50 высота - ставь больше)
@DmitryStopkevich4 жыл бұрын
Вот проект : www.dropbox.com/s/zg4qaf62hoj2awv/Game3.zip?dl=0
@Sheffrus2 жыл бұрын
Это очень круто!
@dragoperkovic10973 жыл бұрын
Вот это шедевр, а говорят математика не нужна
@mediafile99953 жыл бұрын
Ну, есть же unity, там матеша не нужна. Хы)
@dragoperkovic10973 жыл бұрын
@@mediafile9995 гыыыы
@user-fk1bt1hf1m2 жыл бұрын
А я поклоняюсь сине-желтой змее и написал такой шутер на python :)
@NewFunnyAnimations3 жыл бұрын
Прикольно!
@eniluck50713 жыл бұрын
Забавная програмка :) Спасибо! посмотрю :)
@tma_art Жыл бұрын
повторил код до первой запуска, гдето восмой минута. у меня сплошной стена. несколько раз проверил. вроде точно скопировал. но нет сплошная стена. а так контент круто!
@user-fe6fk3qr3e Жыл бұрын
та же проблема
@ivansychov15603 жыл бұрын
Я такое делал на OpenGL. Взял проект 3д лабиринта и сделал управление камерой с помощью клавиатуры. Самое сложное - взаимодействие со стенами.
@tamadegongzuo3 жыл бұрын
Хоть я полный ноль в этом, но я поставлю лайк чтобы продвинуть это видео :D
@markokazimirovc97123 жыл бұрын
Beautiful
@GeorgeVanhalen3 жыл бұрын
крутой
@jellygrelly Жыл бұрын
а что делать если выводит только точки?
@franysnow945511 ай бұрын
я: не умею создавать документ тем временем этот хакер:
@ivanvasilievs3 жыл бұрын
Прекрасно
@Mandarin-h7t Жыл бұрын
ого!!!
@anatoliytkachenko14983 жыл бұрын
Лайк!
@user-hq7wf9ge7d2 жыл бұрын
Чел харош
@user-hq7wf9ge7d2 жыл бұрын
Только у меня спустя 2 года ничего неполучилось хотя код точ в точ написал как на видео
@user-hq7wf9ge7d2 жыл бұрын
теперь все получилось (я просто координаты поменял), но получаеться так что вродебы все работает но мигает исли на чтото нажать то останавливаеться почему так?
@xxxtentacion84013 жыл бұрын
круто продолжай в том же духе но можно заменить это чёрные стены на текстуру из интернета!💪👍👍
@IgYel3 жыл бұрын
Это охринеть
@romanshell57403 жыл бұрын
Спасибо.
@vanitwo6 ай бұрын
Ума не дам, вроде код в точности как в видео, но угол обзора на карте отображается не корректно, а если точнее то после изменения угла звездочки не пропадают. Разобрался: нужно инициализировать карту каждый раз после считывания клавиши с клавиатуры. В видео этот момент как-то быстро проскакивает не сразу заметил.
@ITPro-ym7cqАй бұрын
а как сделать стены разной высоты я делаю 3д рэикастинг на сишарп винформс
@outhander39413 жыл бұрын
Почти как вектозавр, только в консоли
@fab4key1733 жыл бұрын
первое видео вектозавра про шутер также был в консоли...
@DSanchez-q2r3 жыл бұрын
Найс, в названии говорится про шутер, а на деле просто бродилка
@Douks3 жыл бұрын
А сколько лет вы знакомы з программированием?
@DmitryStopkevich3 жыл бұрын
Я с детства увлекался схемотехникой и программированием как хобби. Ну а рабочего опыта наверное лет 6 всего)
@Yg_boomin Жыл бұрын
у меня почему-то не работает управление нажимаю w и ведёт в другую сторону, код проверил, написано так же как и в видео.
@user-il5ii4ko8s3 жыл бұрын
А ХУ ЕТЬ ТЫ ГЕНИЙ, ОДНОЗНАЧНО ЛАЙК
@Nestermanych2 жыл бұрын
Столкнулся с проблемой, у меня система Mac OS и в визуал Студио не дает изменить параметры ширины и высоты консоли, вот ошибка Unhandled exception. System.PlatformNotSupportedException: Operation is not supported on this platform.
@JalexWROK3 жыл бұрын
Почему то когда автор рисовал объекты поространства вспомнился алтернативная графика commodore 64 в режиме petsi (это местный аналог asci)
@chobingames84193 жыл бұрын
nice job
@koe_sto6 ай бұрын
Какие расширения надо в VisualStudio установить чтобы код компилировался?
@DmitryStopkevich6 ай бұрын
.net и c#
@z1rkel8283 жыл бұрын
Графика топ
@user-zh8gn8iw1c3 жыл бұрын
А что делать если консольный вывод не такой быстрый как в вашем видео?
@demax7703 Жыл бұрын
я не понимаю, почему у тебя buffer: и left: с top: подсвечиваются серым
@zeqqitch44Ай бұрын
слушай а как сделать чтобы пол, стены и тд были одновременно разными цветами?
@DmitryStopkevichАй бұрын
В консоли можно менять цвет шрифта, например: Console.ForegroundColor = ConsoleColor.Blue; Посмотреть все доступные цвета можно через enum: ConsoleColor[] consoleColors = (ConsoleColor[])ConsoleColor.GetValues(typeof(ConsoleColor));
@volodymyr_o3 жыл бұрын
Вопрос к автору, а настоящие шутеры пишуться примерно также? (ну не учитывая использование библиотек) Я просто работаю с Asp.Net, и всегда было интересно как эти игры пишуться;)
@DmitryStopkevich3 жыл бұрын
Нет конечно) Игры делаются на готовых движках в основном. Например если вы хотите использовать C#, то можете посмотреть материалы по Unity 3D.
@volodymyr_o3 жыл бұрын
@@DmitryStopkevich мне не интересно научиться это делать, просто хочу понять как эти движки разрабатывались. Там ведь тоже эти векторы, 3д-математика и тд
@DmitryStopkevich3 жыл бұрын
@@volodymyr_o Да, в основе движков конечно лежат простейшая математика и механизмы вроде проецирования 3д на плоскость
@1_ESHO_17 ай бұрын
Мне сюда рано лезть...
@user-px4tj9cp9u3 жыл бұрын
А можно ссылку на подробное объяснение про угол, под которым будет идти луч, вывод формулы увидел, но не понял, есть что-то подробнее пожалуйста скиньте
@DmitryStopkevich3 жыл бұрын
Это тригонометрия. Мы знаем координаты игрока на карте и знаем угол под которым он смотрит. Делим экран, например, на 100 вертикальных полос. Для каждой вертикальной полоски экрана мы должны узнать расстояние до стены. Берем, например, первую вертикальную полосу слева. Для того чтоб узнать угол луча в этой полосе, мы должны отнять от угла под которым смотрит игрок половину его угла обзора. Для второй полоски это уже будет половина угла обзора минус 1 угол обзора/100, для третей половина угла обзора минус 2 угла обзора/100 и т.д. А дальше нужно увеличивать растояние для каждого такого луча и проверять куда он попал, для этого синус умножаем на расстояние чтоб узнать Х и косинус умножаем чтоб узнать У. educon.by/index.php/materials/math/trigonometria
@DInfinity33 жыл бұрын
Что за мощная музыка играет на фоне?)
@DmitryStopkevich3 жыл бұрын
Ремиксы саундтрека из Doom (1, 2) из комьюнити zandronum :)
@user-be9rc4yz8r Жыл бұрын
блин, вроде все делаю так же как у тебя, но у меня прям трясет картинку, как - будто намного медленнее чем у тебя все выводит в консоль. это можно как то решить? ускорить
@DmitryStopkevich Жыл бұрын
Не очень понимаю что значит трясет. Попробуй уменьшить разрешение в самих настройках консоли и в программе screen height и width
@foxtv51503 жыл бұрын
Давно занимаетесь разработкой на c#?
@ВалерийШестаков-у8ь2 жыл бұрын
Все отлично работает, но появилась проблема :( В режиме отладки все работает идеально! Однако при запуске exe файла консоль ведет себя странно, словно периодически не допечатывает некоторые строки. В итоге картинка дергается(
@DmitryStopkevich2 жыл бұрын
Надо поменять настройки консоли в соответствии с переменными)
@hallstaff58703 жыл бұрын
как запустить проект если ти его скачал?
@nikolaikarmadonov25943 жыл бұрын
Мог бы добавить облака звёзды солнце луну смену дня
Char c = ' ' ; While (true) { If (Console.KeyAvailable) { C = Console.ReadKey().KeyChar; } Array.Fill(array: Screen, c) } Fill подчеркивается красным и говорит что array не содержит определения для Fill. Что делать помогите пожалуйста
@DmitryStopkevich2 жыл бұрын
У тебя стоит старая версия .net, в ней ещё нет такой функции для массивов. Ты можешь сам написать for(int i = 0; i < Screen.Length; i++) { Screen[i] = c; }
@user-fq1sw3sf8d2 жыл бұрын
@@DmitryStopkevich это за место Array.Fill(array: Screen, c)? И будут ли такие же ошибки дальше?
@DmitryStopkevich2 жыл бұрын
@@user-fq1sw3sf8dда, вместо array.fill(). Не будет ошибок)
@user-fq1sw3sf8d2 жыл бұрын
@@DmitryStopkevich большое спасибо
@user-io1wo1nr1i4 жыл бұрын
Круто, но почему то дрожиn сильно изображение, менял высоту окна и глубину - не помогает. Не подскажете в чем может быть дело? Причем дрожание есть как в моей версии, которую я писал по видео, так и когда скачиваю вашу - то же самое, при fps 150... спасибо.
@DmitryStopkevich3 жыл бұрын
Попробуй выставить такие же параметры окна консоли как в видео и переменные ScreenWidth, ScreenHeight соответственно, а так же шрифт
@user-et2yq3ro9f Жыл бұрын
Как решили эту проблему?
@user-et2yq3ro9f Жыл бұрын
640 480, как вы решили эту проблему?
@DimDima094 жыл бұрын
Круто! А можно пожалуйста exe шник?
@DmitryStopkevich4 жыл бұрын
В описании есть ссылка на проект
@Last1k3 жыл бұрын
@@DmitryStopkevich Исходник?
@_adixak_2 жыл бұрын
Не компилируется (27, 21): '"Console" не содержит определение для "SetWindowSize". (28, 21): '"Console" не содержит определение для "SetBufferSize". (29, 21): '"Console" не содержит определение для "CursorVisible". (125, 31): Аргумент 1: не удается преобразовать из "char[]" в "string".
@dmitriykonopinskiy37933 жыл бұрын
А может цвет символов в консоли можно менять при уже запущенной консоли? может через саму Винду? Тогда можно цветную игру сделать =))
@DmitryStopkevich3 жыл бұрын
Конечно можно) Еще и текстуры можно наложить на стены в виде цветных символов
@officialdakari2 жыл бұрын
цвет символов - Console.ForegroundColor / Console.BackgroundColor
@albruspigtailed50392 жыл бұрын
А врага и оружие можно сделать можно сделать?
@DmitryStopkevich2 жыл бұрын
Конечно можно. Для врагов нужно использовать "спрайты", а оружие просто рисовать картинкой внизу экрана
@albruspigtailed50392 жыл бұрын
@@DmitryStopkevich спс
@albruspigtailed50392 жыл бұрын
@@DmitryStopkevich слушай, а как ты думаешь как трудно будет сделать игру по типу ГТА 1 похожим способом
@Nestermanych2 жыл бұрын
@@DmitryStopkevich Пишу на VS Code. Столкнулся с проблемой, у меня система Mac OS и в визуал Студио не дает изменить параметры ширины и высоты консоли, вот ошибка Unhandled exception. System.PlatformNotSupportedException: Operation is not supported on this platform.
@DmitryStopkevich2 жыл бұрын
@@Nestermanych На маке эти функции не работают, там консоль подругому устроена. Надо гуглить как изменять эти параметры
@limo23883 жыл бұрын
Откуда ютуб знает что мне интересен с если я на ютубе об этом видео не смотрел
@Whitesize_3 жыл бұрын
а как сделать лучше графику?
@k390r53 жыл бұрын
А это уже графический движок надо написать
@kostyafrompiter3 жыл бұрын
Либо взять unity
@НищаяБлоха3 жыл бұрын
If else if else if else if else if...
@vishnalukick96073 жыл бұрын
Я:играю в кс го Мои тиммейты:
@yargus6134 жыл бұрын
Вопрос, у меня в Array.Fill(Screen, c); Ошибка CS0117 '"Array" не содержит определение для "Fill". Кто знает как исправить?
@DmitryStopkevich4 жыл бұрын
Этот метод есть только в .net 5.0 или .net core начиная с версии 2. Ты скорее всего работаешь на .net 4.5, в этом случае напиши отдельный метод для заполнения массива используя цикл for
@yargus6134 жыл бұрын
@@DmitryStopkevich Я работал в Консольное приложение (.net framework)
@rorka12523 жыл бұрын
@@yargus613 .net framework 5.0 выбери
@amiccieofficial5543 жыл бұрын
@@rorka1252 ахах тупой вопрос (где выбрать?)
@rorka12523 жыл бұрын
@@amiccieofficial554 в студии
@hulk3147426 Жыл бұрын
Желательно пр каждой строчики кода показывать что происходит а так максимально не понятно
@GanovAlex3 жыл бұрын
крутяк 👍
@etar125o3 жыл бұрын
Что делать если пишет что System.Array не содержит Fill?
@DmitryStopkevich3 жыл бұрын
Нужно выбрать .net framework 5.0 или выше. Или написать метод руками чтоб заполнить массив)
@hoyoreverse3 жыл бұрын
for (int i=0; i < arr.length; i++) { arr[i] = value }