Форум программистов, компьютерный форум, киберфорум
Программирование игр
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
2 / 2 / 1
Регистрация: 05.01.2015
Сообщений: 18

Создание 2D игры + игра по интернету

05.01.2015, 23:50. Показов 5660. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Недавно в колледже учитель по информатике предложил прочитать книгу по C# и рассказал, что на си шарпе можно создать программы/игры различной сложности.
Давно планировал сделать простую мини игру 2д графики по ОС виндовс, ios, и android.
Понимаю, то что нужна графика, нужно продумать логику игры и многое другое. Но хочется поинтересоваться...
С чего стоит начать ? Предлагали:
1) C# + XNA
2) C# + DirectX
3) Движок Unity 3D
Ничего из вышеперечисленного списка я не знаю. Раньше занимался только веб программированием.
Что я представляю под онлайн игрой:
1) 2д графика
2) Локации (вид игры сверху)
3) Перемещение по локациям кликом мыши по области, создание персонажей
4) Самое главное - ОНЛАЙН РЕЖИМ. Игра по интернету. т.е. 2 и более человек находятся на локации и видят друг друга.
---
Для начала хватит. Порекомендуйте пожалуйста, с чего начать первые шаги. Какой из вариантов больше подойдет ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.01.2015, 23:50
Ответы с готовыми решениями:

Создание карточной игры по сети и интернету
Всем привет. Более менее освоил язык C# и хотел бы создать свое первое нормальное приложение. Хотелось бы сделать карточную игру между 2-4...

Игра в FIFA 11 по интернету
Можно ли играть в fifa11 онлайн на пиратской версии???

Игра по интернету в Counter-Strike: Source
Есть у кого ссылка на рабочую CS:S, через которую можно нормально на серверах в интернете играть? А то я уже 3 разных ставил, все при...

30
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
07.01.2015, 20:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 8Observer8 Посмотреть сообщение
Сложно в своём родном коде ошибки искать, а в чужом и подавно.
То то рекомендуется при наличии в команде двух и более программистов каждому искать ошибки именно в чужом коде.
1
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
07.01.2015, 20:22
Перво-наперво - начинайте читать книжки по C++ уже сейчас, чтобы более глубоко его изучить. На одной функции main вы далеко не уедете, для чуть более сложной программы вам понадобятся более мощные средства. Примерный план такой - функции, классы, основы шаблонов (глубокого понимания вам пока не потребуется), стандартные контейнеры, наследование. И попутно - разные другие более мелкие, но важные вещи.

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

В вашем случае у вас есть массив Map (плохо задавать его массивом строк - лучше более явно char Map[W][H]; ) - матрица размером W*H. В клетках матрицы могут находиться препятствия, по этим же клеткам должен ходить ваш персонаж. Т.е. задаем ему две переменные-координаты
C++
1
int HeroX, HeroY;
Затем нам нужно будет реализовать игровой цикл. Это выглядит так - у нас есть некий таймер, который отмеряет более-менее равные промежутки времени (абсолютно равные в Windows отмерить нельзя принципиально, но нам сильно большой точности и не нужно). Через равные интервалы времени (несколько раз в секунду - обычно около 30, но вам для начала хватит 5-10) мы производим обновление игрового мира - считываем состояние нажатия интересующих нас клавиш и кнопок мыши, на основе их состояния передаем соответствующие команды игровому миру (обычно только главному герою), обновляем в соответствии с командами, физикой мира и действиями ИИ состояние мира, и затем перерисовываем его.

В вашем случае это будет выглядеть примерно так (заодно я покажу самый простой, но не самый лучший вариант реализации игрового цикла):
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
int HeroX = 1, HeroY = 1;  // Текущие координаты персонажа
int HeroTargetX, HeroTargetY;  // Куда мы хотим передвинуть персонажа
 
enum Direction {DirLeft, DirUp, DirRight, DirDown};  // Направление
Direction HeroDir = DirDown;  // Направление, в котором движется персонаж
 
const int CellW = 24;  // Ширина ячейки игрового поля в пикселях
const int CellH = 24;  // Высота ячейки
 
int prevT = GetTickCount();  // Считываем "текущее время" в миллисекундах
const int FPS = 10;  // Число кадров в секунду
const int interval = 1000 / FPS;  // Число миллисекунд между кадрами
while (true)
{
int currT = GetTickCount();
if (currT - prevT > interval)
 {
 prevT = currT;
 
 HeroTargetX = HeroX, HeroTargetY = HeroY;
 // Считываем нажатие клавиш
 if (/*Нажата кнопка вверх*/)
  {
  HeroTargetX = HeroX - 1;  // Говорим, что хотим сместить игрока на одну клетку вверх
  HeroDir = DirUp;  // А его направление движения - вверх
  }
 /*Аналогично с остальными клавишами*/
 
 // Обновляем состояние мира согласно его законам
 if (Map[HeroTargetX][HeroTargetY] == ' ')  // Если целевая точка на карте пуста - можем передвинуть игрока туда
  {
  HeroX = HeroTargetX;
  HeroY = HeroTargetY;
  }
 
 // Перерисовываем весь мир
 /*Рисуем фон*/
 int HeroTextureX = HeroX * CellW, HeroTextureY = HeroY * CellH;
 switch (HeroDir)  // Выбираем текстуру в зависимости от того, куда движется персонаж
  {
  case DirLeft: /*Устанавливаем текстуру, соответствующую движению влево*/ break;
  /*Аналогично для остальных направлений*/
  }
 /*Рисуем выбранную текстуру на окне в координатах HeroTextureX, HeroTextureY*/
 }
}
В результате 10 раз в секунду вы будете принимать пользовательский ввод, обновлять состояние игрового мира и отображать его на экране. Правда, вряд ли вы захотите перемещать игрока из клетки в клетку за один шаг. Скорее всего, вы предпочтете, чтобы он переходил из одной клетки в другую за несколько кадров анимации, постепенно меняя свои координаты. В этом случае вы можете, например, сделать переход за 4 кадра анимации - при этом вы будете рисовать мир по-прежнему каждый тик игрового цикла, а вот обновлять его и принимать пользовательский ввод только каждый четвертый (заведите переменную с номером тика/итерации игрового цикла, каждый раз увеличивайте ее на единицу, если она равна 4 - выполняете обновление мира и устанавливаете ее в 0). Тогда переход будет не мгновенным. Впрочем, существуют и другие решения, в частности - применять модель игрового мира, основанную не на клетках, а на списке объектов, каждый из которых имеет свои координаты и размеры (более близкий к тому, который применяется в 3D-играх).

Все это, конечно, очень грубая модель, и по-хорошему здесь нужно бы ввести довольно много функций и классов, ответственных за тот или иной аспект, но это вы сделаете со временем.
1
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
08.01.2015, 14:45
Цитата Сообщение от MuradGu Посмотреть сообщение
http://rghost.ru/60190338
Вот при помощи SFML набросали. т.е. персонаж бомбермен и лабиринт. Удерживая пробел персонаж взрывается и закрывается игра. в общем, не поняли как сделать взаимодействие со стенками. Помогите пожалуйста, как можно это сделать на именно такой игре (вид сверху).
Ой, это же вы автор темы! Я думал, кто-то левый влез со своим вопросом Тоже хочу бомбермана сделать

Добавлено через 18 часов 12 минут
Я единственный вариант придумал, как со стенкой работать: строить стенку из прямоугольников. Координаты вершин этих прямоугольников известны. Сами прямоугольники будут храниться в массиве. Персонаж это тоже прямоугольник, у котором тоже известны координаты вершин. Перед тем, как передвинуть персонаж, нужно пробежаться по массиву прямоугольников-стен, и проверить не попадает ли вершина внутрь прямоугольника стены (и наоборот, если прямоугольник стены меньше персонажа, а то весь прямоугольник стены влезет в персонажа, а его вершины - мимо). Если произошло пересечение прямоугольников, то не нужно менять координату персонажа
0
2 / 2 / 1
Регистрация: 05.01.2015
Сообщений: 18
09.01.2015, 15:51  [ТС]
Всем большое спасибо за ответы.
---
Мне вот интересно, есть допустим персонаж 2д графики вид сверху полу боком как я скидывал картинку. Персонаж голый. Одеваешь на него доспех, он отображается на нем. Он поворачивается спиной, со спрайта берется доспех вида сзади и т.д. А теперь например атака рука поднимается и совершается около 7-8 кадров за удар неужели для каждого удара рисуется 7-8 картинок доспеха рук и меча ? Нельзя как то руки при ударе сделать чтобы просто меняли градус угла ? Т.е. Отдельно левая рука, правая рука, тело, левая нога, правая нога и Это все получается на игре 2д графики. Как мне сказали, это называется скелетная анимация. Реально ли сделать скелетную анимацию + одевание доспехов на персонажа в объединении C++ + OpenGL ?
0
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
09.01.2015, 17:44
Цитата Сообщение от MuradGu Посмотреть сообщение
Реально ли сделать (подставить нужное) в объединении C++ + OpenGL ?
Реально. Вопрос в сложности и целесообразности. В вашем случае скелетная анимация и одевание доспехов - это примерно как эргономичное рулевое колесо для будущего конструктора автомобилей, который только на прошлой неделе взял в руки циркуль и логарифмическую линейку (ладно, будем современными - скачал какой-нибудь Автокад, или что там). Прежде, чем навешивать различные рюшечки на игру - вы создайте хотя бы грубый функциональный прототип.

Если вам кажется, что того простенького кода, который я выше набросал, вам хватит надолго - вы очень ошибаетесь. Для игры, в которую вообще можно будет скелетную анимацию, вам нужно будет создать игровой движок (включающий, в частности, графический движок, звуковой движок, физический движок, менеджер ресурсов, систему пользовательского ввода, систему доступа к файловой системе, оконный менеджер), спроектировать и реализовать огромное множество взаимосвязанных классов, организовать игровой цикл и игровые состояния... А до тех пор скелетная анимация должна оставаться для вас светлой мечтой и путеводной звездой, если вы вообще хотите создать игру, в которую можно ее включить.

Так что я еще только один раз советую вам на время напрочь забыть о деталях и красивостях, и сосредоточиться на главном - изучении языка программирования и технологий, а затем - создании базового каркаса игрового приложения. Если у вас не будет этой основы, то разглагольствования о реализации различных красивостей для некой абстрактной ненаписанной (ни в настоящем, ни в будущем) игры - будут переливанием из пустого в порожнее. Не знаю, кому как, но меня подобное не прельщает, я не вижу в этом никакого будущего.
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
09.01.2015, 18:01
MuradGu, мы увидим первый уровень бомбермана?

Вот хороший ресурс

Спрайты:
http://www.spriters-resource.c... =bomberman

Звуки:
http://www.sounds-resource.com/search/?q=bomberman
0
2 / 2 / 1
Регистрация: 05.01.2015
Сообщений: 18
09.01.2015, 18:45  [ТС]
Гром, все дело в том, что я забыл про SFML СОВСЕМ и с другом смотрим курсы по c++ и практикуемся. Я просто интересовался, что брать за основу для физики в будущем, директХ или опенГЛ. ОпенГЛ в первую очередь привел, т.к. нашел курсы по нему, даже более, связка с++ + опенГЛ.
--
Сейчас мы начали изучать с++, потихоньку вникаем в язык и постоянно после каждого курса практикуемся. Очень интересно приходится изучать, т.к. есть большая мотивация.

Добавлено через 8 минут
8Observer8, я понял принцип, как работать с сфмл и т.д.
Примерно понял как сделать бомбы, которые взрываются. А уж тем более дойдя до выхода, как завершить игру. Решили все таки все с нуля поучить, т.к. работать с одной библиотекой, грубо говоря глупо. Она не выполнит все равно всех наших требований
0
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
09.01.2015, 20:18
Цитата Сообщение от MuradGu Посмотреть сообщение
за основу для физики в будущем, директХ или опенГЛ
Это рисовальщики, а для физики наиболее популярен Bullet (с открытым исходным кодом). Потихоньку осваиваю. Правда, эта библиотека для 3D, а для 2D тоже, наверное, есть какие-то бесплатные физические библиотеки. 2D игры я просто для тренировки ООП пишу. Потом 3D начнётся

Желаю вам побольше написать 2D игр, чтобы набить руки на ООП и набирать код быстро без подглядывания
0
2 / 2 / 1
Регистрация: 05.01.2015
Сообщений: 18
09.01.2015, 21:31  [ТС]
8Observer8, значит не так выразился)) для подобной 2д игры наверное физика и не нужна ?
То есть я хочу обойтись только c++ и OpenGL ну это имеется ввиду в основе игры. А дальше звук и т.д.
P.S. спасибо большое, а Вам пожелаю удачи, в написании игр)) А я наверное в 3д шагать не стану, если все сложится)) Для 2д игры у меня много планов
1
 Аватар для Гром
212 / 131 / 28
Регистрация: 20.03.2009
Сообщений: 1,123
Записей в блоге: 16
09.01.2015, 21:40
Цитата Сообщение от MuradGu Посмотреть сообщение
Гром, все дело в том, что я забыл про SFML СОВСЕМ и с другом смотрим курсы по c++ и практикуемся. Я просто интересовался, что брать за основу для физики в будущем, директХ или опенГЛ. ОпенГЛ в первую очередь привел, т.к. нашел курсы по нему, даже более, связка с++ + опенГЛ.
--
Сейчас мы начали изучать с++, потихоньку вникаем в язык и постоянно после каждого курса практикуемся. Очень интересно приходится изучать, т.к. есть большая мотивация.
Добавлено через 8 минут
8Observer8, я понял принцип, как работать с сфмл и т.д.
Примерно понял как сделать бомбы, которые взрываются. А уж тем более дойдя до выхода, как завершить игру. Решили все таки все с нуля поучить, т.к. работать с одной библиотекой, грубо говоря глупо. Она не выполнит все равно всех наших требований
Это очень правильное решение

Не по теме:

Хотя, честно говоря, хорошие видеоуроки по C++ не так-то просто. Я ради интереса просмотрел несколько первых уроков - кое-где откровенный быдлокод по площадям, большинство других тоже дают довольно некачественный материал или учат не тому чему стоит, и только один курс мне показался перспективным (по крайней мере, первый урок и список тем остальных хороши). Похоже, все еще лучший способ изучения языка - хорошие книжки от признанных авторов.


Но все равно о физике и графике (кстати, скелетная анимация к физике не имеет никакого отношения, это чисто подробности графического вывода) задумываться еще рано, по крайней мере, настолько подробно. Тем более что на ваш выбор наверняка сильно повлияет полученный к тому моменту опыт и более ясное представление об игре.

И на всякий случай еще раз предупрежу - не позволяйте графическому движку управлять данными вашей игры. Абсолютно все параметры и взаимодействие игровых объектов должны быть упрятаны в систему игровой логики и физический движок. Объекты графического движка могут иметь только данные, относящиеся к отображению информации на экране (номер кадра анимации, положение камеры относительно сцены, данные об освещении, системах частиц и т.п.).

О выборе систем рендеринга (таких как DirectX (точнее, Direct3D), OpenGL) и разнообразных движков (графических, физических и других) пока тоже не задумывайтесь. Сначала создайте каркас, поработайте с ним, используйте более простые, а также самописные средства. Ну а после этого сможете выбрать движки под ваши конкретные нужды, и затем адекватно вписать их в свою игровую архитектуру.
1
9954 / 2956 / 497
Регистрация: 05.10.2013
Сообщений: 8,081
Записей в блоге: 242
10.01.2015, 00:26
Цитата Сообщение от MuradGu Посмотреть сообщение
для подобной 2д игры наверное физика и не нужна ?
Это зависит от вашего желания. Может вы захотите включить в игру мини-игру с физиков. Вот нашёл, может вам интересно будет почитать: https://ru.wikipedia.org/wiki/Box2D Я может попробую потом, как окрепну на простых играх
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.01.2015, 00:26

Бесплатная стратегия для игры по интернету
Хочу поиграть в страттегию через интернет с реальными людьми желательно военную и бесплатную и в режиме реального времени можно чтобы...

Игра внутри игры
Всем привет. возник вопрос на стадии раздумий. я хочу сделать игру. а внутри неё мини игру или даже несколько. как сделать просто...

Создание подключения к интернету
Здравствуйте. Пытаюсь подключиться к интернету. Стоит ubuntu 18.04, но совершенно не пойму, как это тут все делается. У меня нет роутера, а...

сборка игры( первая игра)
Добрый день ! Я недавно начал заниматься флешом. и мне захотелось доделать одну игру. Псевдо 3D пин понг. Я собрал ее по уроку описанному...

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


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Установка нескольких штампов электронной подписи в строго определенных местах файла docx
ВладимирСамохин 19.07.2026
(В!) Работа с Электронной подписью - это неотъемлемая часть современного документооборота. Но что делать, если нужно поставить несколько штампов электронной подписи в строго определенных местах. . .
сукцессия 35. Научная статья о проделанной работе
anaschu 19.07.2026
Написал в формате латекс и пдф
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения. https:/ / habr. com/ ru/ sandbox/ 295048/ начало и оглавление - Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0) Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона Уважаемые коллеги! В продолжение. . .
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru