Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
6 / 6 / 0
Регистрация: 04.02.2022
Сообщений: 15

Какой выбрать язык?

20.02.2022, 17:48. Показов 2482. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.

У меня интересный вопрос к програмистам. Связан он с выбором языка програмирования.
Вообщем, я хочу создать свою собственную пиксельную головоломку (в 2D):
Суть в том, что в уровнях будут разного рода препятствия и т.д. В меню будет небольшой инвентарь и прочее.
Но, какой мне язык программирования начать изучать, чтобы мне потом не застрять? (уже изучаю Python)

У меня есть выбор:
-JavaScript
-C#
-Java

Какой язык и движок выбрать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.02.2022, 17:48
Ответы с готовыми решениями:

Какой язык программирования выбрать для создания игр?
Какой язык программирования выбрать для создания игр? Си или Си++. Собираюсь писать, как сложные, так и легкие игры. Я имею в виду 3D или...

Какой язык программирования выбрать
Доброго времени суток! Посоветуйте, пожалуйста, хороший язык программирования. Я знаю, что вы мне сейчас можете ответить-выбирай любой,...

Какой язык программирования выбрать для хобби?
Добрый день! Программирование как и создания игр для меня хобби.После долгих скитаний между ЯП, движками, конструкторами я остановился...

17
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
20.02.2022, 18:34
C# -> Unity
Lua -> Corona (Solar2D)
Python -> Cocos 2D или PyGame

Если кроме пайтона ни с чем не знакомы, советую не метаться, написать что-то несложное на нем. Игровых движков для него предостаточно, два я назвал, почитайте про них - будет яснее, что выбрать.
1
6 / 6 / 0
Регистрация: 04.02.2022
Сообщений: 15
20.02.2022, 19:05  [ТС]
vantfiles, Ну, я после пайтона хотел начать изучать либо JS либо Java, но трудно определиться...
И если уж програмировать на JS, я хотел использовать Cocos2D-x.
Что скажите?
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,332
Записей в блоге: 2
20.02.2022, 21:15
Цитата Сообщение от vantfiles Посмотреть сообщение
Lua -> Corona (Solar2D)
А так же новый Open 3d Engine (o3de, бывший Lumberyard от амазон)
Цитата Сообщение от vantfiles Посмотреть сообщение
Python -> Cocos 2D или PyGame
сюда я бы добавил Panda3D
Цитата Сообщение от Dinaid Посмотреть сообщение
изучать либо JS либо Java
это смотря для каких целей, если для игр то ни один из них не подходит, оба грубо говоря веб языка, один фронт другой бэк
0
6 / 6 / 0
Регистрация: 04.02.2022
Сообщений: 15
21.02.2022, 07:16  [ТС]
alecss131, тоесть, если даже изучать Java, то не получится создать хотя бы 2D игру? Но ведь Java не игровой язык?
Lua - скриптовый язык программирования, для игр не совсем подходит.
C++ - Довольно трудный язык и на изучение его уйдет огромное количество времени(его ещё нужно понимать)
JavaScript - больше к веб разработке подходит
Python - даже не знаю ожно ли на нём создать что-то годное.

Я уже запутался, даже не знаю какой язык выбрать, чтобы мне его хватало.
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
21.02.2022, 08:06
Цитата Сообщение от Dinaid Посмотреть сообщение
Lua - скриптовый язык программирования, для игр не совсем подходит.
Я на нем игры пишу.
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 01:05
Цитата Сообщение от Dinaid Посмотреть сообщение
уже изучаю Python
Судя по второй вашей теме UnicodeDecodeError: 'utf-8' codec can't decode byte 0xcf in position 5: invalid continuation byte вы изучаете Python в контексте веб-разработки на фреймворке Flask для создания клиента и сервера. То есть у вас тяга к веб-разработке. Значит, вам ближе направление браузерных игр. Подавляющее большинство браузерных игровых фреймворков написано на JavaScript и поддерживают TypeScript. Мне лично больше нравится TypeScript. Вы можете использовать HTML/CSS для создания меню. Потому можно перейти на GUI фреймворк Bootstrap. Вот отличный туториал: Bootstrap 5 Tutorial - W3Schools Начните изучать чистый WebGL по книге: WebGL. Программирование трехмерной графики. Хотя она и называется "для 3D графики", но там сначала объясняется 2D графика. Для матриц и векторов используйте библиотеку glMatrix. Здесь примеры: Небольшие примеры на WebGL (содержание)

У Метанита отличный вводные курсы по JavaScript, Node.js, HTML/CSS:
Если я правильно заметил вашу тягу к разработке веб-приложений и браузерных игр, то я угадал с советами. Для браузерных игр писать на чистом WebGL - это самое правильно решение, потому что фреймворки скрывают много ненужного и непонятного и бессмысленно нагружают браузер, особенно, на мобильных браузерах. Для браузерных игр надо понимать, как всё работает на уровне шейдеров.

Я могу вам своими словами объяснить, как работают шейдеры. На WebGL есть два вида шейдеров: вершинный и фрагментный. Если вы рисуете квадрат, который состоит из двух треугольников, то вершинный шейдер будет вызван 6 раз - по одному разу для каждой вершины. Вы должны предварительно сохранить вершины в буфер VBO (Vertex Buffer Object). VBO - это просто место хранения массива вершин треугольников. Фрагментный вызывается для каждого пикселя треугольника и задаёт ему цвет. Вызов вершинного и фрагментного шейдеров происходит после команды gl.drawArrays. Если интересно, то читайте книгу по WebGL, Метанита и спрашивайте, что непонятно. Пока приведу пример:

https://jsfiddle.net/zjydm1ev/



JavaScript
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
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <title>WebGL 1.0. Applying a texture to a square</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/gl-matrix/2.4.0/gl-matrix-min.js"></script>
    <style>
        #renderCanvas {
            border: 5px solid #aaaaaa;
        }
    </style>
</head>
 
<body>
    <canvas id="renderCanvas" width="250" height="250"></canvas>
 
    <script>
        var vertexShaderSource =
            `
            attribute vec2 a_Position;
            attribute vec2 a_TexCoord;
            uniform mat4 u_ModelMatrix;
            varying vec2 v_TexCoord;
 
            void main()
            {
                gl_Position = u_ModelMatrix * vec4(a_Position, 0.0, 1.0);
                v_TexCoord = a_TexCoord;
            }`;
 
        var fragmentShaderSource =
            `
            precision mediump float;
            uniform sampler2D u_Sampler;
            varying vec2 v_TexCoord;
 
            void main()
            {
                gl_FragColor = texture2D(u_Sampler, v_TexCoord);
            }`;
 
        var gl = document.getElementById("renderCanvas").getContext("webgl");
 
        var vShader = gl.createShader(gl.VERTEX_SHADER);
        gl.shaderSource(vShader, vertexShaderSource);
        gl.compileShader(vShader);
 
        var fShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(fShader, fragmentShaderSource);
        gl.compileShader(fShader);
 
        var program = gl.createProgram();
        gl.attachShader(program, vShader);
        gl.attachShader(program, fShader);
        gl.linkProgram(program);
        gl.useProgram(program);
 
        var verticesAndTexCoords = new Float32Array([
            -0.5, 0.5, 0.0, 1.0,    // (x, y), (u, v)
            -0.5, -0.5, 0.0, 0.0,
            0.5, 0.5, 1.0, 1.0,
            0.5, -0.5, 1.0, 0.0
        ]);
 
        var vbo = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, vbo);
        gl.bufferData(gl.ARRAY_BUFFER, verticesAndTexCoords, gl.STATIC_DRAW);
 
        var FSIZE = verticesAndTexCoords.BYTES_PER_ELEMENT;
 
        var a_Position = gl.getAttribLocation(program, "a_Position");
        gl.vertexAttribPointer(a_Position, 2, gl.FLOAT, false, 4 * FSIZE, 0);
        gl.enableVertexAttribArray(a_Position);
 
        var a_TexCoord = gl.getAttribLocation(program, "a_TexCoord");
        gl.vertexAttribPointer(a_TexCoord, 2, gl.FLOAT, false, 4 * FSIZE, 2 * FSIZE);
        gl.enableVertexAttribArray(a_TexCoord);
 
        var image = new Image();
 
        image.onload = function ()
        {
            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
            gl.activeTexture(gl.TEXTURE0);
 
            var texture = gl.createTexture();
            gl.bindTexture(gl.TEXTURE_2D, texture);
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image);
 
            var u_Sampler = gl.getUniformLocation(program, "u_Sampler");
            gl.uniform1i(u_Sampler, 0);
 
            var modelMatrix = mat4.create();
            mat4.scale(modelMatrix, modelMatrix, vec3.fromValues(1.5, 1.5, 1.5));
 
            var u_ModelMatrix = gl.getUniformLocation(program, "u_ModelMatrix");
            gl.uniformMatrix4fv(u_ModelMatrix, false, modelMatrix);
 
            gl.clearColor(0.898, 0.984, 0.905, 1.0);
            gl.clear(gl.COLOR_BUFFER_BIT);
 
            gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
        }
        image.crossOrigin = "";
        image.src = 'https://dl.dropboxusercontent.com/s/xi091ya34qqzda2/lightblueflower.jpg';
    </script>
</body>
 
</html>
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 11:24
Песочница Plunker. Пример с наложением картинки на прямоугольник на WebGL на новом стандарте JavaScript

Выше я использовал песочницу JSFiddle, но есть намного более удобная песочница Plunker (https://plnkr.co/) В эту песочницу можно загружать файлы (картинки, спрайты, тайлы, звуковые, текстовые файлы, json/xml файлы и т.д.) Правда, размер этих файлов должен быть небольшим. В Plunker можно создавать несколько js (или ts) файлов. Вы можете создать пример на Plunker и опубликовать ссылку на пример. Каждый сможет перейти по ссылке, сделать Fork (то есть копию) и вносить изменения в свою копию. Очень удобная штука, чтобы показывать код в действии или демонстрировать какие-то ошибки для вопросов на форуме.

Я переписал пример выше с учётом нового стандарта JavaScript (ES2015), где "var" был заменён на "const" и "let". Ключевое слово "const" означает, что ссылка на объект не будет меняться, а "let" означает, что ссылка на объект будет меняться ("let" переводится, как "позволять"). Картинку я перенёс в песочницу, а до этого она лежала на DropBox.

Ещё я упростил код. Раньше координаты прямоугольника и текстурные координаты хранились в одном массиве и копировались в один VBO:

JavaScript
1
2
3
4
5
6
        var verticesAndTexCoords = new Float32Array([
            -0.5, 0.5, 0.0, 1.0,    // (x, y), (u, v)
            -0.5, -0.5, 0.0, 0.0,
            0.5, 0.5, 1.0, 1.0,
            0.5, -0.5, 1.0, 0.0
        ]);
Каждая строчка соответствует одному вертексу (координаты + текстурные координаты). Из-за того, что координаты вершин прямоугольника и текстурные координаты лежали в одном массиве и в одном VBO, но нужно было использовать FSIZE и задействовать два последних аргумента (stride и offset) в вызовах функции gl.vertexAttribPointer. Я сделал два VBO - один для координат вершин, а второй - для текстурных координат. В предыдущем примере использовался метод рисования gl.TRIANGLE_STRIP, а в следующем примере используется метод gl.TRIANGLES, поэтому нужно 6 вершин, а не 4, но зато с треугольниками нагляднее. Сейчас не думайте, что такое gl.TRIANGLE_STRIP, потом узнаете из книги Мацуды и Ли. Просто используйте gl.TRIANGLES в котором прямоугольник рисуется с помощью двух треугольников. Ещё я изменил версию библиотеки glMatrix с версии 2.4.0 на крайнюю версию 3.4.3. В крайней версии нельзя просто написать "const m = mat4.create()", а нужно ещё добавить glMatrix: "const m = glMatrix.mat4.create()". Но если использовать загрузчики, например, Browserify или использовать TypeScript, то можно писать, как и раньше "const m = mat4.create()". И ещё я имена изменил с такого формата "a_Position", "u_ModelMatrix", на такой "aPosition", "uModelMatrix", то есть без символа подчёркивания.

Пример в песочнице Plunker

Название: 1867e26a-693b-4d53-a77b-f9090f206980.png
Просмотров: 148

Размер: 107.3 Кб

JavaScript
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
128
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
    <title> Applying a texture to a square. WebGL 1.0. JavaScript</title>
 
    <style>
        #renderCanvas {
            border: 5px solid #aaaaaa;
        }
    </style>
 
    <script src="https://cdn.jsdelivr.net/npm/gl-matrix@3.4.3/gl-matrix-min.js"></script>
</head>
 
<body>
    <canvas id="renderCanvas" width="250" height="250"></canvas>
 
    <script>
        const vertexShaderSource =
            `
            attribute vec2 aPosition;
            attribute vec2 aTexCoord;
            uniform mat4 uModelMatrix;
            varying vec2 vTexCoord;
 
            void main()
            {
                gl_Position = uModelMatrix * vec4(aPosition, 0.0, 1.0);
                vTexCoord = aTexCoord;
            }`;
 
        const fragmentShaderSource =
            `
            precision mediump float;
            uniform sampler2D uSampler;
            varying vec2 vTexCoord;
 
            void main()
            {
                gl_FragColor = texture2D(uSampler, vTexCoord);
            }`;
 
        const gl = document.getElementById("renderCanvas").getContext("webgl");
 
        const vShader = gl.createShader(gl.VERTEX_SHADER);
        gl.shaderSource(vShader, vertexShaderSource);
        gl.compileShader(vShader);
 
        const fShader = gl.createShader(gl.FRAGMENT_SHADER);
        gl.shaderSource(fShader, fragmentShaderSource);
        gl.compileShader(fShader);
 
        const program = gl.createProgram();
        gl.attachShader(program, vShader);
        gl.attachShader(program, fShader);
        gl.linkProgram(program);
        gl.useProgram(program);
 
        const vertPositions = new Float32Array([
            -0.5, -0.5,
            0.5, -0.5,
            -0.5, 0.5,
            -0.5, 0.5,
            0.5, -0.5,
            0.5, 0.5
        ]);
 
        const vertPosVBO = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, vertPosVBO);
        gl.bufferData(gl.ARRAY_BUFFER, vertPositions, gl.STATIC_DRAW);
 
        const aPositionLocation = gl.getAttribLocation(program, "aPosition");
        gl.vertexAttribPointer(aPositionLocation, 2, gl.FLOAT, false, 0, 0);
        gl.enableVertexAttribArray(aPositionLocation);
 
        const texCoords = new Float32Array([
            0, 1,
            1, 1,
            0, 0,
            0, 0,
            1, 1,
            1, 0
        ]);
 
        const texCoordVBO = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, texCoordVBO);
        gl.bufferData(gl.ARRAY_BUFFER, texCoords, gl.STATIC_DRAW);
 
        const aTexCoordLocation = gl.getAttribLocation(program, "aTexCoord");
        gl.vertexAttribPointer(aTexCoordLocation, 2, gl.FLOAT, false, 0, 0);
        gl.enableVertexAttribArray(aTexCoordLocation);
 
        const image = new Image();
 
        image.onload = () =>
        {
            gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 1);
            gl.activeTexture(gl.TEXTURE0);
 
            var texture = gl.createTexture();
            gl.bindTexture(gl.TEXTURE_2D, texture);
            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
            gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB, gl.RGB, gl.UNSIGNED_BYTE, image);
 
            const uSamplerLocation = gl.getUniformLocation(program, "uSampler");
            gl.uniform1i(uSamplerLocation, 0);
 
            const modelMatrix = glMatrix.mat4.create();
            glMatrix.mat4.scale(modelMatrix, modelMatrix, glMatrix.vec3.fromValues(1.5, 1.5, 1.5));
 
            const uModelMatrix = gl.getUniformLocation(program, "uModelMatrix");
            gl.uniformMatrix4fv(uModelMatrix, false, modelMatrix);
 
            gl.clearColor(0.898, 0.984, 0.905, 1.0);
            gl.clear(gl.COLOR_BUFFER_BIT);
 
            gl.drawArrays(gl.TRIANGLES, 0, 6);
        }
        image.src = "assets/lightblueflower.jpg";
    </script>
</body>
 
</html>
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 12:38
Цитата Сообщение от alecss131 Посмотреть сообщение
А так же новый Open 3d Engine (o3de, бывший Lumberyard от амазон)
Автор темы хочет писать 2D игру. Предложенный вами движок позиционирует себя, как 3D. Я понимаю, что можно извратиться и написать 2D игру и на 3D монстре. Я думаю, что будет большим overkill использовать для игр с простейшей 2D графикой движки типа o3de, Unreal Engine 5, CryEngine 5 и т.д. Lumberyard - это же fork CryEngine. Я ещё понимаю взять Unity или Godot, потому что эти движки позиционируют себя и как 2D и как 3D. Движки класса ААА для 3D - это движки, которые предназначены для выжимания максимума графики из самых топовых ПК.

Цитата Сообщение от alecss131 Посмотреть сообщение
сюда я бы добавил Panda3D
Я изучил основы Panda3D. Совершенно не понимаю, почему вы из множества 2D движков решили добавить именно Panda3D, который предназначен для 3D игр. Я понимаю, почему vantfiles написал "Cocos 2D или PyGame" - потому что это движки для 2D игр, как и желал автор темы. Опять же, можно сильно извратиться и на чём угодно написать, что угодно, но лучше использовать инструменты по назначению, а не притягивать за уши так сильно.

Цитата Сообщение от alecss131 Посмотреть сообщение
оба грубо говоря веб языка, один фронт другой бэк
Я когда-то давно изучал Java. Вы так уверенно заявляете, что для чего походит, а для чего нет. Получается по вашим словам, что Java подходит только для серверной части (backend), а JavaScript - только для клиентской части (frontend). Получается, по вашим словам, что Java совершенно не подходит для создания GUI-приложений для desktop и GUI-приложений для мобильных устройств, а JavaScript совершенно не подходит для серверной части. Но это совершенно не так, потому что можно делать GUI-приложения на Java, и можно делать серверную часть на JavaScript на Node.js. Фреймворк он на то и фреймворк, что он в отличие от узкоспециализированных библиотек может выполнять разные функции. Как, например, Qt, который можно использовать для серверной части, а не только для GUI.

Цитата Сообщение от alecss131 Посмотреть сообщение
если для игр то ни один из них не подходит
Где вы берёте эту лживую информацию? Вы либо очень сильно далеко от Java и JavaScript, поэтому просто не знаете, либо вы намеренно пытаетесь обманывать людей, только непонятны ваши цели. Я думаю, это намеренное вредительство и вы нарушили правило 5.22:

Запрещено намеренно вводить других пользователей форума в заблуждение.
Благо, что новички могут погуглить такую простейшую информацию. На Java есть куча игровых библиотек, взять, например, libGDX, который используется для разработки игр под Android, iOS, Window и т.д. На JavaScript просто море всяких игровых движков, фреймворков, библиотек и т.д. для разработки браузерных игр, например, такой список: JavaScript Game Engines Тут даже логически подумать, на чем в основном пишут браузерные игры? Конечно, на JavaScript, а теперь всё большую популярность набирает TypeScript и он уже набрал очень большую популярность, но грубо говоря, TypeScript включает в себя JavaScript. У браузерных игр огромная популярность, особенно, в социальных сетях, например, в vk и facebook. Браузерные игры можно собрать для мобильных (чтобы публиковать на Google Play и App Store) и desktop с помощью Electron и NW.js. Либо, как я делать - писать на чистом WebGL для браузера и переписывать на Qt C++ OpenGL ES для мобильных и desktop. Будьте теперь осведомлены в этом вопросе и старайтесь больше не нарушать правило 5.22. Разработка браузерных игр на JavaScript и TypeScript для инди-разработчика - это отличный вариант.
0
Модератор
Эксперт Java
 Аватар для alecss131
2850 / 1358 / 405
Регистрация: 11.08.2017
Сообщений: 4,332
Записей в блоге: 2
22.02.2022, 13:46
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Где вы берёте эту лживую информацию?
Информация не лживая а просто здравый смысл. В джава разделе если и советуют изучать гуи то только для общего развития, пользы от этого нету. То что можно что-то делать не говорит что это для этого и создано. В самой джаве много легаси изза поддержки обратной совместимости. Сейчас джава сильно сдает позиции, особенно в десктопе, остается только в enterprise сегменте, где ее тоже смещают. Основные причины что не вытеснили это много старого кода и поддерживать старое выгоднее чем все переписывать на новое. В андроиде сейчас гугл активно продвигает котлин и джава опять сдает позиции. Котлин проще и лаконичнее, чаще короче.
Браузерные игры такое себе, довольно специфичная категория. Впрочем мобильные игры тоже довольно специфичны и почти все создаются только для заработка, в основной своей массе казуальщина по типу 3 в ряд. Много людей создание мобильных/браузерных игр за геймдев не считают.
Да и рекомендовать создавать игры на голых графических апи ничем не лучше советов писать на ассемблере. Если человек хочет создавать игры то пусть создает игры а не изобретает велосипеды создавая свои движки и фреймворки. Очень высока вероятность погрязнуть в рутине так и не начав писать именно игры.

Добавлено через 2 минуты
И если брать ваши аргументы, то на джаве невозможно найти работу не зная Spring, Hibernate и прочие веб фреймворки. Умение делать игры и гуи программы на джаве не поможет найти работу.
Десктопная джава и андроидная это почти как 2 разных языка.

Добавлено через 3 минуты
Производительность веба оставляет желать лучшего. Это только комп у меня мощный а мобильные устройства у всей семьи довольно бюджетные. И меня постоянно удивляет почему простые приложения (не говоря уже о играх) грузятся по пол часа и вылетают. А это разработчикам лень делать нативные программы, им проще и выгоднее наклепать кросплатформенного веба.
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 15:06
Цитата Сообщение от alecss131 Посмотреть сообщение
Много людей создание мобильных/браузерных игр за геймдев не считают.
Эти люди ничего не понимают в разработки игр. Они не написали ничего кроме примитивного 3 в ряд и тот недоделали, а считают себя гуру геймдева.

Цитата Сообщение от alecss131 Посмотреть сообщение
Да и рекомендовать создавать игры на голых графических апи ничем не лучше советов писать на ассемблере.
Советовать AAA-монстра для 2D-игр с простейшей графикой - вот это за гранью. JavaScript + WebGL - это идеальный выбор для старта. Не нужно ничего устанавливать и настраивать, всё уже есть в браузере. Ошибка - это брать С++ и OpenGL. Для графики игры автора темы я уже показал пример. Ему только осталось понять базовые основы компьютерной графики для вывода текстуры, даже без освещения, потому что в 2D, как правило, не нужно освещение, но если нужно будет, то он уже будет готов его добавить с помощью фрагментного шейдера. Для 2D игр вообще шейдеры будут простейшими, то что я написал, больше и не надо. Всё остальное - это код игры. Самая большая ошибка, которую совершают начинающие - это то что они вместо написания 2D-игр начинают копать в API OpenGL и там они и остаются, но как правило, такие и на движкам не могут ничего играбельного написать - даже три в ряд не могут.

Цитата Сообщение от alecss131 Посмотреть сообщение
Очень высока вероятность погрязнуть в рутине так и не начав писать именно игры.
Это то что с вами произошло. Это не вина OpenGL, а то что вы закопались в API OpenGL 4.6 и Vulkan, вместо создания простых игр. Для инди-разработчика выше крыши достаточно OpenGL ES 2.0, на котором основан WebGL. Ошибка в том, чтобы брать С++, потому что это язык для написания игровых движков. Максимум можно брать Qt C++ OpenGL ES для мобильных и Desktop игр. Ещё потеря времени - если брать SFML, но его можно взять чисто для нескольких примеров и источника идей, чтобы переносить идеи на WebGL. Не думайте, что UE4 позволит вам быстро написать необходимые игры для тренировки: змейка, тетрис, марио и т.д. Я сам отступал от игр на года. Сейчас я понимаю очень хорошо, что нужно быть ориентированным не на API, а на написании множества простых игр, на использовании Box2D (Planck.js) и Bullet Physics (Ammo.js и Cannon.js). Писать 2D-игру на чистом WebGL + glMatrix + Box2D (Planck.js) для меня намного более интересно, потому что понимаешь, каждую строчку кода и пишешь код для конкретной игры, а не универсальный фреймворк. Огромная ошибка - это писать сначала свой движок, а потом надеяться начать писать на нём игры. Писать игры надо с самого начала. Для подавляющего большинства игр достаточно очень ограниченного числа функции WebGL.

Цитата Сообщение от alecss131 Посмотреть сообщение
Умение делать игры и гуи программы на джаве не поможет найти работу.
Это совсем другой вопрос. В городах РФ в принципе очень мало вакансий по геймдев. Подавляющее большинство вакансий по играм на Unity, поэтому я и считаю, что фокусироваться на SFML - это плохая идея, если хочется найти вакансии в конторе в своём городе. Вы сами можете сравнить количество вакансий по Unity и Unreal Engine в крупных городах. Например, я нахожу вакансии по графике на WebGL на Upwork, Facebook и т.д. Развиваю свои браузерны игры, особенно налегаю сейчас на мультиплеер, потому что для инди-разработчика это намного проще, чем брать Unreal Engine и пытаться на нём быть инди. Это тоже другой вопрос, как человек хочет зарабатывать на играх:
  • искать вакансии (буть экслуатируемым, отдавать свою прибавочную стоимость)
  • делать свои игры (например, браузерные игры встраивать в соц. сети) и встраивать в них рекламу (в мобильные игры на Google Play и App Store)
  • продавать свои игры на Steam
  • создавать свою команда (эксплуатировать работников, забирать их прибавочную стоимость)
У каждого способа есть свои плюсы и минусы и свои последователи.

Цитата Сообщение от alecss131 Посмотреть сообщение
Производительность веба оставляет желать лучшего.
Поэтому надо писать на чистом WebGL для браузерных игр, потому что распиаренные фреймворки - это способ тянуть деньги, а как чуть серьёзнее, то эти фреймворки бьют по производительности. Тут всё от целей зависит, от потенциальной аудитории. Для инди-разработчика, особенно, если он параллельно занимается веб-разработкой, браузерные игры - это особенно привлекательная вещь. Понятно дело, если человек хочет делать очень крутую по графике игру в большом коллективе, чтобы выжить из самых мощных ПК максимум графики, на которую способны самые мощные современные видеокарты, то он, скорее всего, будет копать сторону движка AAA-класса. А если он любитель старых казуальных игр, например, что были на PS1, то он может делать подобные игры для браузеров и мобильных. Рынок браузерных и мобильных игр очень привлекательный для инди-разработчика. А вот чтобы полноценно реализовать потенциал AAA-движков нужна большая слаженная команда. WebGL сочетает простоту, доступность, нужный уровень погружения в графический API.

Цитата Сообщение от alecss131 Посмотреть сообщение
И меня постоянно удивляет почему простые приложения (не говоря уже о играх) грузятся по пол часа и вылетают
Для мобильных браузеров особенно важно использовать именно чистый WebGL, потому что игровые фреймворки пытаются делать универсальными и делает их небольшая команда с ограниченными ресурсами, а мобильны браузеры ещё более ограничены. Для мобильных приложений лучший выбор - это Qt, он быстрый и довольно универсальный, поэтому я его выбрал, а не Xamarin или Java. Просто нужно ещё адекватно использовать инструмент, а не брать движок AAA-класса для мобильных игр. Для мобильных отличный выбор - это Qt OpenGL ES. Ну вот Unity и Godot сумели сочетать и 2D/3D игры для мобильных и дошли до AAA-класса, потому что команда большая и много денег было вложено корпорациями. Много факторов есть для выбора между Unity, WebGL и Qt OpenGL ES - это и вакансии, и фриланс, и свой бизнес, и делаешь ли неигровые приложения c 2D и 3D графикой (рисовать графики, диаграммы, схемы, 3D-объекты для интернет магазинов (конструкторы товаров), анимации для рекламы, обучающие веб-приложения и демонстрации с 2D/3D графикой и много другое)
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 16:27
alecss131, я понял давно вашу позицию, но как вы не меняете свою позицию, так и я свою не меняю. Высказались, остались при своём мнении. В данном случае, спорить - это пустая трата времени. Давайте лучше писать игры, показывать процесс и результат. Кстати, огромное количество времени отнимает форум, а должен быть результат в виде игрушек. Призываю вас и всех форумчан, кто читает это сообщение посоревноваться, кто быстрее, на выбранном языке (API, движке и т.д.) перепишет примеры кода из Let's make 16 games in C++/SFML!, как можно ближе к этим примерам по внешнему виду, то есть по результату работы. Можно выкладывать без кода, главное, чтобы можно было запустить играбельную демку. Если не хотите соревноваться, то просто проигнорируйте этот призыв, но я уже начал переписывать их на TypeScript и WebGL. Может ещё перепишу на JavaScript. Dinaid, я вам очень сильно советую тоже переписать эти игрушки. Они очень простые, но они дадут очень много всего полезного. Но надо не останавливаться и улучшать игр. Я только сейчас начал понастоящему понимать, что, для того чтобы учиться писать игры нужно писать много простых игр и по мере роста навыков улучшать их. Параллельно пишите свою игру. Объясните, пожалуйста, подробнее, за игру вы хотите написать, я попробую вам помочь на WebGL.

Я начал с игры Blobby Volley (на физическом движке Box2D), она 15-я в списке:



Это волейбол на физическом движке Box2D. Я использую порт Box2D на JavaScript и TypeScript - Planck.js Здесь туториал Planck.js https://github.com/shakiba/planck.js/wiki, который просто немного поправленный официальный тутоиал Box2D

Я за пару дней в свободное время набросал такую демку на WebGL, TypeScript и Planck.js (Box2D). Здесь я использую свою вспомогательную графику, чтобы отображать невидимые коллайдеры Box2D. Я их временно делаю видимыми. У меня есть флаг, чтобы скрыть рисование графики коллайдеров.



По поводу мысли "написания простых игр" есть такая короткая статья на сайте нубтутс: https://noobtuts.com/articles/make-small-games Я ещё перевёл с помощью Google Translate:

Делайте маленькие игры

Предисловие

Время создать первую игру. Давайте сделаем большую MMORPG, верно?

Эта проблема

Разработчики игр — энтузиасты. У разработчиков игр большие идеи в голове. Что обычно происходит, так это то, что для своей первой игры они решают прыгнуть прямо в проект своей мечты.

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

Картина повторяется. Через несколько месяцев люди снова перегружены. Но что это? Это команда? Это неправильный игровой движок? Это отсутствие навыков?

Работа над игровым проектом в течение полугода требует очень много времени и тяжелой работы. Неудача и осознание того, что время было потрачено впустую, — самый болезненный опыт для новичков. И, к сожалению, они делают это снова и снова.

Решение

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

Через месяц высоки шансы, что у вас в портфолио окажется готовая игра. Это может быть небольшой, но это весело, он отшлифован, и его завершение будет большим стимулом для вашего эго. Кто знает, может быть, вы даже сможете заработать на этом несколько долларов.

Теперь начинается следующий игровой проект. Цель должна быть игрой, которая немного больше, чем предыдущая. Если на создание первой игры ушел месяц, попробуйте сейчас сделать игру на два месяца. Закончите это, отшлифуйте, отпустите и извлеките из этого уроки. Это процесс, который однажды приведет к завершению проекта вашей мечты! И на заметку: смотреть на список из 20 игр, которые вы успешно завершили, — прекрасное чувство.

Резюме

Начинать с малого и приобретать уверенность и опыт — это самое важное, чему нужно научиться при создании игр. Нет ни одной успешной MMORPG, созданной людьми, которые сделали свою первую игру. Даже небольшие многопользовательские игры, такие как Minecraft, обычно не являются чьим-то первым проектом. Если быть точным, создатель делал игры уже 20 лет, это должно дать вам представление о том, насколько на самом деле важен опыт.
Миниатюры
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 17:10
Цитата Сообщение от Dinaid Посмотреть сообщение
Вообщем, я хочу создать свою собственную пиксельную головоломку (в 2D)
Опишите подробнее, что за игра. Я вам помогу написать её на WebGL. Для этой 2D игры от WebGL нужно будет только наложить текстуру на прямоугольник и передавать матрицу трансформации в вершинный шейдер:

glSlang
1
2
3
4
5
6
7
8
9
10
            attribute vec2 aPosition;
            attribute vec2 aTexCoord;
            uniform mat4 uModelMatrix;
            varying vec2 vTexCoord;
 
            void main()
            {
                gl_Position = uModelMatrix * vec4(aPosition, 0.0, 1.0);
                vTexCoord = aTexCoord;
            }
Я немного поясню этот шейдер. Если даже вы будете писать на движке, то рано или поздно вам всё равно придётся писать свои шейдеры. Лучше на простейших вещах понимать основы шейдеров. У вас есть два треугольника, которые образуют прямоугольник, вот задали эти треугольники:

JavaScript
1
2
3
4
5
6
7
8
        const vertPositions = new Float32Array([
            -0.5, -0.5,
            0.5, -0.5,
            -0.5, 0.5,
            -0.5, 0.5,
            0.5, -0.5,
            0.5, 0.5
        ]);
В коде выше каждая строчка - это координата вершины треугольника (x, y). Первые три вершины - это первый треугольник, вторые три вершины - это второй треугольник. Далее, идёт сохранение массива вершин треугольников в Vertex Buffer Object (VBO):

JavaScript
1
2
3
        const vertPosVBO = gl.createBuffer();
        gl.bindBuffer(gl.ARRAY_BUFFER, vertPosVBO);
        gl.bufferData(gl.ARRAY_BUFFER, vertPositions, gl.STATIC_DRAW);
В коде выше создаётся буфер в оперативной памяти видеокарты с помощью команды gl.createBuffer(). В констранту vertPosVBO сохраняется ссылка на этот буфер. С помощью команды gl.bindBuffer буфер делается активным (активным может быть один буфер и с ним проводится работа, до того, как мы сделаем активным другой буфер). Команда gl.bufferData() копирует массив координат в буфер (в Vertex Buffer Object). Таким образом на видеокарте был создан VBO. К этому VBO имеет доступ вершинный шейдер, через переменную "attribute vec2 aPosition". Мы делаем вызов функции:

JavaScript
1
gl.drawArrays(gl.TRIANGLES, 0, 6);
Эта команда запускает срабатывание вершинного шейдера. Вершинный шейдер, после этой команды, сработает 6 раз. При каждом вызове вершинного шейдера из VBO данные будут поступать в переменную aPosition, которая, в данном случае, имеет тип vec2, то есть в aPosition поступят поочерёдно координаты из VBO шести вершин: сначала (-0.5, -0.5), потом (0.5, -0.5) и т.д. В вершинном шейдере каждая координата будет умножаться на матрицу трансформаций и передаваться системной переменной gl_Position. Когда отработает вершинный шейдер, то объект из двух треугольников будет построен. Далее, видеокарта проведёт процедуру растеризации, она разобьёт каждый треугольник на маленькие фрагменты (можно считать, что один фрагмент - это один пиксель). Будет вызван фрагментный шейдер для каждого фрагмента (для каждого пикселя). Я забыл написать, что текстура тоже сохранена в памяти видеокарты, тоже в свой буфер.

Фрагментный шейдер:
glSlang
1
2
3
4
5
6
7
8
            precision mediump float;
            uniform sampler2D uSampler;
            varying vec2 vTexCoord;
 
            void main()
            {
                gl_FragColor = texture2D(uSampler, vTexCoord);
            }
uSampler - это идентификатор текстуры и по нему функция texture2D узнаёт, где текстура. Переменная vTexCoord хранит текстурную координату. Функция texture2D() возвращает цвет пикселя текстуры (цвет текселя - так называют). То есть фрагментный шейдер берёт цвет текселя и присваивает этот цвет пикселю.
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 18:27
Dinaid, в вашем профиле написано, что вам 13 лет. Это реально? Если да, то это круто. Я начал программировать в 17-18 уже в универе. Я считаю, вам не надо изучать Flask на Python. Вы выбрали даже не Django, который гораздо популярнее Flask. Вам всё равно для Frontend нужен будет JavaScript и HTML/CSS. Лучше всего взять ещё более популярный в сравнении даже с Django - Node.js. На Node.js у вас будет один и тот же язык на сервере и клиенте - JavaScript (в будущем лучше, я считаю, перейти на TypeScript). Я давал ссылку выше на Metanit: https://metanit.com/web/nodejs/ Я не встречал ничего лучше, чем у Metanit'a по Node.js, даже в книгах на английском. У него там всё что нужно для работы с NPM-пакетами, базами данных (MySQL, MongoDB), по тому, как делать веб-api, по unit-тестированию и всё самое необходимое. Я думаю, что вы выберите браузерные игры и веб-разработку. Если с играми не очень пойдёт заработок, то вы сможете зарабатывать созданием веб-приложений и веб-сайтов, какое-то время, пока реклама на играх в сец. сетях не приносит нужного дохода. Вам 100% нужна будет работа с базами данных, как для веб-приложений, так и для игр (рекорды сохранять, сделать регистрацию, мультиплеер и т.д.), а данные лучше всего передавать через веб-сокеты, поэтому ставьте модуль ws (он имеет 57-58 млн. скачиваний в неделю) и развёртывайте свою игру (или веб-приложение) на Node.js хостинге Heroku, вот моя пошаговая инструкция: Инструкция по развёртыванию Node.js сервера с WebSockets на бесплатном хостинге Heroku. Веб-клиент и Desktop-клиент (Qt) Отличная книга, где обучение JavaScript через создание простых игр: JavaScript для детей. Самоучитель по программированию | Морган Ник, только лучше всего её изучать на английском, потому что в ней очень простой английский и это дополнительная тренировка английского: JavaScript for Kids: A Playful Introduction to Programming. Лучше всего, чтобы вы переписывали игры из этой книги на WebGL. Только не надо углубляться в WebGL, особенно в 3D. То что я вам объяснил, уже почти достаточно, чтобы написать многие игры: вашу игру, игры из книги Моргана, те 16-игр из канала в сообщении выше. Просто копируйте код рисования текстурированного прямоугольника в следующий новый проект, от проекта к проекту этот код рисования один и тот же, а концентрируйтесь на непосредственно на коде игр.
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 18:28
Добавлено через 1 час 14 минут
Цитата Сообщение от alecss131 Посмотреть сообщение
Много людей создание мобильных/браузерных игр за геймдев не считают.
Вообще от таких людей, кто так считает, нужно держаться как можно дальше и не прислушиваться к их мнению, вообще перестать читать их сообщения. В РФ во всех городах по вакансиям в конторах более 90% этих мелких контор делают игры на Unity для мобильных для заработка на Google Play, App Store и других площадках. На Unity вообще неважно под что собираешь. Можно одну и туже игру собрать под Desktop, Mobile и HTML5. Причём сборка под Android, iOS и HTML5 требует больше знаний, чем для ПК. Мне очень не нравится, когда говорят, что программисты в движках - это какуие-то не полноценные программисты, а скриптеры игровой логики, что они из низшей касты, а программисты движков - типа из высшей. Даже в вакансиях иногда неуважительно пишут скриптер, вместо "программист". Везде можно себя найти и в программировании и в разработке 3D контента и анимаций, где ты любишь то, чем занимаешься и ты горишь этим то, ты может быть профессионалом и развиваться в этом, получать кайф и зарабатывать. Я обожаю работать с WebGL/JavaScript/TypeScript и понимать, как работает каждая строчка кода, не писать чего-то лишнего для конкретной игры, иметь возможность развиваться не только в играх, но и в неигровых приложениях с интерактивной графикой, делать свой веб-сайты и веб-приложения. А что там считаю недалёкие несчастные злые люди - мне абсолютно неважно. Я не занимаюсь написанием универсальных игровых движков, использую только всё самое необходимое, что я написал, для конкретных игр. Надо просто много тренироваться. Делать кучу маленьких игрушек, любить инструменты, которыми пользуешься, быть в них уверенным, не метаться с инструмента на инструмент, не терять время и всё будет нормально. Вкусы и цели у всех разные. О вкусах не спорят.
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
22.02.2022, 19:43
Поясню ещё некоторые строки кода в примере из сообщения #8:

HTML5
1
<canvas id="renderCanvas" width="250" height="250"></canvas>
Это HTML5-элемент <canvas>, на котором происходит рисование. "canvas" переводится, как "холст". С помощью атрибутов width и height задаются ширина и высота холста в пикселях.

JavaScript
1
const gl = document.getElementById("renderCanvas").getContext("webgl");
С помощью команды метода document.getElementById("renderCanvas") мы получаем ссылку на элемент <canvas> по его id. С помощью метода getContext("webgl") берём контекст рисования "webgl" и сохраняем ссылку на контекст в константу gl. С помощью gl получаем возможность вызывать методы WebGL.

JavaScript
1
2
3
        const aPositionLocation = gl.getAttribLocation(program, "aPosition");
        gl.vertexAttribPointer(aPositionLocation, 2, gl.FLOAT, false, 0, 0);
        gl.enableVertexAttribArray(aPositionLocation);
С помощью метода gl.getAttribLocation(program, "aPosition") получаем доступ к переменной aPosition из объекта шейдерной программы program. Метод gl.vertexAttribPointer(aPositionLocation , 2, gl.FLOAT, false, 0, 0); настраивает доступ к данным в текущем VBO (текущий VBO, это тот который выбран с помощью метода gl.bindBuffer(gl.ARRAY_BUFFER, vertPosVBO);) Второй параметр метода gl.vertexAttribPointer показывает сколько элементов будет взято в вершинный шейдер (здесь 2, потому что aPosition имеет тип vec2). Следующие - это тип, нормализация, stride и offset - это сейчас неважно, можете почитать описания этих аргументов в документации: gl.vertexAttribPointer(). Метод gl.enableVertexAttribArray(aPositionLoca tion); включает (активирует) атрибут aPosition.
0
6 / 6 / 0
Регистрация: 04.02.2022
Сообщений: 15
24.02.2022, 09:53  [ТС]
8Observer8, не совсем, я лишь изучаю азы Python и прохожу весь материал по книге. После изучения этого языка, я хотел конечно создать свою веб страничку, или какой-то сайт среднего уровня, но не более.
Я хотел бы создавать простые 2D игры, и у меня уже есть для этого идеи. Python для этого не подойдёт, я так думаю...

Вот так...
0
9933 / 2937 / 494
Регистрация: 05.10.2013
Сообщений: 7,964
Записей в блоге: 216
24.02.2022, 13:11
Цитата Сообщение от Dinaid Посмотреть сообщение
Python для этого не подойдёт, я так думаю...
Подойдёт или нет зависит от условий, на которые вы опираетесь. Зависит от целей, которые вы поставили. Может вам с головой хватит PyGame. Кстати, правильно вам советовали этот фреймворк. Если пока не понимаете своих целей, то делайте игры на PyGame. Потом у вас появятся свои приоритетные критерии. Напишу о своих целях и критериях. У каждого свои критерий. У одних одни критерии в приоритете, а у других другие. Моими основными критериями являются - возможность встраивать простые браузерные игры в социальные сети, делать браузерные игры с мультиплеером и кооперативном (пока я ограничился facebook и vk) и в https://itch.io/, чтобы встраивать рекламу и донаты в игры и этим иметь пассивный доход. Следующим этапом, не знаю в этом году или через несколько лет, я собираюсь подключить мобильную разработку, чтобы выкладывать игры на Google Play и App Store, чтобы тоже встраивать в них рекламу. Это очень легко переписывать из чистого WebGL на Qt C++ OpenGL ES. Это мои основные критерии. Я фрилансер и инди-разработчик и специализируюсь сейчас в основном на программировании веб-приложений, потому что на Upwork на для веб проще искать заказы, но я очень люблю 3D моделирование low-poly моделей, текстурирование в GIMP, риг и анимирование в Blender, по этим вещам на Upwork тоже немало заказов. То есть я хочу сказать, что я определился с критериями. Определился, какие критерии для меня в приоритете. Я хочу и могу делать 3D контент и анимации с очень простой оптимизированной графикой для браузеров и мобильных. Мне нравится зарубежный фриланс (он даёт реальную практику делового английского и из-за падения рубля он выгоден) и хочется развивать свой бизнес, свой пассивный доход от игр. Я делаю графику, как можно проще, чтобы она работала на максимуме слабых и средних платформ. А есть, например, люди, которые хотят делать игры с очень красивой графикой, чтобы движок выжимал максимум из самый топовых видеокарт, хотят работать в больших коллективах из нескольких сотен или тысяч человек, хотят влиться в коллективы, такие которые делают игры типа Metro, S.T.A.L.K.E.R 2, Horizon, Dying Light 2, Last Of Us 2 и другие. Есть другие люди, которые хотят работать программистами игр на движке Unity, чтобы найти вакансии в конторах в своих городах. В основном сейчас в городах РФ преобладают конторы на Unity для мобильной разработки игр, где хозяева контор снимают небольшой офис в деловом центре, а в команде работает около 10 человек. Я недолго работал в такой конторе у себя в городе на Unity, но понял, что у меня другой путь. Вы тоже пробуйте себя. Может вам стоит пойти поработать на Unity, почувствовать, как команда работает изнутри. Если нравится Python и хочется делать игры, а целей никаких пока нет, то смело концентрируйтесь на PyGame, а потом может перейдёте на что-то другое, либо останетесь на PyGame. По PyGame довольно активный раздел на КиберФоруме: Python: PyGame. Я тоже изучаю Python, но исключительно только для программирования плагинов для Blender, чтобы автоматизировать моделирование и анимирование в Blender. Но мне нравится изучать языки через программирование простых игр, поэтому я изучаю книгу, в которой используется PyGame, но она обучает программированию на Python через создание простых игр на PyGame: 2016 - Program Arcade Games With Python and Pygame - Paul Craven - 4th edition. Книга написана американским профессором компьютерных наук:

Paul Vincent Craven is a Computer Science professor at Simpson College in Indianola, Iowa. He worked in
the IT industry for several years before switching to teaching full-time. He has a Ph.D. from the University of
Idaho, a M.S. from Missouri University of Science and Technology, and B.A. from Simpson College.
Перевод Google Translate:

Пол Винсент Крэйвен — профессор компьютерных наук в Колледже Симпсона в Индианоле, штат Айова. Он работал в в ИТ-индустрии в течение нескольких лет, прежде чем перейти к преподаванию на постоянной основе. У него есть докторская степень. из Университета Айдахо, М.С. из Университета науки и технологий Миссури и B.A. из колледжа Симпсона.
Очень дружелюбно написана книга. Изучать её - одно удовольствие. Начните её читать и не пожалеете. Если с английским плохо, то используйте Google Translate, чтобы копировать и переводить абзацы текста. Английский в ней очень простой, переводится довольно легко. Python сам по себе очень дружелюбный язык. Не зря Python используют в многих развитых странах мира, как первый язык для обучения программированию. Расслабьтесь и изучайте дальше Python и PyGame и получайте удовольствие от написания простых игр. PyGame больше всех используется в американских колледжах, чтобы сделать изучение программирования захватывающим.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2022, 13:11
Помогаю со студенческими работами здесь

Какой язык выбрать?
Здравствуйте, немного знаком с Delphi and c#. Хотел бы получить советы по новым языкам ибо эти уже старые... Цель в основном клиентские...

Какой язык выбрать.
Это не совсем про php, просто не нашёл на форуме темы с общими вопросами. На данный момент я занимаюсь исключительно html и пхп, но сейчас...

Какой язык выбрать?
Здравствуйте, я хочу научиться программировать что вы можете мне порекомендовать?

Какой язык выбрать ?
Здравствуйте. Извините что я немного чайник. Мне нужно выбрать язык для написания приложения, а затем изучить этот язык. Я физик, в...

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru