Процесс создания простой 3д бродилки без дополнительных библиотек на основе технологии Ray Casting Скачать проект можно по ссылке: www.dropbox.co... Проект с генерацией лабиринта (нажать пробел): github.com/dms...
Пікірлер: 178
@karelhana99774 жыл бұрын
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
@DmitryStopkevich4 жыл бұрын
I'm glad you like the video, despite the fact that it was not recorded in English
@darthvader81444 жыл бұрын
čuš
@DenisShaver3 жыл бұрын
@@DmitryStopkevich " it was not recorded in English". Ну сейчас вроде неплохой перевод с распознаванием речи )
@user-nc2xw1zb3y3 жыл бұрын
C++ low-level language?!
@abrajmek_zalilov2 жыл бұрын
@@user-nc2xw1zb3y btw closer to hardware then C#, afaik
@AndrewPstvt4 жыл бұрын
Спасибо за видео. Сделал свою версию в windows forms , и все прекрасно работает. Еще устранил эффект рыбьего глаза и добавил объекты разной высоты.
@DmitryStopkevich4 жыл бұрын
Пожалуйста) Рыбий глаз устраняется добавлением fov в этой строчке: int ceiling = (int)(ScreenHeight / 2.0 - ScreenHeight * Fov / distanceToWall);
@RugerJG2 жыл бұрын
@@DmitryStopkevich здравствуйте, а что делать, если показывает только точки на экране?
@sergiko1134 жыл бұрын
Топ контент
@starlord02084 жыл бұрын
Огромное спасибо, всегда хотел разобраться с этим, и тут наткнулся на твое видео.
@Panaxet2 жыл бұрын
Очень круто!!! Я тоже написал такой шутер, но пошел дальше: я еще и текстурировать стены смог!!! А в будущем планирую сделать мультиплеер и генерацию каких-нибудь структур.
@Cun_I2 жыл бұрын
а можешь результат в ютубе или гитхабе показать?
@mr.lelick3 жыл бұрын
Пора железо менять! FPS жестко проседает! спасибо за контент!
@sausage3273 Жыл бұрын
Если перед вами сплошная стена, это нормально - просто координаты игрока равны (0; 0) по x и по y соответственно. Поменяйте их, как в видео, на (3; 3). Также, если имеется проблема с дёрганой прорисовкой в консоли, это проблема с разрешением в консоли. Пишите: Console.SetWindowSize(ScreenWidth, ScreenHeight + 1); Console.SetBufferSize(ScreenWidth, ScreenHeight + 1); Поиграйтесь с разрешением в консоли, если мой вариант не помогает. Надеюсь кому-то поможет.
@ExCyberino3 жыл бұрын
Hard type of content to find, especially in C# ,thank you for this. I'll try to reproduce here. Cheers from Brazil
@ВалерийШестаков-у8ь3 жыл бұрын
Жаль, что не могу поставить сразу 10 лайков! Дружище, ты гений!
@robertjjack4 жыл бұрын
3:38 чтобы так выделить нужно зажать ALT
@nowhere-it-particular4 жыл бұрын
Спасибо!
@ДенисФолюш-ж5ъ3 жыл бұрын
Бля где ти бил до Этого?????????????????????????
@vladislavkochegin36284 жыл бұрын
Очень крутой видос, но хочется сделать замечание по поводу этого момента 25:25 Во-первых стринг и стрингбилдер оба ссылочные А причина по которой в этом сценарии стрингбилдер работает быстрее это потому что стринг неизменяемый, и когда мы его изменяем, то на самом деле для него каждый раз создаётся новый объект (что достаточно долго), а вот стрингбилдер уже изменять можно и никаких новых созданий объектов не происходит
@DmitryStopkevich4 жыл бұрын
Вы правы, они оба ссылочные. Тем не менее, как вы упомянули, стринг несет в себе много характеристик велью типов, являясь неизменяемым объектом, а также когда мы передаём его в методы, в них попадает копия этого объекта, так же как происходит с интом, например. Так что если называть стринг ссылочным типом, теряется суть его поведения. Архитектура этого типа ссылочная по историческим причинам, еще с с++. В то же время StringBuilder это классический reference тип, который единожды инициализируется и в последствии работа ведется с одним экземпляром
@vladislavkochegin36284 жыл бұрын
@@DmitryStopkevich да, так и есть, но с одним я тут не согласен. Насколько я знаю стринг при передаче его в качестве параметра не копируется. Копируется только ссылка на него
@DmitryStopkevich4 жыл бұрын
@@vladislavkochegin3628 Вот простой эксперимент: void Main() { string s = "Foo"; Test(s); Console.WriteLine(s); //Выведется Foo. Если бы в Test пришла ссылка на s, то при изменении его внутри этого метода, он бы изменился и в maine :) } void Test(string s) { s = "Bar"; }
@DmitryStopkevich4 жыл бұрын
@@vladislavkochegin3628 Единственный бонус от "ссылочности" у стринга это большее количество памяти чем у value type
@vladislavkochegin36284 жыл бұрын
@@DmitryStopkevich вы не так понимаете что тут происходит :) Тут в метод Test передаётся копия ссылки. Собственно она и изменяется в пределах этого метода, а как только метод отрабатывает, то копия, которой присвоен новый стринг удаляется, а ссылка в main остаётся неизменной)
@kudesn1k5143 жыл бұрын
Шикарно,просто великолепно) Огромное тебе спасибо,быстро и по делу)) Удачи)
@tarpaha Жыл бұрын
Круто, однако идти вдоль луча по 0.1 далеко не оптимально. На прямоугольной сетке raycast можно свести к построению линии алгоритмом Брезенхэма, где пикселями выступают блоки. В результате определение пересечения будет на порядок быстрее, а если использовать fixed point, то прям ну очень быстро. Собств-но как оно и было сделано в Wolfenstein 3D.
@leozero88343 жыл бұрын
Спасибо большое! Очень интересно, и без лишней информации.
@ChaoticWhirl3 жыл бұрын
Хороший ролик. Идея такой реализации на канале javidx9, он пишет на C++, и подробно объясняет всю физику и математику.
@АртемОношко-э8д3 жыл бұрын
просто божественный видос
@marsik37734 жыл бұрын
Почему так мало подписчиков у такого умного человека?
@НеизвестныйПользователь-щ3д2 жыл бұрын
Странно, что какие-то бесполезные Романы , набирают по 100 к подписчиков, которые только записывают видео для мотивация.
@polanas18793 жыл бұрын
Видео очень помогло, спасибо!
@ПетровичиК-м5у8 ай бұрын
А можно в collision ещё условие отступа от стены типа margin постоянного сделать? Если расстояние, например меньше полуметра, то дальше нельзя.Или это на 6,33 обьяснил?
@gamerscreen60442 жыл бұрын
А можно вопрос, я что-то не понимаю или тут нельзя стрелять? Хотя мне без разницы, я долго искал как можно сделать Ray Casting в C# в консоли, и по этому видос ПРОСТО ТОП! Ставлю лайк)
@gamerscreen60442 жыл бұрын
Так быстро лайк?) Спасибо)
@gamerscreen60442 жыл бұрын
Кстати, можно как-то добавить оружие в эту игру?
@DmitryStopkevich2 жыл бұрын
@@gamerscreen6044Можно конечно. Но для начала хорошо бы добавить врагов в виде спрайтов)
@moisha134 жыл бұрын
Очень круто
@flosti.4 жыл бұрын
Просто спасибо тебе!!!!!
@DmitryStopkevich4 жыл бұрын
Пожалуйста)
@nicel39083 жыл бұрын
Проблема с фпсом из-за того, что ты компилировал в debug'е программу. Но вообще годно, молодец
@imbydlo1552 Жыл бұрын
Снимай видео о том как ты стал таким крутым программистом
@Пиздаболнаремиссии3 жыл бұрын
Оригинально, интересно, круто
@ITPro-ym7cq6 ай бұрын
а как сделать стены разной высоты я делаю 3д рэикастинг на сишарп винформс
@Nestermanych2 жыл бұрын
Столкнулся с проблемой, у меня система Mac OS и в визуал Студио не дает изменить параметры ширины и высоты консоли, вот ошибка Unhandled exception. System.PlatformNotSupportedException: Operation is not supported on this platform.
@Sheffrus2 жыл бұрын
Это очень круто!
@irox_76373 жыл бұрын
Это настолько круто, что у меня просто нет слов
@Mandarin-h7t Жыл бұрын
ого!!!
@АлександрЕгоров-ф4н4 жыл бұрын
А из-за чего может быть трясение? Идет постоянное смещение вверх и вниз по одной строчке # стены (да и потом с \u**** тоже). Как будто считывает 2 разных расстояния через каждую итерацию. Более менее гладко становится только при глубине 20, но все равно достаточно сильно раздражает. А так тема очень интересная) По ней писал курсовую (из-за чего впрочем и решил видос глянуть), но на питоне) И если не трудно, можно полный код
@pess53104 жыл бұрын
Могу предположить, что это из-за маленького размера окна консоли (была 50 высота - ставь больше)
@DmitryStopkevich4 жыл бұрын
Вот проект : www.dropbox.com/s/zg4qaf62hoj2awv/Game3.zip?dl=0
@volodymyr_o3 жыл бұрын
добавлю в библиотеку, повторю как-то:)
@keithmartens88933 жыл бұрын
музыка из дума дает правильный настрой с первых секунд
@tamadegongzuo3 жыл бұрын
Хоть я полный ноль в этом, но я поставлю лайк чтобы продвинуть это видео :D
@RugerJG2 жыл бұрын
а что делать если выводит только точки?
@dragoperkovic10973 жыл бұрын
Вот это шедевр, а говорят математика не нужна
@mediafile99953 жыл бұрын
Ну, есть же unity, там матеша не нужна. Хы)
@dragoperkovic10973 жыл бұрын
@@mediafile9995 гыыыы
@rkgamesstudio69774 жыл бұрын
Awesome
@stanislavshilo60224 жыл бұрын
pantera - this love играет ;)
@franysnow9455 Жыл бұрын
я: не умею создавать документ тем временем этот хакер:
@eniluck50714 жыл бұрын
Забавная програмка :) Спасибо! посмотрю :)
@ьавооцта2 жыл бұрын
Чел харош
@ьавооцта2 жыл бұрын
Только у меня спустя 2 года ничего неполучилось хотя код точ в точ написал как на видео
@ьавооцта2 жыл бұрын
теперь все получилось (я просто координаты поменял), но получаеться так что вродебы все работает но мигает исли на чтото нажать то останавливаеться почему так?
@tma_art Жыл бұрын
повторил код до первой запуска, гдето восмой минута. у меня сплошной стена. несколько раз проверил. вроде точно скопировал. но нет сплошная стена. а так контент круто!
@МаратЯкупов-з2щ Жыл бұрын
та же проблема
@х.е.х-у3н2 жыл бұрын
А я поклоняюсь сине-желтой змее и написал такой шутер на python :)
@koe_sto11 ай бұрын
Какие расширения надо в VisualStudio установить чтобы код компилировался?
@DmitryStopkevich11 ай бұрын
.net и c#
@demax7703 Жыл бұрын
я не понимаю, почему у тебя buffer: и left: с top: подсвечиваются серым
@АлексейКарпунов-х8э3 жыл бұрын
А что делать если консольный вывод не такой быстрый как в вашем видео?
@anatoliytkachenko14983 жыл бұрын
Лайк!
@ivansychov15603 жыл бұрын
Я такое делал на OpenGL. Взял проект 3д лабиринта и сделал управление камерой с помощью клавиатуры. Самое сложное - взаимодействие со стенами.
@vanitwo11 ай бұрын
Ума не дам, вроде код в точности как в видео, но угол обзора на карте отображается не корректно, а если точнее то после изменения угла звездочки не пропадают. Разобрался: нужно инициализировать карту каждый раз после считывания клавиши с клавиатуры. В видео этот момент как-то быстро проскакивает не сразу заметил.
@ДанилТемежников2 жыл бұрын
блин, вроде все делаю так же как у тебя, но у меня прям трясет картинку, как - будто намного медленнее чем у тебя все выводит в консоль. это можно как то решить? ускорить
@DmitryStopkevich2 жыл бұрын
Не очень понимаю что значит трясет. Попробуй уменьшить разрешение в самих настройках консоли и в программе screen height и width
@НиколайКрасиков-ы8й4 жыл бұрын
А можно ссылку на подробное объяснение про угол, под которым будет идти луч, вывод формулы увидел, но не понял, есть что-то подробнее пожалуйста скиньте
@DmitryStopkevich4 жыл бұрын
Это тригонометрия. Мы знаем координаты игрока на карте и знаем угол под которым он смотрит. Делим экран, например, на 100 вертикальных полос. Для каждой вертикальной полоски экрана мы должны узнать расстояние до стены. Берем, например, первую вертикальную полосу слева. Для того чтоб узнать угол луча в этой полосе, мы должны отнять от угла под которым смотрит игрок половину его угла обзора. Для второй полоски это уже будет половина угла обзора минус 1 угол обзора/100, для третей половина угла обзора минус 2 угла обзора/100 и т.д. А дальше нужно увеличивать растояние для каждого такого луча и проверять куда он попал, для этого синус умножаем на расстояние чтоб узнать Х и косинус умножаем чтоб узнать У. educon.by/index.php/materials/math/trigonometria
@ivanvasilievs4 жыл бұрын
Прекрасно
@zeqqitch446 ай бұрын
слушай а как сделать чтобы пол, стены и тд были одновременно разными цветами?
@DmitryStopkevich6 ай бұрын
В консоли можно менять цвет шрифта, например: Console.ForegroundColor = ConsoleColor.Blue; Посмотреть все доступные цвета можно через enum: ConsoleColor[] consoleColors = (ConsoleColor[])ConsoleColor.GetValues(typeof(ConsoleColor));
@ВалерийШестаков-у8ь3 жыл бұрын
Все отлично работает, но появилась проблема :( В режиме отладки все работает идеально! Однако при запуске exe файла консоль ведет себя странно, словно периодически не допечатывает некоторые строки. В итоге картинка дергается(
@DmitryStopkevich3 жыл бұрын
Надо поменять настройки консоли в соответствии с переменными)
@markokazimirovc97124 жыл бұрын
Beautiful
@DInfinity33 жыл бұрын
Красава!
@IgYel4 жыл бұрын
Это охринеть
@GeorgeVanhalen4 жыл бұрын
крутой
@VepsianGameDesigner4 жыл бұрын
Прикольно!
@mid-e3p2 жыл бұрын
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; }
@mid-e3p2 жыл бұрын
@@DmitryStopkevich это за место Array.Fill(array: Screen, c)? И будут ли такие же ошибки дальше?
@DmitryStopkevich2 жыл бұрын
@@mid-e3pда, вместо array.fill(). Не будет ошибок)
@mid-e3p2 жыл бұрын
@@DmitryStopkevich большое спасибо
@xxxtentacion84014 жыл бұрын
круто продолжай в том же духе но можно заменить это чёрные стены на текстуру из интернета!💪👍👍
@JalexWROK3 жыл бұрын
Почему то когда автор рисовал объекты поространства вспомнился алтернативная графика commodore 64 в режиме petsi (это местный аналог asci)
@romanshell57403 жыл бұрын
Спасибо.
@DInfinity33 жыл бұрын
Что за мощная музыка играет на фоне?)
@DmitryStopkevich3 жыл бұрын
Ремиксы саундтрека из Doom (1, 2) из комьюнити zandronum :)
@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 На маке эти функции не работают, там консоль подругому устроена. Надо гуглить как изменять эти параметры
@6404-x1e4 жыл бұрын
Круто, но почему то дрожиn сильно изображение, менял высоту окна и глубину - не помогает. Не подскажете в чем может быть дело? Причем дрожание есть как в моей версии, которую я писал по видео, так и когда скачиваю вашу - то же самое, при fps 150... спасибо.
@DmitryStopkevich4 жыл бұрын
Попробуй выставить такие же параметры окна консоли как в видео и переменные ScreenWidth, ScreenHeight соответственно, а так же шрифт
@АлександрНевидомый-м9е Жыл бұрын
Как решили эту проблему?
@АлександрНевидомый-м9е Жыл бұрын
640 480, как вы решили эту проблему?
@hallstaff58703 жыл бұрын
как запустить проект если ти его скачал?
@outhander39414 жыл бұрын
Почти как вектозавр, только в консоли
@fab4key1734 жыл бұрын
первое видео вектозавра про шутер также был в консоли...
@etar125o4 жыл бұрын
Что делать если пишет что System.Array не содержит Fill?
@DmitryStopkevich4 жыл бұрын
Нужно выбрать .net framework 5.0 или выше. Или написать метод руками чтоб заполнить массив)
@hoyoreverse4 жыл бұрын
for (int i=0; i < arr.length; i++) { arr[i] = value }
@chobingames84194 жыл бұрын
nice job
@z1rkel8284 жыл бұрын
Графика топ
@DimDima094 жыл бұрын
Круто! А можно пожалуйста exe шник?
@DmitryStopkevich4 жыл бұрын
В описании есть ссылка на проект
@Last1k4 жыл бұрын
@@DmitryStopkevich Исходник?
@АндрейПлотников-ф1п3 жыл бұрын
А ХУ ЕТЬ ТЫ ГЕНИЙ, ОДНОЗНАЧНО ЛАЙК
@Георгий-у8ы4 жыл бұрын
А что за музыка в начале?
@DmitryStopkevich4 жыл бұрын
Sonic Clang - Doom E1M6
@nikolaikarmadonov25944 жыл бұрын
Мог бы добавить облака звёзды солнце луну смену дня
@DSanchez-q2r3 жыл бұрын
Найс, в названии говорится про шутер, а на деле просто бродилка
@volodymyr_o3 жыл бұрын
Вопрос к автору, а настоящие шутеры пишуться примерно также? (ну не учитывая использование библиотек) Я просто работаю с Asp.Net, и всегда было интересно как эти игры пишуться;)
@DmitryStopkevich3 жыл бұрын
Нет конечно) Игры делаются на готовых движках в основном. Например если вы хотите использовать C#, то можете посмотреть материалы по Unity 3D.
@volodymyr_o3 жыл бұрын
@@DmitryStopkevich мне не интересно научиться это делать, просто хочу понять как эти движки разрабатывались. Там ведь тоже эти векторы, 3д-математика и тд
@DmitryStopkevich3 жыл бұрын
@@volodymyr_o Да, в основе движков конечно лежат простейшая математика и механизмы вроде проецирования 3д на плоскость
А может цвет символов в консоли можно менять при уже запущенной консоли? может через саму Винду? Тогда можно цветную игру сделать =))
@DmitryStopkevich3 жыл бұрын
Конечно можно) Еще и текстуры можно наложить на стены в виде цветных символов
@officialdakari3 жыл бұрын
цвет символов - Console.ForegroundColor / Console.BackgroundColor
@Whitesize_4 жыл бұрын
а как сделать лучше графику?
@k390r54 жыл бұрын
А это уже графический движок надо написать
@kostyafrompiter4 жыл бұрын
Либо взять unity
@foxtv51504 жыл бұрын
Давно занимаетесь разработкой на c#?
@СергейВизгалов-м6е Жыл бұрын
очень интересно но ни фига не понятно
@_adixak_2 жыл бұрын
Не компилируется (27, 21): '"Console" не содержит определение для "SetWindowSize". (28, 21): '"Console" не содержит определение для "SetBufferSize". (29, 21): '"Console" не содержит определение для "CursorVisible". (125, 31): Аргумент 1: не удается преобразовать из "char[]" в "string".
@limo23883 жыл бұрын
Откуда ютуб знает что мне интересен с если я на ютубе об этом видео не смотрел
@Vicont40632 жыл бұрын
Нихрена...
@НищаяБлоха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)
@rorka12524 жыл бұрын
@@yargus613 .net framework 5.0 выбери
@amiccieofficial5544 жыл бұрын
@@rorka1252 ахах тупой вопрос (где выбрать?)
@rorka12524 жыл бұрын
@@amiccieofficial554 в студии
@hulk3147426 Жыл бұрын
Желательно пр каждой строчики кода показывать что происходит а так максимально не понятно
@Yg_boomin Жыл бұрын
у меня почему-то не работает управление нажимаю w и ведёт в другую сторону, код проверил, написано так же как и в видео.