|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Игра на Pascal |
|
Delphi - [решено] Игра на Pascal
|
Новый участник Сообщения: 26 |
Профиль | Сайт | Отправить PM | Цитировать Собственно, делаю мою первую небольшую игрушку (Top-Down shooter) на PascalABC.net
Почти все сделал, кроме столкновения выстрела с противником и столкновения противника с игроком. путем проб и ошибок выяснил, что код не реагирует на пересечение спрайтов, хотя должен. Помогите, товарищи, пожалуйста, я уже второй день думаю uses graphabc, abcobjects; var obj:objectabc; health:integer; wall:objectabc; blast:objectabc; score:integer; enemy: array [1..10] of objectabc; procedure Move(x,y,mb: integer); begin obj.Moveto(x,y); end; procedure enemystart; begin enemy[1]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[2]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[3]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[4]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[5]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[5]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[6]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[7]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[8]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[9]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[10]:=pictureabc.create (random(10,500),-50, 'enemy.png'); end; procedure enemymove; begin foreach x: objectabc in enemy do repeat x.Moveto (x.Left,x.Top+1); sleep (1); until x.Intersect (wall)=false end; procedure fire (x,y,mb:integer); begin if mb=1 then blast:= pictureabc.Create (obj.Left+25,obj.Top,'blast.png'); repeat blast.MoveOn (0,-1); until blast.Intersect (wall)=false end; procedure kill; //Не работает выстрел begin foreach x:objectabc in enemy do begin if x.Intersect (blast)=true then x.Destroy; score:=score+1; end; end; procedure boom; //Не работает столкновение begin foreach x:objectabc in enemy do begin if x.Intersect (obj)=true then health:=health-10; x.Destroy; end; end; begin health:=100; setwindowsize (539,479); SetWindowIsFixedSize (true); setwindowcaption ('Game'); wall:=pictureabc.Create(0,0,'wall.jpg'); obj:=pictureabc.Create(250,440,'ship.png'); Onmousemove:= Move; Onmousedown:=fire; repeat enemystart; enemymove; kill; boom; until health=0; write ('Вы умерли, ваши очки: ', score); end. |
|
Отправлено: 18:57, 03-05-2013 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать nemo_the_capitain@vk, не ясна реализация функции x.Intersect ().
Можно получить полный архив игры? |
------- Отправлено: 19:21, 03-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 26
|
Профиль | Сайт | Отправить PM | Цитировать x.intersect () проверяет пересечение изображений
архив пожалуйста: |
Отправлено: 19:31, 03-05-2013 | #3 |
Необычный Сообщения: 4463
|
Профиль | Сайт | Отправить PM | Цитировать Чудная какая то среда.
nemo_the_capitain@vk, у вас несколько нарушена логика работы приложения. Сначала происходит запуск всех 10 самолетов противника (enemystart). Они все доходят до конца экрана, а только затем запускаются процедуры обработки столкновения и попадания выстрелом. Т.е. процедуры kill и boom надо совместить с процедурой полета самолета противника (enemymove) и с процедурой выстрела (fire) соответственно. По началу сбивает с толку, что самолет движется (Onmousemove:= Move и даже стреляет (Onmousedown:=fire. Т.е. строго говоря создаются отдельные потоки и они выполняются вполне себе параллельно. Да, с одной стороны это удобно, с другой не очень - теория прихрамывает. Полусырой вариант таков: uses graphabc, abcobjects; var obj:objectabc; health:integer; wall:objectabc; blast:objectabc; score:integer; enemy: array [1..10] of objectabc; procedure Move(x,y,mb: integer); begin obj.Moveto(x,y); end; procedure enemystart; begin enemy[1]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[2]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[3]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[4]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[5]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[5]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[6]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[7]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[8]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[9]:=pictureabc.create (random(10,500),-50, 'enemy.png'); enemy[10]:=pictureabc.create (random(10,500),-50, 'enemy.png'); end; procedure shoot; //Не работает выстрел begin foreach x:objectabc in enemy do begin if x.Intersect(blast) then x.Destroy; score:=score+1; end; end; procedure boom; //Не работает столкновение begin foreach x:objectabc in enemy do begin if x.Intersect (obj) then health:=health-10; x.Destroy; end; end; procedure enemymove; var flag:boolean; begin foreach x: objectabc in enemy do repeat flag:=false; x.Moveto (x.Left,x.Top+1); if x.Intersect (obj) then begin health:=health-10; x.Destroy; flag:=true; end; until not(flag) or not(x.Intersect (wall)); end; procedure fire (x,y,mb:integer); begin if mb=1 then blast:= pictureabc.Create (obj.Left+25,obj.Top,'blast.png'); repeat blast.MoveOn (0,-1); shoot; until blast.Intersect (wall)=false end; begin health:=100; setwindowsize (539,479); SetWindowIsFixedSize (true); setwindowcaption ('Game'); wall:=pictureabc.Create(0,0,'wall.jpg'); obj:=pictureabc.Create(250,440,'ship.png'); Onmousemove:= Move; Onmousedown:=fire; enemystart; repeat enemymove; //kill; //boom; until health=0; write ('Вы умерли, ваши очки: ', score); end. |
------- Отправлено: 20:35, 03-05-2013 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - Игра на QBasic | GordonG | Программирование и базы данных | 15 | 14-06-2015 12:10 | |
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) | Loading | Программирование и базы данных | 41 | 20-05-2015 15:28 | |
C/C++ - Перевод с Pascal на C++ | Ru1nN | Программирование и базы данных | 0 | 21-12-2011 22:45 | |
программирование на pascal | TauRus | Программирование и базы данных | 11 | 10-12-2006 12:17 | |
Скремблер на Pascal | fossil | Программирование и базы данных | 3 | 28-12-2005 07:28 |
|