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

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

12.05.2009, 21:08. Показов 102442. Ответов 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
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
13.12.2009, 19:10
Студворк — интернет-сервис помощи студентам
А зачем тебе для вывода русских букв использовать Юникод? Оно и просто так отлично выводится.
А уж если уж хочется выводить, например, китайские иероглифы, то пользуйся функцией Canvas->TextOutW + юникодный шрифт типа Arial Unicode MS.

Добавлено через 1 минуту
А если у тебя Canvas->TextOut("Привет",0,0) выводит кракозябры, то это значит, что у тебя бока с кодировкой.
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
13.12.2009, 20:29  [ТС]
Разобрался, проблема была в кодировке Windows 7, тогда ещё вопрос, как можно свой шрифт засунуть в программу?
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
14.12.2009, 11:57
поиск бы тебе помог:
Нужен совет знающих людей...
Нужен совет знающих людей...
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
14.12.2009, 23:49  [ТС]
Спасибо большое.
Последний вопрос - есть .txt файл:

test.txt
{
a 10
b 20
text Hello World
n 30
}

Как мне вынуть именно "Hello World" в String text?

Попробовал вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String text;
 
ifstream in(path.c_str());
char buffer[100];
while(!in.eof())
{
  in>>buffer;
  String s = buffer;
  if(s=="text")
  {
    char t[100];
    while(t!="/text");
    {
    in>>t;
    text += t;
    text += " ";
    }
  }
}
Но программа не заканчивает компиляцию, причём, не выдавая ошибок.
Если while(t!="/text") поменять на while(t=="/text"), программа компилится нормально.
Подскажите, пожалуйста, где моя ошибка?

Спасибо.
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
15.12.2009, 16:56
Но ведь нельзя так сравнивать массивы байтов.
Если
C++
1
2
3
4
5
6
7
String s="text";
String s2="text";
//Вот тут вот можно и сравнивать через равно не равно
if(s==s2)
   {
   ...
   }
Если у тебя
C++
1
char t[100];
то увы, нужно использовать strcmp
C++
1
2
3
4
if(strcmp(t,"text")==0) //строки одинаковы?
   {
...
  }
Добавлено через 56 секунд
А почему text со слешем("/text")?
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
15.12.2009, 20:23  [ТС]
Отака, как всегда, нечеловеческое спасибо тебе, всё заработало.
В предыдущем посте допустил ошибку, объясняю:
Есть text.txt из которого нам нужно вынуть параметр text.

text.txt file:
a 10
b 20
text Hello,World! /text
c 210

Пишем для него такую функцию:
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
void getFromFile(String path,String indx)
    {
     ifstream in(path.c_str());  //Загружаем фаил, переводим наш String в Char по средством .c_str()
     char buffer[100];     //Буфер, в который будут загружаться слова.
     while(!in.eof())  
        {
        in>>buffer; 
        String s = buffer;
        if(s=="a"){in>>a;}else 
        if(s=="b"){in>>b;}else
        if(s==indx+"text")
        {
            char t[100]; //Создаём ещё один буфер
            in>>t;
            while(strcmp(t,"/text")) //Пока слово в буфере не равно "/text"
            {
                text += t; //Добавляем слова из буфера в наш String text
                text += " "; //Так как in>> пропускает пробелы то, мы должны ставить их сами.
                in>>t;
            }
        }else
        if(s=="c"){in>>c;}
        }
     }
Всё работает, спасибо Отака.
0
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
15.12.2009, 20:37
Как вы в игрухе изображение вращали ?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
15.12.2009, 20:56
Вот так вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void RotateDC(HANDLE dc,float angle)
{
XFORM xform;
 
angle = angle * 3.1416 / 180.0;
 
xform.eDx = 0.0f;
xform.eDy = 0.0f;
xform.eM11 = cos(angle);
xform.eM12 = sin(angle);
xform.eM21 = -sin(angle);
xform.eM22 = cos(angle);
 
SetGraphicsMode(dc, GM_ADVANCED);
SetWorldTransform(dc, &xform);
}
Пользуемся поиском по форуму.
1
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
16.12.2009, 14:17
Хм, а второй параметр в чем у вас измеряется ?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
16.12.2009, 17:09
Вроде бы как в градусах, но может я уже забыл и там в радианах... хотя нет, в градусах. Мы ведь там внутри их переводим в радианы
C++
1
angle = angle * 3.1416 / 180.0;
1
Задающий вопросы (%
 Аватар для KTYJIX
16 / 15 / 0
Регистрация: 09.05.2009
Сообщений: 168
20.12.2009, 00:09  [ТС]
Как достать блок данных из txt файла.
Кому интересно.

Предположим у нас есть класс планета:

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
class TPlanet
{
 public:
 String name;
 int angVel, orbitVel, solarKof;
 void InitPlanet(String Name,String path)
    {
     name = Name;
     ifstream in(path.c_str());
     char buffer[100];
     while(!in.eof())
     {
         in>>buffer;
         String sb = buffer;
         if(sb == Name)
          {
            char t[100];
            in>>t;
            String st = t;
            while(strcmp(t,"/Planet")!=0)
            {
                if(st=="AngVel")  {in>>angVel;}else
                if(st=="OrbitVel"){in>>angVel;}else
                if(st=="SolarKof"){in>>angVel;}
                in>>t;
                st = t;
            }
          }
     }
     in.close();
     }
 };
Допустим, нам нужна информация о Солнце, делаем так:
InitPlanet("Sun","Configs\\Engine\\Plane ts.txt")

Planets.txt
{
Earth
Ang 27
OrbitVel 365
SolarKof 10
/Planet

Sun
AngVel 0
OrbitVel 0
SolarKof 100

/Planet

Venus
AngVel ?
OrbitVel ?
SolarKof ?
/Planet

Только информация из нужного нам блока заносится в класс Planet.

Добавлено через 22 часа 41 минуту
Отака, а как нам заставить тело двигаться по орбите(вокруг чего то)?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
20.12.2009, 12:31
Полярные координаты.
x=cos(текущий угол в радианах)*длина_орбиты+X_центр_вращения
y=sin(текущий угол в радианах)*длина_орбиты+Y_центр_вращения.

это будет круговая орбита. Если нужна эллиптическая, то можно приплюсовывать еще один sin(или cos, не важно, просто фаза будет чуть-чуть изменена) к X, и тогда орбита будет вытягиваться по X, так же можно делать и с Y. Тем самым заставляя орбиты быть эллиптическими.
Если надо, могу написать пример.
1
Программист TH
 Аватар для DanUnited
292 / 147 / 12
Регистрация: 06.01.2009
Сообщений: 537
20.12.2009, 19:03
Вроде бы как в градусах, но может я уже забыл и там в радианах... хотя нет, в градусах. Мы ведь там внутри их переводим в радианы
лана, тогда можно специально для меня пример исключительно использования ?
0
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
24.12.2009, 21:12
Заинтересовался данной темой, сам сейчас пытаюсь написать игру стрелялку такого же плана для курсовой. Меня из всех проблем больше всего интересует как сделать сам выстрел, как сделать его понаправлению, и чтобы пуля не летела от точки А до точки Б ? Можно ли это в Си или лучше учить флэш?
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
24.12.2009, 21:21
Конечно можно в С, С++ и во флеше.
А почему " чтобы пуля не летела"? Чтобы не летела, нужно просто проверять на столкновение линии от А к Б с объектами(как это сделать, смотри в этой теме, про регионы). А чтобы летели пули, нужно высчитать арктангенсом угол(если ты его еще не знаешь), а потом на каждом шаге с помощью полярных координат(dx=cos(угол)*скорость, dy=sin(угол)*скорость)вычисляешь следующее положение пули.
Во флеше, конечно, может быть это и проще будет немного.
1
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
24.12.2009, 22:13
А есть же в математике "уравнение прямой" .. через такое уравнение можно чтото сделать ? ... я просто не понимаю как в Си сделать так, чтобы одновременно летело несколько пуль и каждая со своей тракторией. По идеи создавать для каждой пули отдельный Timer и отдельное Image не выход))))))
0
 Аватар для Otaka
1857 / 714 / 55
Регистрация: 11.12.2008
Сообщений: 1,019
24.12.2009, 22:19
Почитай эту тему сначала до конца. Я уже писал, как сделать динамический массив пуль, и чтобы каждая пуля летела по своей траектории.Уравнение прямой для этой задачи хоть и подходит, но оно тут не нужно, так как все можно сделать гораздо проще.
0
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
24.12.2009, 22:21
Otaka, Спасибо... постараюсь прочесть все в этой жизни и до того момента как меня охватит склироз кибер-мозга ))))

Не по теме:

Может распечатать и книжку небольшую сделать из этой темы ? ))))



Кстати, игра по ссылке, вылаженная как экземпляр меня напрягла. Она у меня слетала как только Опера набирала 2-3к Мб занятой оперативы. Это из-за того что хранилась информация о трупах на земле или что ?
0
 Аватар для Deimon
35 / 35 / 6
Регистрация: 29.08.2009
Сообщений: 183
23.01.2010, 16:47
Цитата Сообщение от KTYJIX Посмотреть сообщение
Разброс выстрела,у него же точно не 100%
А если точка выстрела берется по двум координатам где первая - положение ствола (дуло)
а вторая - прицел (мышь)

если сделать так.

X= (положением мыши по X) -30 + (rand()%60);
Y= (положением мыши по Y) -30 + (rand()%60);

Получется круг радиусом в 30 пикселей - и есть точность. Сойдет?

Не по теме:

Можно кстати взять переменную Accuraty (Acc) и пусть игрок ее прокачивает в минус. (тоесть изначально =60 , а потом с уровнем по -1 прибавляется. И тогда вместо 30 писать Acc а прибавлять "(rand()%Acc*2)". Добавить так сказать элементы RPG :)



Добавлено через 2 минуты
Вопрос такой вот. По поводу выстрелов. Можно ли взять картинку пули, и каждый раз когда игрок стреляет копировать ее создавая новый объект TImage и крутить под нужным углом. И удалять каждый раз при попадании или ухода за экран?
0
18 / 18 / 1
Регистрация: 24.09.2009
Сообщений: 98
01.02.2010, 21:02
Можно. Я так делал. Классы тебе в этом помогут.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.02.2010, 21:02

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
340
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru