Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > C++ Графика


Автор: _JunioR_ 11.5.2007, 22:31
Вот такая тема 
Моделирование полета стрелы в графическом режиме...
нужно что бы с одной точки (0,400) выберался угол полёта и при нажатии клавишы пробел она летит..но сколько раз не пробова она либо не летит либо прога зацыклюеться...
Вот то что есть:

#include <graphics.h>
#include <conio.h>
#include <dos.h>
#include <iostream.h>
#include <math.h>

void Figure (int x,int y,int color)
{

setfillstyle (SOLID_FILL,BLACK);
bar(0,0,639,479);
setcolor (color);
line(x,y,x+50,y);
line(x+50,y,x+20,y+10);
line(x+50,y,x+20,y-10);
line (0,400,639,400);
line (639,400,620,390);
line (639,400,620,410);
line (0,1,0,400);
line (0,0,10,15);

}
void main()
{

int d=VGA,m=VGAHI;
int x,y,dx,v0,a0,max_x,max_y,key,g=9.81,tt;

cout<<"Vedit  pocchatkovu svidkist m/s"<<endl;
cin>>v0;
cout<<"Vedit ugol viletu (gradusi)"<<endl;
cin>>a0;
cout<<"Ugol Naklona="<<a0/(180/3.14)<<endl;
cout<<"Chas polyotu="<<2*v0*sin(a0/(180/3.14))/g<<endl;
initgraph( &d,&m,"D:\\BC\\BGI");
x=0;y=240;
dx=1;
while (x+40<640)
{
Figure (x,y, WHITE);
key = getch();
if (key == 27) break;
Figure (x,y,WHITE);
switch (key){
case 75: x--;break;
case 77: x++;break;
case 72: y --;break;
case 80: y++;
}
if(kbhit())
if(getch()==27)break;
Figure(x,y,WHITE);

delay(10);
Figure(x,y,WHITE);
if (x+20 >=639) dx=-1;
if (x<=0) dx=1;
x+=dx;
}
closegraph();
}



Жду помощи!!!  

Автор: Promitheus 11.5.2007, 23:13
Код

while (x+40<640)
{
Figure (x,y, WHITE);
key = getch();
if (key == 27) break;
Figure (x,y,WHITE);
switch (key){
case 75: x--;break;
case 77: x++;break;
case 72: y --;break;
case 80: y++;
}


На мой взгляд в этом цикле дело.  Он забирает управление и не даёт отлавливать getch(), а  x (читать икс)  ты никак кроме как при отхвате кода клавиши не меняешь, тем более как то не факт что будешь приходит в case 77: x++;break;, если case 75: x--;break; будет чаще выполнятся, что икс всегда будет маленьким.

Потом ты в задаче написал мол жмём пробел и полетели, а по ходу программы ты везде отлавливаешь коды нажатых клавишь...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)