Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.01.2010, 12:55
sid sid вне форума
Прохожий
 
Регистрация: 15.12.2006
Сообщения: 15
Репутация: 10
По умолчанию Помогите с массивом

Код на Pascal ABC, но разница не большая
Код:
var
 x,y: integer;
 dx: integer;
Procedure KeyDown(Key: integer);
begin
 if Key= VK_ESCAPE then halt;
end;
BEGIN
 x:= 200;
 y:= 220;
 dx:= 20;
repeat
 SetBrushColor(clBlue);
 FillRectangle(x,y,x+20,y+20);
 Sleep(100);
 SetBrushColor(clWhite);
 FillRectangle(x,y,x+20,y+20);
 if (x=0) or (x=300) then dx:= -dx;
 x += dx;
until OnKeyDown = KeyDown;
end.
Admin: Пользуемся тегами!

Подскажите, как сделать эффект змейки. Т.е. все тоже самое, только квадратиков несколько. По алгоритму: первый передвинулся, второй встает на его место и т.д.

Последний раз редактировалось sid, 05.01.2010 в 17:16.
Ответить с цитированием
  #2  
Старый 05.01.2010, 17:52
Zalm Zalm вне форума
Прохожий
 
Регистрация: 05.01.2010
Сообщения: 13
Репутация: 10
По умолчанию

Создать динамический массив благодаря которому вы будете отрисовывать картинку. Меняете координаты в массиве - рисуете картинку - стираете всё с экрана - меняете координаты - рисуете картинку. Выйдет то что вы хотите. Я так когда-то делал когда делал змейку, имхо самый простой способ
Ответить с цитированием
  #3  
Старый 05.01.2010, 18:01
sid sid вне форума
Прохожий
 
Регистрация: 15.12.2006
Сообщения: 15
Репутация: 10
По умолчанию

Направте меня на путь истинный. Мне нужно только чтобы по горизонт. двиг.

Код:
type TRecord = record
 x:integer;
 y:integer;
end;

var
 a: array[1..5] of TRecord;
 i: integer;
begin
 For i:= 1 to 5 do
 begin
  DrawRectangle(a[i].x+i*20, a[i].y, a[i].x+20, a[i].y+20);
 end;
end.
Ответить с цитированием
  #4  
Старый 05.01.2010, 18:50
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Порядок вроде такой должен быть.
Стираем старый квадратик. Получаем новые координаты, рисуем квадратик. Повторяем операцию со всеми квадратиками в массиве.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 06.01.2010, 20:22
sid sid вне форума
Прохожий
 
Регистрация: 15.12.2006
Сообщения: 15
Репутация: 10
По умолчанию

Заработало!!! Остались вопросы по поводу рисования клеток путем перебора (For..do). Никак не получается правильно рисовать.
Вот нарисовал я сетку:

Код:
for i:byte:= 1 to 20 do
  for k:byte:= 1 to 20 do
   Rectangle(i*20,k*20,20,20);
А как в данном случае добавить зазор между ячейками?
Спасибо.
Ответить с цитированием
  #6  
Старый 06.01.2010, 20:35
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А так если?
Код:
for i:byte:= 1 to 20 do
  for k:byte:= 1 to 20 do
   Rectangle(i*20,k*20,19,19);
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 06.01.2010, 20:46
sid sid вне форума
Прохожий
 
Регистрация: 15.12.2006
Сообщения: 15
Репутация: 10
По умолчанию

Так тоже не получается
Ответить с цитированием
  #8  
Старый 06.01.2010, 20:48
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А у Rectangle какие параметры?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 06.01.2010, 20:54
sid sid вне форума
Прохожий
 
Регистрация: 15.12.2006
Сообщения: 15
Репутация: 10
По умолчанию

стандартные x1,y1,x2,y2. Почему в Pascal нет оператора STEP? По моему до меня дошло Надо для x2 тоже перемен. созд. типа размер
Ответить с цитированием
  #10  
Старый 06.01.2010, 21:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Если x2 тогда конечно не будет работать, я предположил что там размер.
Так попробуй.
Код:
for i:byte:= 1 to 20 do
  for k:byte:= 1 to 20 do
   Rectangle(i*20,k*20,i*20+19,k*20+19)
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 06.01.2010, 21:24
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

а Step нет, потому-что не нужен. Есть while и Repeat которые спокойно позволяют решить проблему счетчиков с любым шагом.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #12  
Старый 06.01.2010, 23:19
sid sid вне форума
Прохожий
 
Регистрация: 15.12.2006
Сообщения: 15
Репутация: 10
По умолчанию

А у меня вот так получилось: Rectangle(i*20+1,k*20+1,i*20+20,k*20+20);
Тоже самое, только менее красиво.
Спасибо!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter