Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/516: Рейтинг темы: голосов - 516, средняя оценка - 5.00
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168

Создание игры(2d)

12.05.2009, 21:08. Показов 103609. Ответов 423
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно идея такого создать нечто на подобиe ->
http://www.newgrounds.com/portal/view/494301

Буду сюда задвать свои вопросы,думаю всем кто будет увлечён создание игры тоже будет интресно)

Otaka,этот задний буфер замещает собой background плюс курсор оставляет на неём свои артефакты,как его очищать,да так чтоб ещё и background у нас был.

________________________________________ ________________________________________ _________________________
Основные моменты
Вычисление угла поворота персонажа в зависимости от положения курсора мыши
То же
Поворот изображения(тут еще как смещать точку поворота)
Делаем пули
Все еще непонятки с пулями
Начинаем вычисление коллизий
Идея про то, как это должно быть
Как это должно быть реализовано
Как повернуть массив точек(регион)?
А тут код(в нем есть глюк. Потом есть исправленная версия)
Находим столкновение региона и линии. Исправленная версия столкновения регионов
Как это должно выглядеть в принципе?
Начинается долгое обсуждение того как делать редактор уровней
...
...
Первый вариант редактора
Снова эти пули
Функция которая бьет изображения на мелкие куски(тайлы)
Версия редактора
Загрузка сохранение
Еще версия
4
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2009, 21:08
Ответы с готовыми решениями:

Создание игры
Извините за очередную тему подобного рода, но все же не могу не спросить: Мечтаю о создании игры, пусть и очень простой.. Сейчас для меня...

Создание игры
Доброго времени суток! Лабораторная работа - сделать игру. Есть идея. Нужны любые советы, коментарии, пожелания и критика. Спасибо! ...

Создание игры
Люди есть у кого нибудь исходники игры на подобие игр от ALAWAR, что бы разобрать и поучиться на этом примере? Или подскажите где можно...

423
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
20.09.2009, 21:56  [ТС]
Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Ttile
{
 public:
 int p,x,y;
};
TTList<Ttile*>*t_map;
//---------------------------------------------------------------------------
void TForm2::CreateTileMatrix(int w, int h)
{
t_map = new TTList<Ttile*>();
Ttile * tile0 = new Ttile();
 
 
for(int i=0;i<w*h;i++)
{
 tile0->p = 0;
 tile0->y = 0;
 tile0->x = 0;
 t_map->Add(tile0);
}
...........
t_map это массив таилов,который содержит координаты таила из большой библиотеки,р - уровень(трава,вода),rx - располодения таила по х в базе,ry - располодения таила по y в базе относительно р.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
20.09.2009, 22:04
А вот так все стало гораздо понятнее. Ты создал один тайл, и w*h раз добавил его в список. Иш какой хитрый, ты хотел сделать оптимизацию по памяти?
Попробуй так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void TForm2::CreateTileMatrix(int w, int h)
{
t_map = new TTList<Ttile*>(); 
 
for(int i=0;i<w*h;i++)
{
  Ttile * tile0 = new Ttile();
 tile0->p = 0;
 tile0->y = 0;
 tile0->x = 0;
 t_map->Add(tile0);
}
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
20.09.2009, 22:08  [ТС]
Я хитрожоп DDDDDD
Спасибо,всё заработало,идём дальше (:
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
21.09.2009, 00:11  [ТС]
Ну чтож,получилось!

Рисовать желательно по центру,если ближе к бокам выскакивает ошибка,завтра буду исправлять.
Всем спасибо.
Вложения
Тип файла: rar Debug.rar (102.1 Кб, 42 просмотров)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
21.09.2009, 08:12
Цитата Сообщение от KTYJIX Посмотреть сообщение
Ну чтож,получилось!

Рисовать желательно по центру,если ближе к бокам выскакивает ошибка,завтра буду исправлять.
Всем спасибо.
Не запускается, ибо какие-то dll требует. Сделай статически слинкованный бинарник

И ещё просьба. Не только к тебе, но и ко всем, кто выкладывает rar'ы на форум - архивируйте пожалуйста вместе с папкой. А то все, кто будет скачивать, вынуждены перед разархивированием создавать ручками папку
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
22.09.2009, 00:33  [ТС]
Весь день сегодня просидел за этой проблемой(программа выходит за края карты таилов),так и не решил.

Отака,если свободное время будет, поможешь разобраться, и если что спрашивай.
Вложения
Тип файла: rar FTN.rar (57.8 Кб, 39 просмотров)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
22.09.2009, 21:02
Чтож, будем смотреть. Чего ты там натворил
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
22.09.2009, 21:04
А вылоди бинарник статически слинкованный. А на 2007 билдере уже не открывается
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
22.09.2009, 23:15
Достаточно любопытно. Добавь в этот редакторчик новые функции такие как... но потом.
Сейчас, у тебя есть небольшой редактор, нужно еще сделать:
  • Чтобы не выбивало ошибку "List index out of bounds",а то некрасиво как-то, там есть еще пара багов, но не критично.
  • Нужно сделать, чтобы можно было выбрать размер уровня - количество тайлов по X и Y, соответсвенно прокрутку
  • Функция (минимально)установить объект. То есть просто точку которая имеет координаты, и какую-то строку(например, "alien1", "weapon25"). Я написал "Минимально", так как нужно сделать простейший редактор, иначе начав мастерить его всерьез, это все грозит тем, что ты никогда не закончишь(или даже не начнешь) делать игру. Это я знаю сам по себе.
  • Сохранение, загрузка. Перед тем как просто написать функцию записи в файл лучше ХОООРОООШООО подумай о том, что потом этот файл будет расширятся(для объектов будут добавляться новые функции, новые элементы). Тут нужно очень серьезно подумать, иначе потом сильно пожалеешь, когда будешь не в состоянии переделать(у меня было и такое, очнень обидно было).
  • После всего этого продолжай работу над игрой.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
22.09.2009, 23:16
Otaka, ну хотябы ты скомпиляй то, что он выложил. А то посмотреть охота
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
22.09.2009, 23:26
Тут KTYJIX просто начал мастерить редактор типа как в Герое. Маловато тайлов!!!!
Сам еле скомпилил на 6 билдере.
Кстати, KTYJIX ты похоже создаешь BMP рисунки в фотошопе. Там у тебя bmp 8 версии думаю, что с этим надо тоже что-то делать.
Вложения
Тип файла: rar Project1.rar (280.2 Кб, 77 просмотров)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
22.09.2009, 23:29
> редактор типа как в Герое

Правда картинки отдолжен с Warcraft2, но если этот редактор он сваял своими силами, то зачот
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
23.09.2009, 20:20  [ТС]
Так,а теперь по порядку:

1.Писал не совсем сам,нашёл человека,который маялся подобной фигнёй(там у него ещё и про А.И. есть).У него был исходник редактора,вот типа такого как у меня, на DirectX.
Описывать он принцип работы редактора не стал,сказал:"Если вам интересно,разбирайтесь сами.".Ну вот я и разобрался (:,но как видно по глюкам значит не совсем.

2.Отака,редактор далеко не закончен,спасибо за указания (:
0
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
08.10.2009, 00:29  [ТС]
Хочу сделать наш массив двумерным.

Объявил в .h

C++
1
int**tile;
Потом в главном файле пишу:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void TForm2::CreateTileMatrix(int w, int h)
{
int **nm = new int[w][h];
 
for(int i=0;i<h;i++)
 { 
  for(int j=0;j<w;j++)
   {
    tile[j]=0;
   }
 }
 
tile = nm;
Tile_C_W = w;
Tile_C_H = h;
map_size_x=Tile_C_W*25-Form2->ClientWidth;
map_size_y=Tile_C_H*25-Form2->ClientHeight;
}
Жалуеться на
C++
1
2
3
int *nm = new int[w][h];
[BCC32 Error] TILING.cpp(82): E2313 Constant expression required
[BCC32 Error] TILING.cpp(82): E2034 Cannot convert 'int ( *)[1]' to 'int * *'
Кто виноват?,и как объявлять?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
09.10.2009, 21:24
А так нельзя объявлять двухмерные массивы. Нужно указывать хотябы одно измерение. Кстати, я не думаю, что это хорошая идея, но тебе виднее.
Ты можешь описать одномерный массив, его размерность, и функцию для его доступа(а можно и макрос).

C++
1
2
3
4
5
6
7
8
9
10
#define NM(x,y) nm[y*nm_w+x]
 
int * nm;
int nm_w=w;
int nm_h=h;
 
nm=new int[nm_w*nm_h];
 
NM(10,5)=34;
int x=NM(1,1);
Чет типа такого. А можно тайлы и классом объявить, тогда там в методах доступа и проверки устроишь, и все что хочешь. Твой выбор.
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
09.10.2009, 22:57  [ТС]
Слушай,а можешь объяснить как через fstream считывать переменные из файла.
Я знаю,что ты писал раньше про это,но ты делал это через свои классы,а мне охота самому.

Допустим у меня есть файл:
C++
1
2
3
4
LEVEL 1
map_size_x = 5
map_size_y = 5
tiles = 0,0,0,0,0,0,0,0,1,1,1,1,2,2,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0;
Как записывать я разобрался,как загружать всё сразу - я разобрался,а вот как загружать по отдельности нет.Гуглил гуглил,но ничего дельного не нашёл.

Почему я хочу перейти к 2мерному массиву:
Помнишь проблему в моём редакторе,что если рисовать по краям он ошибку выдавал.Так вот а у программы,где я этот алгоритм сдирал ошибок никаких не было и там 2мерный массив.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
10.10.2009, 14:04
Вот тебе процедура считывания из файла:
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
int level;
int map_size_x;
int map_size_y;
int tilecount=-1;
int*tiles;
 
bool TForm1::LoadLevel(String path)
{
ifstream in(path.c_str());
char buffer[100];
while(!in.eof())
        {
        in>>buffer;
        String s=buffer;
        s=s.LowerCase();//все кидаем в нижний регистр
        if(s=="level")
                {
                in>>level;
                }else
        if(s=="map_size_x")
                {
                in>>map_size_x;
                }else
        if(s=="map_size_y")
                {
                in>>map_size_y;
                }else
        if(s=="tilecount")
                {
                in>>tilecount;
                }else
        if(s=="tiles")
                {
                if(tilecount==-1)
                        {
                        ShowMessage("Не определено количество тайлов.");
                        return false;
                        }
                tiles=new int[tilecount];
                for(int i=0;i<tilecount;i++)
                        {
                        in>>tiles[i];
                        in.getline(buffer,100,',');
                        }
                }
        }
return true;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
bool res=LoadLevel("E:\\1.txt");
if(res==false)
        {
        ShowMessage("Уровень не загружен");
        }
}
Только заметь, что я использовал чуть-чуть измененный файлик:
LEVEL 1
map_size_x 5
map_size_y 5
tilecount 31
tiles 0,0,0,0,0,0,0,0,1,1,1,1,2,2,1,1,1,1,0,0, 0,0,0,0,0,0,0,0,0,0,0
Добавил переменную количества тайлов, а также поубирал '=', так как этот символ только все усложняет.
А насчет двухмерности. Воспользуйся данным класом:
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
class Tiles2d
{
int*tiles;
int w;
int h;
public:
Tile2d()
        {
        w=0;
        h=0;
        tiles=NULL;
        }
GetWidth()
        {
        return w;
        }
GetHeight()
        {
        return h;
        }
Clear()
        {
        for(int i=0;i<w*h;i++)tiles[i]=0;
        }
SetSize(int nw,int nh)
        {
        w=nw;
        h=nh;
        tiles=new int[w*h];
        Clear();
        }
int Get(int x,int y)
        {
        if(x<0||y<0||x>=w||y>=h)
                {
                return -1;
                }
        return tiles[y*w+x];
        }
bool Set(int x,int y,int value)
        {
        if(x<0||y<0||x>=w||y>=h)
                {
                return false;
                }
        tiles[y*w+x]=value;
        return true;
        }
};
Добавлено через 16 минут
Было бы вообще неплохо все за ООПировать. То есть все обернуть в классы. Тоесть сделай класс CLevel, у которого будут методы LoadLevel(path), FreeLevel(),методы доступа к данным и тд. Очень удобно потом будет работать.
1
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336
Записей в блоге: 1
10.10.2009, 14:30
медленно что-то вы делаете), один редактор за 5 месяцев)
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
10.10.2009, 14:37
Ну, может у KTYJIX, очень мало свободного времени, вот он и пишет совсем по чуть-чуть. А я ему помогаю просто советами. Цель ведь не написать игру как таковую, а научится писать программы.
Если хочешь чтобы было скорее, поговори с KTYJIX, и делайте вместе. Вдвоем вы вмиг закончите.
0
 Аватар для Adler
80 / 85 / 19
Регистрация: 07.05.2009
Сообщений: 336
Записей в блоге: 1
10.10.2009, 14:52
Otaka
Цитата Сообщение от Otaka Посмотреть сообщение
Если хочешь чтобы было скорее, поговори с KTYJIX, и делайте вместе. Вдвоем вы вмиг закончите.
эм... я даже не знаю что он делает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.10.2009, 14:52

Создание игры
Здравствуйте форумчане, мой вопрос состоит в том. Я молодой парень, который знает языки C++, C# и т.д. Ести небольшой интерес к созданию...

Создание игры
Добрый вечер. Начал работу над собственным проектом, и задался вопросом. (gamedev и прочие сайты перечитывал, но так ответа и не нашел....

Создание игры
Посмотрел как сейчас на коленке люди клепают инди игры под андроид\иос e.t.c. Созрел вопрос - куда двинуть, что использовать чтобы написать...

Создание игры на C++
Скажите , а можно ли создавать игры на С++? Если да , то буду рад увидеть примеры как это все реализовать и где можно. Возможно это С++...

Создание 3д игры
Извиняюсь, если такая тема уже была, не нашел. Хочу написать свою игрушку. Игрушка по типу что то gta sa. Но со своим смыслом и тп. Я готов...


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

Или воспользуйтесь поиском по форуму:
260
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru