| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
На мой взгляд в этом цикле дело. Он забирает управление и не даёт отлавливать getch(), а x (читать икс) ты никак кроме как при отхвате кода клавиши не меняешь, тем более как то не факт что будешь приходит в case 77: x++;break;, если case 75: x--;break; будет чаще выполнятся, что икс всегда будет маленьким. Потом ты в задаче написал мол жмём пробел и полетели, а по ходу программы ты везде отлавливаешь коды нажатых клавишь... |