Procedure and Function
Привет народ! Недавно начал изучать мидлетпаскаль,всё понимаю,но только никак не пойму как обращаться с процедурами и функциями.Ну немного понимаю процедуры(например для вызова её),но больше всего не понимаю(больше путают) параметры(константы,переменные).В паскале немного подругому,а в справке по мп.о проц.и функ.слишком коротко описано. В чем
всетаки разница между процедурами и функциями, знаю что функция возвращает значение, процедура нет. До меня не доходят именно главы про процедуры и функции, про формальные и фактические параметры и т.д. Подскажите если не трудно я ведь только учусь и хочу разобраться. P.S. может покажите простенький пример одной и той же задачи сначала с использованием процедуры, а потом с использованием функции, чтобы посмотреть различия. Заранее огромное Спасибо! |
Ответ: Procedure and Function
Посмотри чей-нибудь код
Кратко- 1) в процедуру можно ничего не передавать. Пример - repaint; 2) Можно передать DrawText(s,x,y) несколько чисел (x,y), строк (s) или свой тип данных - запись. 3) функции - то же самое, но они имеют тип и их значение надо присваивать чему-нибудь H:=GetHeight; a:=sqr(b); В MP нельзя написать procedure X(a:integer;var b:integer); - можно передавать только значения procedure X(a,b:integer); Если хочется внутри процедуры изменить переменную - либо делать её глобальной или сделать тип данных - запись: type Point=record x,y:integer; end; ... procedure X(P:point); begin p.x:=p.y+p.x; P.y:=P.x-p.y; end; |
Ответ: Procedure and Function
ГгГ! Забыл войти сюда. Буду розбираться с функ.и проц.
|
Ответ: Procedure and Function
Ещё одна просьба: А как зделать так, если я столкнусь(дотронусь) до обьекта какого нибудь.Например у меня красный квадрат. Вот код:
Program tst: var x,y:integer; i,e,c:image; begin i:=loadImage('fon5.PNG'); e:=loadImage('object1.png'); c:=loadImage('object2.png'); repeat if getKeyPressed=KE_KEY4 then x:=x-1; if getKeyPressed=KE_KEY6 then x:=x+1; if getKeyPressed=KE_KEY8 then y:=y+1; if getKeyPressed=KE_KEY2 then y:=y-1; drawImage(i,0,0); drawImage(c,40,40); drawImage(e,x,y); repaint; until false; end. Хочу так, если двинуться на красный квадрат(обьект2) то пускай прога закроеться. Пожалуйста додайте кода! |
Ответ: Procedure and Function
Пиши функцию проверки на пересечение с прямоугольником.
function peresek(x,y):boolean; begin peresek:=((x>left_x) and (x<right_x) and (y>up_y) and(y<down_y)); end; глобальные переменные left_x:=40-GetImageWidth(e); right_x:=40+GetImageWidth(c); up_y:=40-GetImageHeight(e); down_y:=40+getImageHeight(c); ... if peresek(x,y) then halt; |
Ответ: Procedure and Function
Igor, спасибо конечно! Но не мог бы ты сформулировать весь код, а то пробовал и неуспешно. 2 ошибки выскакивают.
P.S. Буду благодарен. |
Ответ: Procedure and Function
Program tst:
var x,y:integer; i,e,c:image; left_x,right_x,up_y,down_y:integer; function peresek(xp,yp:integer):boolean; begin peresek:=((xp>left_x) and (xp<right_x) and (yp>up_y) and(yp<down_y)); end; begin i:=loadImage('fon5.PNG'); e:=loadImage('object1.png'); c:=loadImage('object2.png'); left_x:=40-GetImageWidth(e); right_x:=40+GetImageWidth(c); up_y:=40-GetImageHeight(e); down_y:=40+getImageHeight(c); repeat if getKeyPressed=KE_KEY4 then x:=x-1; if getKeyPressed=KE_KEY6 then x:=x+1; if getKeyPressed=KE_KEY8 then y:=y+1; if getKeyPressed=KE_KEY2 then y:=y-1; drawImage(i,0,0); drawImage(c,40,40); drawImage(e,x,y); repaint; until peresek(x,y); end. |
Ггг,тип забыл вписать в парам.функции(так,как не очень шарю в проц.и функ). Благодарю Igor!
Есть ещё интересные вопросы: Как создать гравитацию?(например: я двигаюсь по земле,а если яма то упал в поза зону екрана). Как сделать так если я двигаюсь в поза зону екрана то пускай и дальше продолжается путь,а то обьект скрывается(например:камера следит за обьектом). И вопрос до ранеей просьбы: А если обьект2 подвижный(например:обьект двигается по своим заданным координатам) то как создать(отследить) столкновение? Опишите пожалуйста кратко! Просто требуется знать для создание какого либо платформера. |
Ответ: Procedure and Function
Это каждый делает по-своему. Нужно немного разбираться в математике.
Обычно у персонажа есть координаты x,y и есть координаты скорости vx,vy. За игровой цикл двигаем по х (x:=x+vx)и по у (y:=y+vy), если хочешь прикрутить ускорение то каждый цикл vy:=vy+g; Обычно можно считать обьекты прямоугольниками- например (x,y,dx,dy), они пересекаются если имеют общие х и у. Делаешь проверку на пересечение по одной координате и потом по другой. P.S. Универсальных способов не существует, надо придумывать их самому. P.P.S. напиши тетрис. |
Ответ: Procedure and Function
Igor, спасибо! Всё понял.
|
Часовой пояс GMT +4, время: 18:49. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot