Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 415

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

У меня к вам вопрос такой. Eсть 16 изображений и 16 графиков функций
я пишу массив a= 16 значений по x
массив b= 16 значений по y
массив с= 16 имен изображений
мне нужно что бы по нажатию кнопки 'вверх' данные из ячеек
[a1]:=x+1, b[1]:=y-1, c[1]:='1.bmp';

и ничего не получается

при последующем нажатии клавиши подставлялись значения следующих ячеек масивов менялось изображение и направление движения.

но при этом всегда должно быть движение вперед
т.е x+1 - движение вперед

x+1
y-1 - движение вперед и вниз

код программы в приложении к вопросу
Заранее спасибо.

Приложение:
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, ExtCtrls, StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Image1: TImage;
  12. Timer1: TTimer;
  13.  
  14. procedure FormActivate(Sender: TObject);
  15. // procedure Timer1Timer(Sender: TObject);
  16. procedure FormClose(Sender: TObject; var Action: TCloseAction);
  17. procedure FormKeyDown(Sender: TObject; var Key: Word;
  18. Shift: TShiftState);
  19. procedure Timer1Timer(Sender: TObject);
  20.  
  21. private
  22. { Private declarations }
  23. public
  24. { Public declarations }
  25. end;
  26. const nx=400;
  27. ny=400;
  28. var
  29. Form1: TForm1;
  30. a : array [1..16] of integer;
  31. b : array [1..16] of integer;
  32. c: array[1..16] of string;
  33. x, y , i, j, m, n, w, h : integer;
  34. implementation
  35.  
  36. {$R *.dfm}
  37. var
  38. back, bitmap, buf: Tbitmap;
  39. backRct, BitmapRct, BufRct: TRect;
  40.  
  41. procedure TForm1.FormActivate(Sender: TObject);
  42. begin
  43. n:=1;
  44. back:=Tbitmap.Create;
  45. bitmap:=Tbitmap.Create;
  46. buf:=Tbitmap.Create;
  47. back.LoadFromFile('background.bmp');
  48. form1.Image1.Canvas.Draw(0,0,back);
  49. bitmap.LoadFromFile(c[n]);
  50. bitmap.Transparent:=true;
  51. bitmap.TransparentColor:=bitmap.Canvas.Pixels[1,1];
  52. w:=bitmap.Width;
  53. h:=bitmap.Height;
  54. buf.Width:=w;
  55. buf.Height:=h;
  56. buf.Palette:=back.Palette;
  57. buf.Canvas.CopyMode:=cmSrcCopy;
  58. bufrct:=bounds(0,0,w,h);
  59. x:=-w;
  60. y:=20;
  61. backrct:=bounds(nx+x,ny+y,w,h);
  62. buf.Canvas.CopyRect(bufrct,back.Canvas,backrct);
  63.  
  64.  
  65.  
  66. end;
  67. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  68. begin
  69. back.Free;
  70. bitmap.Free;
  71. buf.Free;
  72.  
  73. end;
  74.  
  75. procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  76. Shift: TShiftState);
  77.  
  78. begin
  79. if key=vk_left then
  80. begin
  81. a[1]:=x+1;
  82. b[1]:=y-0;
  83. c[1]:='1.bmp';
  84.  
  85. a[2]:=x+2;
  86. b[2]:=y-1;
  87. c[2]:='2.bmp';
  88.  
  89. a[3]:=x+1;
  90. b[3]:=y-1;
  91. c[3]:='3.bmp';
  92.  
  93. a[4]:=x+1;
  94. b[4]:=y-2;
  95. c[4]:='4.bmp';
  96.  
  97. a[5]:=x+0;
  98. b[5]:=y-2;
  99. c[5]:='5.bmp';
  100.  
  101. a[6]:=x-1;
  102. b[6]:=y+2;
  103. c[6]:='6.bmp';
  104.  
  105. a[7]:=x-1;
  106. b[7]:=y-1;
  107. c[7]:='7.bmp';
  108.  
  109. a[8]:=x-2;
  110. b[8]:=y-1;
  111. c[8]:='8.bmp';
  112.  
  113. a[9]:=x-1;
  114. b[9]:=y-0;
  115. c[9]:='9.bmp';
  116.  
  117. a[10]:=x-2;
  118. b[10]:=y+1;
  119. c[10]:='10.bmp';
  120.  
  121. a[11]:=x-1;
  122. b[11]:=y+1;
  123. c[11]:='11.bmp';
  124.  
  125. a[12]:=x-1;
  126. b[12]:=y+2;
  127. c[12]:='12.bmp';
  128.  
  129. a[13]:=x+0;
  130. b[13]:=y+2;
  131. c[13]:='13.bmp';
  132.  
  133. a[14]:=x+1;
  134. b[14]:=y+2;
  135. c[14]:='14.bmp';
  136.  
  137. a[15]:=x+1;
  138. b[15]:=y+1;
  139. c[15]:='15.bmp';
  140.  
  141. a[16]:=x+2;
  142. b[16]:=y+1;
  143. c[16]:='16.bmp';
  144.  
  145.  
  146. timer1.Enabled:=true;
  147. timer1.Interval:=10;
  148. form1.Image1.Canvas.Draw(x,y,buf);
  149. n:=1;
  150. n:=n+1;
  151.  
  152. if n=16 then
  153. begin
  154. n:=1;
  155. end;
  156.  
  157. end;
  158.  
  159.  
  160. end;
  161.  
  162. procedure TForm1.Timer1Timer(Sender: TObject);
  163. begin
  164.  
  165. form1.Canvas.Draw(x,y,buf);
  166. x:=a[n];
  167. y:=b[n];
  168. if x>form1.Width then x:=-w;
  169. backrct:=bounds(a[n], b[n], w, h);
  170. buf.Canvas.CopyRect(BufRct, back.Canvas, backrct);
  171. form1.Image1.Canvas.Draw(x,y,bitmap);
  172.  
  173. end;
  174.  
  175.  
  176.  
  177. end.


Ровный Ю А Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Ровный Ю А (статус: Посетитель)
Вопрос отправлен: 13 февраля 2009, 12:45
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 13 февраля 2009, 15:08; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 13 февраля 2009, 13:47 [#1]:

Долго читал, но так и не понял, что же не так работает. Да, кода много, но непонятно немного, что он делает в результате.
Вопрос, что хотелось, как бы есть, но он как то задан всколзь.
timer1.Interval:=10; - безсмысленная конструкция. Всё равно значения меньше 52 не работают так как ожидается. Ну не будет ось дергать так быстро таймер.

И сложилось впечетление, что о циклах и о том, что такое локальные/глобальные переменные ни гу-гу.
Галочка "подтверждения прочтения" - вселенское зло.
Ровный Ю А

Ровный Ю А (статус: Посетитель), 13 февраля 2009, 14:31 [#2]:

Просто когда я задаю каждую функцию на отдельную кнопку включаю таймер1 и указываю конкретную функцию x= y= и название изображения все работает как мне надо. Потом при нажатии другой кнопки приходиться выключать timer1 и включать таймер2 и менять паметры. Но это же обсурд управление 1 элементом 16ю кнопками. Циклами не получилось, решил массивами но опять же он не подставляет /x:=x+1/ а решает её и добавляет 1 вместо функции , а для движения необходимо написать x:=x+1. И поэтому движения нет вместо него перемещение по осям по точкам при нажатии клавиши. причем изображение не меняется а выдает ошибку что что-то с типами данных.
Вобщем эта программа отображает летящий самолет при нажатии кнопки вверх меняется угол направления полета например с горизонтального на диагональ и меняется изображение.
Я начинающий так что прошу помощи.
Вадим К

Вадим К (статус: Академик), 13 февраля 2009, 14:50 [#3]:

а чем отличается движения от перемещения?
То что вы начинающий, не избавляет от необходимости ясно излагать мысли.
Галочка "подтверждения прочтения" - вселенское зло.
Ровный Ю А

Ровный Ю А (статус: Посетитель), 13 февраля 2009, 15:08 [#4]:

Нет движения вперед по функции объект стоит на месте, а при нажатии клавиши он перемещается на другую позицию и остаётся стоять на месте

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.