![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
kr3v3tkus |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
вот задачка:
12. На середине экрана по вертикали медленно движется минимальный прямоугольник. Стрелками мы можем перемещать по вертикали другой минимальный прямоугольник по левому краю экрана. Клавишей ENTER можем "толкнуть" левый прямоугольник в правую сторону. Если левый попадет в правый, они вместе летят дальше до правого края. подскажите как сделать, чтобы можно было управлять левым, и в это же время двигался правый. Я честно говоря в тупике ![]() ![]() Код program lol; uses crt; label m1,m2,endm; var a,b,z,x:integer; ch:char; begin clrscr; a:=1; b:=25; z:=40; x:=25; gotoxy(a,b); while true do {' dvijka pravogo '} begin repeat gotoxy(z,x); textcolor(black); write('Ы'); dec(x); gotoxy(z,x); textcolor(white); write('Ы'); gotoxy(z,x); delay(25000); until x=1; repeat gotoxy(z,x); textcolor(black); write('Ы'); inc(x); gotoxy(z,x); textcolor(white); write('Ы'); gotoxy(z,x); delay(25000); until x=25; end; repeat {' leviy kvadrat '} gotoxy(a,b); m2: ch:=readkey; if ch=#72 then if b<>1 then begin gotoxy(a,b); textcolor(black); write('Ы'); dec(b); gotoxy(a,b); textcolor(white); write('Ы'); gotoxy(a,b); end; if ch=#80 then if b<>25 then begin gotoxy(a,b); textcolor(black); write('Ы'); inc(b); gotoxy(a,b); textcolor(white); write('Ы'); gotoxy(a,b); end; if ch=#27 then goto endm; until ch=#13; while a<>80 do {' dvijka levogo '} begin gotoxy(a,b); textcolor(black); write('Ы'); inc(a); gotoxy(a,b); textcolor(white); write('Ы'); delay(500); gotoxy(a,b); end; if (a=z)and(b=x) then goto m1 else goto m2; m1: begin clrscr; writeln('popal!!!'); goto endm; end; endm: end. зы столкновение я ещё не писал, проверить просто низя будет без синхронности -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
![]() ![]() |
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Общий принцип примерно такой.
1. Оформляешь элементарный шаг движения каждого объекта отдельной процедурой. Входными параметрами для них делаешь параметры движения (величина шага в каждом направлении). Временной промежуток между шагами будет зависеть от желаемой скорости движения объекта. 2. Делаешь основной управляющий цикл. В нем проверяешь: - KeyPressed. Если нажато - читать клаву и обрабатывать, изменять параметры движения, если нужно (величина шагов по координатам, а также шаг по времени для каждого объекта). - Таймер, то есть точное текущее время. Если пришло время двигать объект номер 1 (2, 3...) - вызываешь соответствующую процедуру. То есть тебе нужно иметь массив времен, когда нужно двигать i-ый объект в следующий раз. Сравниваешь все его элементы с текущим временем, двигаешь те объекты, которые созрели, и обновляешь время следующего шага (прибавляешь шаг по времени). Так можно и двигать все объекты (каждый со своей скоростью), и управлять ими с клавиатуры. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
kr3v3tkus |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
пасибки, ща пошаманю
![]() -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
kr3v3tkus |
![]()
Сообщение
#4
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: ![]() ![]() ![]() |
сделал почти всё, только столкновение не работает, ну и медленно всётаки очень, может както переработать чтоб быстрее было?
Код program lol; uses crt; label m1,m2,endm; var a,b,z,x,s:integer; ch:char; f:boolean; procedure l_up(var a,b:integer); begin if b<>1 then begin gotoxy(a,b); textcolor(black); write('Ы'); dec(b); gotoxy(a,b); textcolor(white); write('Ы'); gotoxy(a,b); end; end; procedure l_down(var a,b:integer); begin if b<>25 then begin gotoxy(a,b); textcolor(black); write('Ы'); inc(b); gotoxy(a,b); textcolor(white); write('Ы'); gotoxy(a,b); end; end; procedure l_run(var a,b:integer); begin gotoxy(a,b); textcolor(black); write('Ы'); inc(a); gotoxy(a,b); textcolor(white); write('Ы'); gotoxy(a,b); delay(500); end; procedure r_up(var z,x:integer); begin gotoxy(z,x); textcolor(black); write('Ы'); dec(x); gotoxy(z,x); textcolor(white); write('Ы'); gotoxy(z,x); delay(50000); end; procedure r_down(var z,x:integer); begin gotoxy(z,x); textcolor(black); write('Ы'); inc(x); gotoxy(z,x); textcolor(white); write('Ы'); gotoxy(z,x); delay(50000); end; procedure r_run(var z,x:integer); begin gotoxy(z,x); textcolor(black); write('Ы'); inc(z); gotoxy(z,x); textcolor(red); write('Ы'); gotoxy(z,x); end; begin m2: clrscr; s:=1; a:=1; b:=25; z:=40; x:=25; f:=true; gotoxy(a,b); repeat inc(s); if s=26 then f:=false; if s=50 then begin s:=2; f:=true; end; if f=true then r_up(z,x) else r_down(z,x); if keypressed then begin ch:=readkey; if ch=#72 then l_up(a,b) else if ch=#80 then l_down(a,b); if ch=#13 then begin while a<>40 do l_run(a,b); if (a=z)and(b=x) then goto m2; repeat r_run(z,x); l_run(a,b); until z<>80; end; end; until ch=#27; end. Сообщение отредактировано: kr3v3tkus - 25.03.2006 0:22 -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 11:20 |