|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите с массивом
Код на 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. Подскажите, как сделать эффект змейки. Т.е. все тоже самое, только квадратиков несколько. По алгоритму: первый передвинулся, второй встает на его место и т.д. Последний раз редактировалось sid, 05.01.2010 в 17:16. |
#2
|
|||
|
|||
Создать динамический массив благодаря которому вы будете отрисовывать картинку. Меняете координаты в массиве - рисуете картинку - стираете всё с экрана - меняете координаты - рисуете картинку. Выйдет то что вы хотите. Я так когда-то делал когда делал змейку, имхо самый простой способ
|
#3
|
|||
|
|||
Направте меня на путь истинный. Мне нужно только чтобы по горизонт. двиг.
Код:
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
|
||||
|
||||
Порядок вроде такой должен быть.
Стираем старый квадратик. Получаем новые координаты, рисуем квадратик. Повторяем операцию со всеми квадратиками в массиве. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Заработало!!! Остались вопросы по поводу рисования клеток путем перебора (For..do). Никак не получается правильно рисовать.
Вот нарисовал я сетку: Код:
for i:byte:= 1 to 20 do for k:byte:= 1 to 20 do Rectangle(i*20,k*20,20,20); Спасибо. |
#6
|
||||
|
||||
А так если?
Код:
for i:byte:= 1 to 20 do for k:byte:= 1 to 20 do Rectangle(i*20,k*20,19,19); Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#7
|
|||
|
|||
Так тоже не получается
|
#8
|
||||
|
||||
А у Rectangle какие параметры?
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
стандартные x1,y1,x2,y2. Почему в Pascal нет оператора STEP? По моему до меня дошло Надо для x2 тоже перемен. созд. типа размер
|
#10
|
||||
|
||||
Если 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
|
||||
|
||||
а Step нет, потому-что не нужен. Есть while и Repeat которые спокойно позволяют решить проблему счетчиков с любым шагом.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#12
|
|||
|
|||
А у меня вот так получилось: Rectangle(i*20+1,k*20+1,i*20+20,k*20+20);
Тоже самое, только менее красиво. Спасибо! |