Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 23.07.2016
Сообщений: 5
1

С чего начать написание игры

23.07.2016, 03:57. Показов 2574. Ответов 41
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Хотел бы начать изучать C++, конечно же не с нуля. На данный момент уже знаю скриптовый язык подобный C++. Немного увлекался C#, писал мелкие программки, потом забросил.

Так вот, сейчас бы хотел заняться "написанием небольшой игры" (со своим движком), предположим это будут гонки. Как вообще это происходит? Какие программы требуются? Прошу немного рассказать про это
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2016, 03:57
Ответы с готовыми решениями:

С чего стоит начать для создания игры?
Хочу сотворить относительно простенькую 2D бродилку с элементами RPG... Был не совсем удачный опыт...

С чего начать создание компьютерной игры, где битвы происходят в теле человека?
С чего начать создание компютернной игры где битвы порисходят в теле человека

С чего начать 3д моделирование персонажей для игры, создаваемой с помощью Unreal Engine 4
Здравствуйте! Не могли бы мне помочь с одним вопросом?Я создаю игру на Unreal Engine 4,и у меня...

С чего начать написание игры Домино
Добрый вечер. Подскажите пожалуйста с чего начать, получил задание написать игру "домино", а что и...

41
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
24.07.2016, 19:43 21
Author24 — интернет-сервис помощи студентам
EVP, попробую выразить свои мысли яснее: одно дело знать как все работает и в случаи необходимости применить свои знания, а совсем другое дело все самому с нуля писать.. это попросту глупо... с так же успехом можно бросить все и пойти в лес жить, и начать огонь-колесо-и т.д.... технологии постоянно развиваются, нужно использовать, то что уже придумали и по возможности улучшать это...
0
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
24.07.2016, 19:54 22
Цитата Сообщение от hoggy Посмотреть сообщение
хотите сказать, что directdraw 7 работает на новых виндах?
работает, да и не вижу причин не работать.

Цитата Сообщение от hoggy Посмотреть сообщение
специально не поленился, запустил свою 2015,
но моя тоже не знает.
гляньте, что за тайпдеф скрывается за LPWOID?
да, тут я не угадал - давно не связывался с кодом, не LPWOID требует явного приведения а LPCWSTR.
вот в таком виде код(взятый из диска прилагаемого с книгой)
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
// DEMO2_3.CPP - A complete windows program
 
// INCLUDES ///////////////////////////////////////////////
#define WIN32_LEAN_AND_MEAN  // just say no to MFC
 
#include <windows.h>   // include all the windows headers
#include <windowsx.h>  // include useful macros
#include <stdio.h>     
#include <math.h>
 
// DEFINES ////////////////////////////////////////////////
 
// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"
 
// GLOBALS ////////////////////////////////////////////////
 
 
// FUNCTIONS //////////////////////////////////////////////
LRESULT CALLBACK WindowProc(HWND hwnd, 
                            UINT msg, 
                            WPARAM wparam, 
                            LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT     ps;     // used in WM_PAINT
HDC             hdc;    // handle to a device context
 
// what is the message 
switch(msg)
    {   
    case WM_CREATE: 
        {
        // do initialization stuff here
 
        // return success
        return(0);
        } break;
 
    case WM_PAINT: 
        {
        // simply validate the window
        hdc = BeginPaint(hwnd,&ps);  
        // you would do all your painting here
        EndPaint(hwnd,&ps);
 
        // return success
        return(0);
        } break;
 
    case WM_DESTROY: 
        {
        // kill the application, this sends a WM_QUIT message 
        PostQuitMessage(0);
 
        // return success
        return(0);
        } break;
 
    default:break;
 
    } // end switch
 
// process any messages that we didn't take care of 
return (DefWindowProc(hwnd, msg, wparam, lparam));
 
} // end WinProc
 
// WINMAIN ////////////////////////////////////////////////
int WINAPI WinMain( HINSTANCE hinstance,
                    HINSTANCE hprevinstance,
                    LPSTR lpcmdline,
                    int ncmdshow)
{
 
WNDCLASSEX winclass; // this will hold the class we create
HWND       hwnd;     // generic window handle
MSG        msg;      // generic message
 
// first fill in the window class stucture
winclass.cbSize         = sizeof(WNDCLASSEX);
winclass.style          = CS_DBLCLKS | CS_OWNDC | 
                          CS_HREDRAW | CS_VREDRAW;
winclass.lpfnWndProc    = WindowProc;
winclass.cbClsExtra     = 0;
winclass.cbWndExtra     = 0;
winclass.hInstance      = hinstance;
winclass.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
winclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
winclass.hbrBackground  = (HBRUSH)GetStockObject(BLACK_BRUSH);
winclass.lpszMenuName   = NULL;
winclass.lpszClassName  = WINDOW_CLASS_NAME;
winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
 
// register the window class
if (!RegisterClassEx(&winclass))
    return(0);
 
// create the window
if (!(hwnd = CreateWindowEx(NULL, // extended style
                            WINDOW_CLASS_NAME,   // class
                            "Your Basic Window", // title
                            WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                            0,0,        // initial x,y
                            400,400,  // initial width, height
                            NULL,       // handle to parent 
                            NULL,       // handle to menu
                            hinstance,// instance of this application
                            NULL))) // extra creation parms
return(0);
 
// enter main event loop
while(GetMessage(&msg,NULL,0,0))
     { 
     // translate any accelerator keys
     TranslateMessage(&msg);
 
     // send the message to the window proc
     DispatchMessage(&msg);
     } // end while
 
// return to Windows like this
return(msg.wParam);
 
} // end WinMain
 
///////////////////////////////////////////////////////////

ловит ошибки
но стоит добавить (LPCWSTR) в строки 92, 101, 102 - и код работает
1
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.07.2016, 20:02 23
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
работает, да и не вижу причин не работать.
ну потому что не поддерживается.
а майкрософт не гарантирует никакой обратной совместимости для решений,
которые она снимает с поддержки.

я сам по итогу чтания Ламота оказался счастливым обладателем собственного 2д движка на директдрав7.
ну вот он у меня так и не взлетел ни на чем кроме xp.

ну может я просто сам чего то накосарезил.

Цитата Сообщение от Stitch Igorek Посмотреть сообщение
LPCWSTR
у винды есть в настройках проекта галочки: мультибайт, или юникод.
ну вот, в современных виндах - юникод во все поля.

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

то бишь, вместо такого:
C++
1
#define WINDOW_CLASS_NAME "WINCLASS1"
использовать такое:
C++
1
#define WINDOW_CLASS_NAME L"WINCLASS1"
0
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
24.07.2016, 20:50 24
Цитата Сообщение от hoggy Посмотреть сообщение
ну вот он у меня так и не взлетел ни на чем кроме xp.
у меня на семерке идет, и уже скомпилированные примеры игр, которые на диске, тоже работают

Добавлено через 1 минуту
единственно что не работает - это код с 24х битной графикой

Добавлено через 29 минут
Цитата Сообщение от JIawliet Посмотреть сообщение
а совсем другое дело все самому с нуля писать.. это попросту глупо...
тема называется "с чего начать...", глупо было бы начинать не с азов, а с изучения документации супернавороченого 3D движка с кучей разных средств которые опытной команде игроделов не всегда требуются, а уж новичку, который только собрался это изучать и подавно
1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
24.07.2016, 21:03 25
Stitch Igorek, но и старье тоже изучать смысла нет.
И не пригодится и переучиваться придется.
Так что это всё смотря с какой стороны смотреть
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
24.07.2016, 21:04 26
Цитата Сообщение от JIawliet Посмотреть сообщение
одно дело знать как все работает и в случаи необходимости применить свои знания,
Да, это необходимо уметь делать.

Цитата Сообщение от JIawliet Посмотреть сообщение
а совсем другое дело все самому с нуля писать.. это попросту глупо...
ТС не знает как всё работает, он пытается изучить это.
Изучать предметную область можно на чужих ошибках (чужой игровой движок)
или на своих (свой игровой движок).

Цитата Сообщение от JIawliet Посмотреть сообщение
с так же успехом можно бросить все и пойти в лес жить, и начать огонь-колесо-и т.д....
Повторюсь:
Цитата Сообщение от EVP Посмотреть сообщение
Главное - вовремя остановиться.
Цитата Сообщение от EVP Посмотреть сообщение
Тут лишь надо определить черту, когда надо остановиться и ограничить свои хотелки.
Цитата Сообщение от JIawliet Посмотреть сообщение
технологии постоянно развиваются, нужно использовать, то что уже придумали и по возможности улучшать это...
Чтобы улучшать что-то, это что-то надо изучить.
А изучать можно на чужих ошибках или на своих...

Иногда надо наделать своих ошибок, чтобы начать изучать чужие ошибки.
Иногда надо увидеть кучу чужих ошибок, чтобы начать делать свои.

Всегда есть выбор! Успехов!
1
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
24.07.2016, 21:09 27
Цитата Сообщение от Croessmah Посмотреть сообщение
Stitch Igorek, но и старье тоже изучать смысла нет.
Согласен, но не нашел я более новой с таким же легким преподнесением материала, пробовал читать эту книгу, но от нее я засыпаю через 2-3 страницы=)
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
24.07.2016, 22:51 28
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
глупо было бы начинать не с азов
согласен, но не писать же все с нуля... приведу пример: вы начинаете знакомство с контейнерами STL, узнаете что такое вектор... вы ж не лезете в код реализации сразу, не узнаете первым делом как он реализован и как перераспределяется в памяти, не узнаете как классы итератора и вектора взаимодействуют.. нет, нет и еще раз нет... сначала в начинает с простого - push_back, pop_back и так далее по нарастающей... из этого следует вывод: для того чтоб пользоваться технологией, не обязательно знать всю подноготную (реализацию)... азы знать нужно (хорошему программисту), но совсем не обязательно с них начинать, а тем более если это касается создания своего движка...
0
0 / 0 / 0
Регистрация: 23.07.2016
Сообщений: 5
25.07.2016, 00:30  [ТС] 29
Честно скажу, когда я только начал изучать программирование, а язык был Pawn, мне тоже все говорили "скачивай с инета чужие скрипты и смотри их", но это было до такой степени скучно...

В итоге как все получилось:
гуглил или спрашивал на форуме как и что сделать
изучал что находил
применял это как мне надо

На сегодня знаю этот язык 90% точно.

И да, если что я за год написал примерно 35к строк кода в одиночку Не думаю что мне надоест делать движок, тем более я же не хочу какую то супер физику.
Еще хотел спросить, чем DirectX отличается от OpenGL? Или это как то можно связать?
0
5158 / 2770 / 465
Регистрация: 05.10.2013
Сообщений: 7,321
Записей в блоге: 147
25.07.2016, 10:32 30
Цитата Сообщение от _KROSCH Посмотреть сообщение
И да, если что я за год написал примерно 35к строк кода в одиночку
На С++? Какой результат работы этого кода? То есть что он делает? Запишите видео для youtube, чтобы продемонстрировать, чего вы достигли.
0
510 / 272 / 60
Регистрация: 14.12.2010
Сообщений: 548
25.07.2016, 17:31 31
Цитата Сообщение от _KROSCH Посмотреть сообщение
Еще хотел спросить, чем DirectX отличается от OpenGL?
Сравнение OpenGL и Direct3D.
OpenGl vs DirectX episode II.
Добавлю:
DirectX - только для Windows, печалька.
OpenGL (OpenGL ES 2.0+, WebGL) - доступен на различных платформах (WEB, Linux, Мобильные системы), красота.
Цитата Сообщение от _KROSCH Посмотреть сообщение
Или это как то можно связать?
Можно глянуть, как это сделано в Ogre3d.
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
25.07.2016, 18:35 32
Цитата Сообщение от _KROSCH Посмотреть сообщение
Как вообще это происходит? Какие программы требуются? Прошу немного рассказать про это
Начать нужно с инфраструктуры движка. т.е. нормальных массивов объектов рассчитанных на хранение указателей на объекты, очень здорово если со слежением за жизненным циклом хранимого объекта, потом очень стоит на этих массивах собрать шаблон дерева. Дальше стоит выбрать программу 3D моделирования и сделать экспортер из нее в свой формат. Очень желательно при этом сделать систему полиморфной подгрузки объектов, бо как если программа 3D моделирования позволяет не только треугольнички моделировать, но и давать данные для модели коллизий неполиморфной подгрузки не хватит, да и вообще полиморфная много где пригодится, посему очень неплохо так или иначе поиметь RTTI. Еще неплохо бы иметь мультисписки. т.е система такая - контейнер имеет кроме списка владения списки обработки по типам. при переключении у объекта какого либо свойства он автоматически заносится/убирается в тот или иной список обработки. Могут понадобится и подобные мультидеревья. После того как будет трасса редактор-движек можно подумать об отрисовке и физ.модели. для отрисовки очень удобно сделать свою систему API (обычно базовый класс или интерфейс) под который потом делается потомок-обертка для любого API (Например для любой версии DX или GL). НУ а дальше все просто. Последовательно по одному из списков запускается расчет перемещения, потом по другому расчет отрисовки. (может и другая обработка запускатся, у меня например 5 списков только в физ модели - расчет работы двигателей и прочих внутренних процессов, расчет скорости, рассчет поворота и перемещения, объекты могущие вызвать коллизию, объекты с которыми можно столкнуться).

Добавлено через 25 минут
Цитата Сообщение от JIawliet Посмотреть сообщение
приведу пример: вы начинаете знакомство с контейнерами STL, узнаете что такое вектор
Если хотите заниматься разработкой игрового движка забудьте про STL напрочь. Если не можешь сам реализовать нормальный аналог std:vector со слежением за жизненным циклом содержимого, то о разработке игровых движков и думать нечего. Опять же вся эта stl муть для реал-тайм приложений абсолютно неприменима и ненадежна, мало того не имеет в своем составе вообще ничего нужного (например двунаправленных указателей даже в ограниченном контейнер-содержимое виде), так же как и для около-реал-тайм, коими являются игры (около исключительно потому что на не реалтайм оси можно добится только околореалтайма но никак не реалтайма), посему контейнеры и тп. придется делать самостоятельно.
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
25.07.2016, 18:44 33
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если хотите заниматься разработкой игрового движка забудьте про STL напрочь.
я не собираюсь разрабатывать свой собственный движок... перечитайте тему заново, вдумчиво и внимательно...
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
25.07.2016, 18:51 34
_KROSCH, Намечается проект именно на Pawno, есть парочка интересных концепций и народ который готов вложится в сервак, если интересно поучаствовать отпишись в личку.

Добавлено через 2 минуты
Цитата Сообщение от JIawliet Посмотреть сообщение
я не собираюсь разрабатывать свой собственный движок... перечитайте тему заново, вдумчиво и внимательно...
Начнем с того что топик-стартер собирается:
Цитата Сообщение от _KROSCH Посмотреть сообщение
Так вот, сейчас бы хотел заняться "написанием небольшой игры" (со своим движком), предположим это будут гонки.
0
47 / 47 / 31
Регистрация: 02.04.2016
Сообщений: 312
25.07.2016, 18:52 35
Цитата Сообщение от JIawliet Посмотреть сообщение
приведу пример: вы начинаете знакомство с контейнерами STL
до сих пор не знаю STL, да и для чего? да, там много чего удобного, но мне не влом написать лишние 10-20 строк кода, и знать что и как у меня работает, и где требуется оптимизация
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
25.07.2016, 18:58 36
Fulcrum_013, еще раз, я нигде в этой теме не писал, что собираюсь написать свой собственный движок... более того, учитывая, что:
Цитата Сообщение от _KROSCH Посмотреть сообщение
Хотел бы начать изучать C++
я сказал, что начинать писать свой собственный движок - глупая затея... можно использовать какой-нибудь простенький и написать таки свою игру...

Так причем тут это???? :
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Если хотите заниматься разработкой игрового движка забудьте про STL напрочь. Если не можешь сам реализовать нормальный аналог std:vector со слежением за жизненным циклом содержимого, то о разработке игровых движков и думать нечего.
Stitch Igorek, я понимаю вашу позицию) моя - нужно пользоваться новыми технологиями, но при этом знать как они работают
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
25.07.2016, 19:16 37
Цитата Сообщение от Stitch Igorek Посмотреть сообщение
да, там много чего удобного, но мне не влом написать лишние 10-20 строк кода,
Ну это зависит от того сколько раз надо написать эти строчки кода. Потому STL и малопригодна для реальных задач, только для гоняния говноданных из вектора в вектор. Ничего нужного для серьезной инфраструктуры. При этом к примеру то что мне для инфраструктуры нужно (списки указателей на объекты со слежением за жизненным циклом, мультисписки, деревья, мультидеревья) уместилось примерно в 1000 строк кода. при этом основной код сократился раз в 10, по сравнению с тем если реализовывать все это на std::vector<shared_ptr<Type> >

Добавлено через 2 минуты
Цитата Сообщение от JIawliet Посмотреть сообщение
можно использовать какой-нибудь простенький и написать таки свою игру...
Никакой готовый движек не решает основную проблему - трассу редактор моделей-движок. При своем движке хотя бы можешь в этом вопросе маневрировать как угодно. Как уже говоил - залог успешного движкостроительства - инфраструктура движка, которая начинается с банального контейнера типа динамического массива.

Добавлено через 4 минуты
Цитата Сообщение от JIawliet Посмотреть сообщение
что начинать писать свой собственный движок - глупая затея...
Это кстати больше зависит от знаний в других областях нежели от знания С++. Даже скажу так - в нормальных ликбезах C++ учат один семестр. Тех кто не способен за семестр освоить отчисляют к глиняной маме. Потому как все остальные 5 лет учат очень разные разделы математики и как ее при помощи того же С++ прикладывать к компу. т.е. при наличии знаний из области архитектуры движка, вычислительной геометрии, численных методов, матана, некоторых разделов физики, незнание на данном этапе С++ особой проблемы у человека не составит, потому как освоение С++ за 4 месяца с нуля - норма высшего образования.

Добавлено через 7 минут
Цитата Сообщение от JIawliet Посмотреть сообщение
нужно пользоваться новыми технологиями, но при этом знать как они работают
Ну скажем так - если занимаешься геймдевом нужно эти новые технологии разрабатывать самому, а значит не просто знать что у них под капотом, но то чего у них под капотом нет (касается преимущественно библиотек общего назначения типа STL) и как его под этот капот добавить. А на мусорниках кода гитхаба нету и не может быть ничего (ни концепций ни кода) моложе 15 лет, так же как и во фришных движках, особенно простеньких.
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
25.07.2016, 19:18 38
Fulcrum_013, вот только не нужно универ приплетать, это будет холивар... у меня у самого вышка по прикладной математике и скажу вам так: меня там не научили ничему такому, чего б я не освоил сам... только вот в университет кроме действительно полезных предметов, которые я буду применять после завершения, еще куча (огромная) бесполезных, что приводит нас к выводу, что университет - излишняя, расточительная трата времени...
0
2063 / 1542 / 168
Регистрация: 14.12.2014
Сообщений: 13,402
25.07.2016, 19:25 39
Цитата Сообщение от JIawliet Посмотреть сообщение
меня там не научили ничему такому, чего б я не освоил сам...
То что касается именно специальности - ей нельзя научить, можно только научится самому, соответсвенно задача ликбеза просто дать такую трассу чтобы незнание чего-то одного не тормозило изучение чего то другого. Ну и помочь пройти эту трассу, подстраховать так сказать при прохождении, проконсультировать. Да и есть еще один такой момент - обсуждения того или иного аспекта в курилке с сокурсниками дали куда больше понимания чем лекции или консультации у преподов. Ну а универ он на то и универ - там по определению универа не менее 30% гуманитарки которая к специальности не относится. А что кроме гуманитарки - так хороший программист это в первую очередь хороший математик, который не столько кодер сколько архитектор и постановщик задачи. При этом обычно и как кодер на порядок выше просто кодера. У нас это еще не особо проявляется, а на западе разницу между программистом и кодером четко знают. И ценят. разница в з/п программиста и кодера может достигать и 10 раз.
1
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
25.07.2016, 19:30 40
эх... я лично до сих пор не могу избавиться от "послевкусия" после универа и считаю, что мог эти 5 лет провести более плодотворно где-нибудь в другом месте...
0
25.07.2016, 19:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2016, 19:30
Помогаю со студенческими работами здесь

С чего начать написание игры под Android?
Добрый день. Хочу научится писать игры на андроид, но не знаю с чего начать. %-) Может кто-то...

С чего начать написание стратегической игры и какие технологии использовать?
Всем доброго времени суток! Планирую на с++ написать небольшую игрулю-стратегию. Дана сеточная...

С чего начать написание игры "Викторина"?
Добрый день форумчане как можно написать викторину типа( бот задает вопрос если ответил игрок на...

Написание игр. С чего начать?
Хочу заняться написанием игр. Хотелось бы начать с простого... Какими книгами или сайтами можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru