0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 10
1

Графика: движение машины по нажатию клавиш

04.09.2012, 11:22. Показов 3467. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Написал программу вывода рисунка через Graph. Сейчас надо чтобы двигалась машина а фон остался на месте. Двтгать машину надо стрелками по 5 пикселям и Page up Page down home end по 10 пикселя шагами. Помогите направльте в нужное русло как это сделать.
Вот программа.

Pascal
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
uses Graph,crt;
 
var
  grDriver : Integer;
  grMode   : Integer;
  ErrCode  : Integer;
  key:char;
begin
  ClrScr;
  grDriver :=detect;
  grMode:=0;
  InitGraph(grDriver, grMode,'');
  ErrCode := GraphResult;
  if ErrCode = grOk then
  begin
 
    { grafika }
 
    {fon}
    rectangle(1,1,getmaxX,getmaxY);
    line(1,1,getmaxX,getmaxY);
    line(640,1,1,480);
    {kolesa}
    circle(200,300,30);
    circle(200,300,35);
    floodfill(167,301,getmaxcolor);
    circle(400,300,30);
    circle(400,300,35);
    floodfill(367,301,getmaxcolor);
    circle(400,300,5);
    circle(200,300,5);
    rectangle(190,290,210,310);
    rectangle(390,290,410,310);
    {ruchka}
    rectangle(250,250,270,260);
    {bak}
    rectangle(150,250,160,260);
    {dno}
    line(240,300,360,300);
    line(130,300,160,300);
    line(440,300,470,300);
    arc(200,300,1,180,40);
    arc(400,300,1,180,40);
    {korpus}
    line(130,300,130,230);
    line(470,300,470,230);
    line(470,230,130,230);
    arc(240,230,120,180,80);
    line(200,160,300,160);
    line(300,160,350,230);
    line(300,160,300,230);
    line(200,160,200,230);
    {truba}
    rectangle(80,290,130,300);
    {fapbI}
    rectangle(125,250,130,270);
    rectangle(470,250,475,270);
    rectangle(430,250,445,255);
    {antenna}
    line(410,180,410,230);
    circle(410,170,10);
    ReadLn;
    CloseGraph;
  end
  else
    WriteLn('oshibka:', GraphErrorMsg(ErrCode));
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2012, 11:22
Ответы с готовыми решениями:

Движение квадрата по нажатию клавиш
Составьте программу по следующему сценарию: на экране нарисован квадратик. При нажатии клавиш...

Движение точки по нажатию клавиш
Упростил программу, чтобы хотя бы при нажатии одной клавиши (w) точка двигалась. С текстом...

Движение треугольника по нажатию клавиш
Надо рисовать треугольник . при нажатие клавиш w треуголник должно двигатся вверх. s- вниз, a-в...

графика. красный круг передвигается по нажатию клавиш
В произвольном месте экрана появляется красный круг. он передвигается по нажатию клавиш управления...

8
Заблокирован
04.09.2012, 14:44 2
для начала, рисование машины в отдельную процедуру оформить
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
04.09.2012, 15:34 3
Цитата Сообщение от MansMI Посмотреть сообщение
для начала, рисование машины в отдельную процедуру оформить
это раз;
второе - это координаты машины задавать не явно, а через переменные.
1
0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 10
05.09.2012, 09:29  [ТС] 4
Спасибо за наставление получилось. Теперь движется и даже перемещается когда за пределы вылазиет. Теперь вопрос можно ли сделать так чтобы допусти половина машины которая вышла за пределы появлялась на другой стороне а при движении дальше и вся машина появлялась.

Pascal
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
142
Program Laborator2;
  Uses Crt,Graph;
  Const Step = 5;
        Step2 = 10;
    {Instr = 'ESC';}
  Var
    GrDriver, GrMode : Integer;
    X,Y              : Integer;
    XStr,YStr        : String;
    Ch               : Char;
{ђЁб㥬 Є*авЁ*Єг}
 
Procedure MakeSight(X, Y : Integer);
  Begin
    setbkcolor(0);
    {ђЁб㥬 д®*}
    rectangle(1,1,getmaxX,getmaxY);
    line(1,1,getmaxX,getmaxY);
    line(640,1,1,480);
    {ђЁб㥬 Є®«Ґб*}
    circle(x+200,y+300,30);
    circle(x+200,y+300,35);
    {floodfill(x+167,y+301,getmaxcolor);}
    circle(x+400,y+300,30);
    circle(x+400,y+300,35);
{    floodfill(367,301,getmaxcolor); }
    circle(x+400,y+300,5);
    circle(x+200,y+300,5);
    rectangle(x+190,y+290,x+210,y+310);
    rectangle(x+390,y+290,x+410,y+310);
    {ђЁб㥬 агзЄг}
    rectangle(x+250,y+250,x+270,y+260);
    {ђЁб㥬 Ў*Є}
    rectangle(x+150,y+250,x+160,y+260);
    {ђЁб㥬 ¤*®}
    line(x+240,y+300,x+360,y+300);
    line(x+130,y+300,x+160,y+300);
    line(x+440,y+300,x+470,y+300);
    arc(x+200,y+300,1,180,40);
    arc(x+400,y+300,1,180,40);
    {ђЁб㥬 Є®аЇгб}
    line(x+130,y+300,x+130,y+230);
    line(x+470,y+300,x+470,y+230);
    line(x+470,y+230,x+130,y+230);
    arc(x+240,y+230,120,180,80);
    line(x+200,y+160,x+300,y+160);
    line(x+300,y+160,x+350,y+230);
    line(x+300,y+160,x+300,y+230);
    line(x+200,y+160,x+200,y+230);
    {ђЁб㥬 вагЎг}
    rectangle(x+80,y+290,x+130,y+300);
    {ђЁб㥬 д*ал}
    rectangle(x+125,y+250,x+130,y+270);
    rectangle(x+470,y+250,x+475,y+270);
    rectangle(x+430,y+250,x+445,y+255);
    {ђЁб㥬 **вҐ**г}
    line(x+410,y+180,x+410,y+230);
    circle(x+410,y+170,10);
 
 
 
    {SetColor(green);
    rectangle(x+50,y+50,x+10,y+10);
    circle(x,y,10);
    circle(x+100,y+100,20);}
 
   {Circle(X, Y, 80);
    SetColor(LightGreen);
    Line(X-80, Y, X+80, Y);
    Line(X, Y-63, X, Y+63);
    SetColor(LightRed);
    Circle(X, Y, 2);
    Str(X, XStr);
    Str(Y, YStr);
    SetColor(Yellow);
    OutTextXY(X+5, Y-35, 'x=' + XStr);
    OutTextXY(X+5, Y-20, 'y=' + YStr) }
  End;
{}
BEGIN
  GrDriver := detect;
  GrMode:=0;
  InitGraph(GrDriver, GrMode, 'C:\TP\BGI');
  X:=0; Y:=0; {}
  {SetColor(LightGray);}
  {Rectangle(50, 425, 600, 460);}  {}
  {OutTextXY(120, 440, Instr);}
  MakeSight(X, Y); {}
  While TRUE do {}
    begin
      Ch := ReadKey;
      Case Ch of
        #27: begin CloseGraph; Halt(1) end; {}
 
        #75:begin X:= X-Step;
        if x<-460 then x:=560;
          MakeSight(x,y);
        end; {}
        #77:begin X:= X+Step;
        if x>560 then x:=-460;
          MakeSight(x,y);
        end; {}
        #72:begin Y:= Y-Step;
        if y<-340 then y:=340;
          MakeSight(x,y);
        end;
        #80:begin Y:= Y+Step;
        if y>340 then y:=-340;
          MakeSight(x,y);
        end;
        #82:begin x:= x-Step2;
        if x<-460 then x:=560;
          MakeSight(x,y);
        end;
        #83:begin x:= x+Step2;
        if x>540 then x:=-490;
          MakeSight(x,y);
        end;
        #71:begin Y:= Y-Step2;
        if y<-320 then y:=320;
          MakeSight(x,y);
        end;
        #79:begin Y:= Y+Step2;
        if y>320 then y:=-320;
          MakeSight(x,y);
        end;
 
      end;
 
      {cleardevice;
      dec(y,5);
      if y<1 then y:=150;}
      ClearViewPort;
      {SetColor(LightGray);
      Rectangle(50, 425, 600, 460);
      OutTextXY(120, 440, Instr); }
      MakeSight(X, Y)
    end;
 
 
     CloseGraph;
END.
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
05.09.2012, 10:20 5
Aleksey.K, можно, но сложно... дофига мороки...
0
0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 10
05.09.2012, 10:35  [ТС] 6
Тогда еще вопрос мне надо продемонстрировать картинку в трех режимах CGA EGA VGA при изменении на какой то из них меняется размер картинки и цвет можно ли как нибудь этого избежать?
0
0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 10
10.09.2012, 10:18  [ТС] 7
Может кто ответить. Использование OpenGL в паскале. или отрисовка без мерцаний возможно?
0
608 / 406 / 8
Регистрация: 26.04.2012
Сообщений: 2,065
12.09.2012, 14:48 8
Цитата Сообщение от Aleksey.K Посмотреть сообщение
Использование OpenGL в паскале
0
0 / 0 / 0
Регистрация: 04.09.2012
Сообщений: 10
12.09.2012, 16:04  [ТС] 9
Хорошо хорошо. Вычитал уже что нельзя. но как то можно или нет можете сказать точно избежать мерцаний.
0
12.09.2012, 16:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.09.2012, 16:04
Помогаю со студенческими работами здесь

Добавить движение колёс машины
Сделал машинку, добавил движение вправо. Нужно добавить движение колёс, либо что бы на вправо...

Рисование фигур по нажатию клавиш.
Написать программу, чтобы при нажатии клавиши &quot;р&quot; рисовала бы круг, при нажатии клавиши &quot;Ь&quot;...

Движение картинки по нажатию клавиш-стрелок Left и Right
Добрый вечер всем. Пытаюсь тут осуществить управление картинкой по оси X в PictureBox, заставив...

Задать движение одной машины только по большому кругу, второй машины только по малому
В прикладном окне ездят несколько машин, которые движутся по кольцевой дороге. Помогите изменить...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru