С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.53/55: Рейтинг темы: голосов - 55, средняя оценка - 4.53
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87

Разработка "игры" для зачета

08.02.2010, 17:14. Показов 12001. Ответов 77
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Идея такова: есть автобус, он ездит и собирает людей по остановкам, по дороге самособой. Кругом ездят другие машины. Когда автобус доезжает до края экрана появляется новая локация и т.д. Пока все что успел: более менее настроить управление. Вот полный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//---------------------------------------------------------------------------
 
#include <vcl.h>
#include "myclasses.cpp"
#pragma hdrstop
 
#include "mmsystem.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//DWORD fdwSound = SND_ASYNC | SND_FILENAME;
//HWND cur;
TForm1 *Form1;
 
Graphics::TBitmap*back;//Задний буффер
Graphics::TBitmap*bus;//Задний буффер
float X,Y,start=0,angle,speed=0,RotSpeed=2;
const float M_RAD_CONV=M_PI/180.0;//Для преобразований градусов и радианов
bool flag[4];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
//PlaySound("con_attack3.wav",NULL, fdwSound);
 
/*cur=LoadImage(0,"arrow.cur",IMAGE_CURSOR,0,0,LR_LOADFROMFILE);
if (cur==0)
    ShowMessage("Ошибка загрузки курсора!");
else
{
  Screen->Cursors[1]=cur;
  Form1->Cursor=1;
} */
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
back=new Graphics::TBitmap();
back->Width=Form1->Width;
back->Height=Form1->Height;
bus=new Graphics::TBitmap();
bus->LoadFromFile("bus.bmp");
X=100;
Y=100;
angle=10;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
back->Canvas->FillRect(Rect(0,0,back->Width,back->Height));//Очищаем задний буффер
RotateDC(back->Canvas->Handle,angle);
SetViewportOrgEx(back->Canvas->Handle,X,Y,NULL);//Смещаем нашу точку
back->Canvas->Draw(-33,-31,bus);
 
SetViewportOrgEx(back->Canvas->Handle,0,0,NULL);//Смещаем нашу точку назад
RotateDC(back->Canvas->Handle,0);
Form1->Canvas->Draw(0,0,back);//И рисуем все на экран - "обновление экрана"
 
X+=cos(M_RAD_CONV*angle)*speed;
Y+=sin(M_RAD_CONV*angle)*speed;
if(X<-50)X=Form1->Width+50;
if(Y<-50)Y=Form1->Height+50;
if(X>Form1->Width+50)X=-50;
if(Y>Form1->Height+50)Y=-50;
 
if (flag[1]==1 && start<10){
    start=start+0.1;
}
if (flag[1]==0 && start>0){
    start=start-0.05;
    if (start<0){
    start=0;
    }
}
if (flag[3]==0 && start<0){
    start=start+0.05;
    if (start>0){
    start=0;
    }
}
if (flag[3]==1 && start>-3){
    start=start-0.1;
}
if (flag[1]==1 || flag[1]==0){
    speed=start;
}
if (flag[3]==1 && flag[0]==0 && flag[2]==0){
    speed=start;
}
if (flag[0]==1 && flag[3]==0 && flag[2]==0 && start!=0){
    angle-=RotSpeed;
}
if (flag[2]==1 && flag[0]==0 && flag[3]==0 && start!=0){
    angle+=RotSpeed;
}
if (flag[3]==1 && flag[0]==1){
    speed=start;
    angle+=RotSpeed;
}
if (flag[3]==1 && flag[2]==1){
    speed=start;
    angle-=RotSpeed;
}
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if (Key==37){
    flag[0]=1;
}
if (Key==38){
    flag[1]=1;
}
if (Key==39){
    flag[2]=1;
}
if (Key==40){
    flag[3]=1;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormKeyUp(TObject *Sender, WORD &Key, TShiftState Shift)
{
if (Key==37){
    flag[0]=0;
}
if (Key==38){
    flag[1]=0;
}
if (Key==39){
    flag[2]=0;
}
if (Key==40){
    flag[3]=0;
}
}
//---------------------------------------------------------------------------
Все постепенно будет делаться. Вот только возник вопрос: как создать машины другие (канвасом или имейджем), которые будут ездить по своему заданному маршруту, и как их ПЕРЕМЕЩАТЬ. Желательно пример. Если есть другие полезные готовые функции, подходящие сюда, буду рад
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.02.2010, 17:14
Ответы с готовыми решениями:

задачка для зачета
Движение закрашенного круга по синусоиде из левого нижнего угла экрана в правый верхний угол.

Решите для зачета,очень срочно.!!!!!!
Дано целое число,больше 999.Используя одну операцию деления нацело и одну операцию взятия остатка от деления,найти цифру,соответствующую...

Строки, надо для зачета срочно
Помогите написать код срочно надо для зачета. Часто встречающаяся ошибка начинающих наборщиков – дважды записанное слово. Обнаружить и...

77
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
08.02.2010, 18:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sh4d°_°ff Посмотреть сообщение
я же сказал дело вкуса, да и от ситуации зависит))) а насчет ехе не понял... просто ресурсы обрабатывать удобно ресторатором и создавать.. а грузит то прога... как ей вытащишь картинки из ехе (если не ресторатор пишешь xDD?
Я к примеру сказал sh4d°_°ff. С тем что дело вкуса, согласен.
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
08.02.2010, 18:14
Цитата Сообщение от Luntegg Посмотреть сообщение
А переход по локациям? Или где 2d игра это есть тоже?
че переход по локациям? фон тупо меняешь
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
08.02.2010, 18:14  [ТС]
Вот про перемещение - просто думал это сложнее будет... Особо в этом не разбираюсь, задания на парах по сравнению с этим - тоже что муха со слоном.

Мини-идей было полно: если открыть двери на ходу, люди вываливаются из автобуса, резкий тормоз - следы на асфальте...
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
08.02.2010, 18:15
Цитата Сообщение от Luntegg Посмотреть сообщение
там же просто все
if (остановка){
open door;
close door;}
if (нужный поворот){
руль вправо;}

светофоры и т.д.
А если там перекресток? Руль тогда куда?
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
08.02.2010, 18:16  [ТС]
Цитата Сообщение от sh4d°_°ff Посмотреть сообщение
че переход по локациям? фон тупо меняешь
фон то да, надо автобус с той стороны, откуда выехал...
как бы сделать чтобы машины еще постоянно ездили, а не 5 проехало по карте и тишина.....
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
08.02.2010, 18:17
Luntegg, тебе полноценный симулятор автобуса нужно сделать или же просто имитацию повседневной жизни автобуса?
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
08.02.2010, 18:20  [ТС]
Цитата Сообщение от p_cM Посмотреть сообщение
А если там перекресток? Руль тогда куда?
ну если нужная улица прямо, то никуда, если слева, то налево)

Добавлено через 3 минуты
Цитата Сообщение от p_cM Посмотреть сообщение
Luntegg, тебе полноценный симулятор автобуса нужно сделать или же просто имитацию повседневной жизни автобуса?
для зачета уже по идее хватит может быть, чего сейчас есть.. другие там сапера, крестики-нолики делают... хочется для себя...

скорее второе...подъезжаешь к остановке, народ пропадает с нее, высаживаешь - появляется.. вокруг кипит жизнь - ездят машины по улицам...
не понимаю как светофор сделать
не функционал(так как уже есть), а светофор, вид сверху, чтобы видно было, что горит
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
08.02.2010, 18:24
Дам тебе один совет: Спустись на землю.

Добавлено через 1 минуту
А теперь все обдумай, разложи по полочкам, поставь сеье цель и иди к ней на встречу. Что конкретно тебя сейчас интересует?
0
говнокодер
 Аватар для sh4d°_°ff
1273 / 297 / 35
Регистрация: 31.10.2009
Сообщений: 1,432
08.02.2010, 18:25
Цитата Сообщение от Luntegg Посмотреть сообщение
фон то да, надо автобус с той стороны, откуда выехал...
а это как в приложенном мной примере))))) ака вот так-то! усе пробито))) да вообще все мутится через. Короче... гугл "Borland c++ builser canvas" + пример + if/else + таймер + прямые руки = получишь зачет
0
81 / 39 / 3
Регистрация: 29.01.2010
Сообщений: 386
08.02.2010, 18:31
sh4d°_°ff, А как сделать так, чтоб автобусы ездили только по дороге и машины тоже ездили только по дороге, а выезд на трассу делал машине ущерб. Реализовывать все еоординаты через иф(елсе) - но это очень долго и много. Может есть какой способ по компактней?
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
08.02.2010, 18:33  [ТС]
Уак раз таки по полочкам все и разложено)
Сейчас план сделать чтобы машины кроме автобуса ездили сами... Потом переход по локациям, или еще лучше будет, движение карты за автобусом...
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
08.02.2010, 18:35
Вот над этим и надо думать. Когда с этой проблемой разберешься переходи к следующей.
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
08.02.2010, 18:37  [ТС]
Ну ок, буду пока делать, что в планах. Будут еще вопросы, спрошу. Еще раз спасибо.
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
08.02.2010, 19:01
Вот что-то набросал. Перемещение точки на форме. Много недороботок, но общий принцип, думаю понятен.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Math.hpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Graphics::TBitmap *krug=new Graphics::TBitmap;
int x=0,y=0,tx=250,ty=250;
int where_up,where_left=4;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  if(x!=tx && y!=ty){
      if(tx!=x){
         if(tx<x){ where_left=1;}
         if(tx>x){ where_left=2;}
      }
        if(ty!=y){
         if(ty<y){ where_up=1;}
         if(ty>y){ where_up=2;}
      }
  }
   if(x==tx && y==ty){
     Randomize();
     int p=RandomRange(1,25);
     int p2=RandomRange(1,25);
     tx=p*10;
     ty=p2*10;
   }
   if(where_up==1){y-=10;}
  if(where_up==2){y+=10;}
  if(where_left==1){x-=10;}
  if(where_left==2){x+=10;}
Form1->Repaint();
Form1->Canvas->Draw(x,y,krug);
Form1->Canvas->Rectangle(tx,ty,tx+10,ty+10);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
krug->Width=10;
krug->Height=10;
krug->Canvas->Brush->Color=clRed;
krug->Canvas->Rectangle(0,0,10,10);
Form1->Canvas->Rectangle(tx,ty,tx+10,ty+10);
}
//---------------------------------------------------------------------------
1
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
08.02.2010, 21:44  [ТС]
Не получается сделать движение произвольной машины
Не двигается, пытался по разному, никак...
Вложения
Тип файла: rar Funny Bus.rar (1.72 Мб, 34 просмотров)
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
09.02.2010, 17:58  [ТС]
сделайте пожалуйста кто-нибудь пример того, как фура едет прямо и на середине карты поворачиват (плавно, как и автобус) и едет вниз

Добавлено через 17 часов 21 минуту
Сделал движение вперед, но как сделать, чтобы плавно поварачивал, не понимаю

Как кстати лучше будет:
1) Автобус доезжает до края карты и появляется на новой локации
2) Камера централизуется на автобусе, и он ездит по большой карте

Добавлено через 2 часа 39 минут
Цитата Сообщение от Luntegg Посмотреть сообщение
2) Камера централизуется на автобусе, и он ездит по большой карте
Никак не сделать, хоть и в создании 2d игры это есть... 3 часа сидел, а результата 0...
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
09.02.2010, 18:03
Вот Lunteqq, пища для размышлений:
На форме Image1(TImage), pnt(TValueListEditor), bus_t(TTimer):
Сперва создаем поле (город):
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
ost_x=0;
ost_y=0;
Image1->Canvas->Rectangle(0,0,20,20);
int r,t;
int y=0;
 for(int y=0;y<13;y+=4){
   for(int i=0;i<21;i++){
         if(pnt->Values[IntToStr(i)+"/"+IntToStr(y)]!="1" || pnt->Values[IntToStr(i)+"/"+IntToStr(y)]!="2"){
        Form1->Canvas->Brush->Color=clGray;
        Form1->Canvas->Rectangle(i*20,y*20,i*20+20,y*20+20);
        pnt->Values[IntToStr(i)+"/"+IntToStr(y)]="1";}
        }
   }
int x=0;
 for(int x=0;x<21;x+=4){
  for(int i1=0;i1<13;i1++){
  if( pnt->Values[IntToStr(i1)+"/"+(y)]!="1" || pnt->Values[IntToStr(i1)+"/"+(y)]!="2"){
   Form1->Canvas->Brush->Color=clGray;
   Form1->Canvas->Rectangle(x*20,i1*20,x*20+20,i1*20+20);
   pnt->Values[IntToStr(x)+"/"+(i1)]="1";}
             }
 }
 
            Randomize();
         r=RandomRange(1,21);
         t=RandomRange(0,5);
         t*=4;
         Form1->Canvas->Brush->Color=clRed;
         Form1->Canvas->Rectangle(r*20,t*20,r*20+20,t*20+20);
         ost_x=r*20;
         ost_y=t*20;
Да, я пользуюсь при создании поля TValueListEditor, но так нравится и удобно.
Дальше запускаем наш автобус:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 if(Image1->Left!=ost_x || Image1->Top!=ost_y){
 
 
      if(Image1->Left<ost_x || Image1->Left>ost_x){
        if(Image1->Left<ost_x){
          if(pnt->Values[IntToStr(Image1->Left/20+1)+"/"+IntToStr(Image1->Top/20)]!=""){
           Image1->Left+=20;}}
 
 
           if(Image1->Left>ost_x){
          if(pnt->Values[IntToStr(Image1->Left/20-1)+"/"+IntToStr(Image1->Top/20)]!=""){
           Image1->Left-=20;}}
 
      }
 
      else {
      if(Image1->Top<ost_y){  Image1->Top+=20; }
      if(Image1->Top>ost_y){  Image1->Top-=20; }
      }
 
 
 }
Вот такой у меня вариант. Опять же много недочетов и спорных методов, но чтобы написать нормально нужно время, а его у меня не так много.
1
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
09.02.2010, 18:08  [ТС]
С TValueListEditor вообще не знаком
Мдааа, чувствую не слишком-то это легко...
Можно небольшие комментарии к строчкам?
Что и куда пихать....
0
Покинул форум
3189 / 1368 / 109
Регистрация: 29.01.2010
Сообщений: 2,887
09.02.2010, 18:15
Нет. Сейчас у меня проблемы с инетом, возможно позже.
0
 Аватар для Luntegg
8 / 8 / 1
Регистрация: 06.02.2010
Сообщений: 87
09.02.2010, 18:18  [ТС]
Хорошо. Просто на твоем примере мне если честно как-то не очень понятно. Буду надеятся что Otaka поможет, его же все таки божья коровка изначально была, и он там помогал в теме той по большей части...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.02.2010, 18:18
Помогаю со студенческими работами здесь

С++ Создать понятную программу с объяснениями ( для зачета)
На зачете по Основам объектно-ориентированного программирования получил незачет. Препод требует написать СОЛИДНУЮ,а также СЕРЬЕЗНУЮ...

Последние задание для зачета люди спасите ч.1
А15.1 Элемент ai арифметической прогрессии вычисляется по формуле: ai+1 = ai + d , i = 0,1,2, … Поле first – вещес- твенное число,...

Разработка 2д игры
Я знаю с++ и си.Хотела бы создать свою игру но не в виде консольного приложение.можете подсказать хорошие платформы для разработки 2д игры...

Разработка игры для Android
Всем доброго времени суток! Недавно (придумал) 2D игру , но реализовать её не могу т.к нооб :). Нужен какой-нибуть бесплатный движок для...

Разработка игры для Дипломной Работы
Здравствуйте, форумчане. Учусь на математическом факультете в КемГУ, на прикладной математике (3 курс). Пару месяцев назад загорелся...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru