Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Прочие вопросы

Прочие вопросы Вопросы не касающиеся программирования (установка, настройка...)

Ответ
 
Опции темы
Старый 10.01.2012, 21:08   #1
BODYBUILDER
AnyKey`щик
 
Регистрация: 10.01.2012
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Procedure and Function

Привет народ! Недавно начал изучать мидлетпаскаль,всё понимаю,но только никак не пойму как обращаться с процедурами и функциями.Ну немного понимаю процедуры(например для вызова её),но больше всего не понимаю(больше путают) параметры(константы,переменные).В паскале немного подругому,а в справке по мп.о проц.и функ.слишком коротко описано. В чем
всетаки разница между
процедурами и функциями,
знаю что функция возвращает
значение, процедура нет. До меня не
доходят именно главы про
процедуры и функции, про
формальные и фактические
параметры и т.д.
Подскажите если не трудно я
ведь только учусь и хочу
разобраться.
P.S. может покажите
простенький пример одной и
той же задачи сначала с
использованием процедуры, а
потом с использованием
функции, чтобы посмотреть
различия.
Заранее огромное Спасибо!
(Offline)
 
Ответить с цитированием
Старый 11.01.2012, 13:47   #2
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: 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;
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 28.01.2012, 16:26   #3
BODYBUILDER
AnyKey`щик
 
Регистрация: 10.01.2012
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Procedure and Function

ГгГ! Забыл войти сюда. Буду розбираться с функ.и проц.
(Offline)
 
Ответить с цитированием
Старый 28.01.2012, 16:51   #4
BODYBUILDER
AnyKey`щик
 
Регистрация: 10.01.2012
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: 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) то пускай прога закроеться.
Пожалуйста додайте кода!
(Offline)
 
Ответить с цитированием
Старый 29.01.2012, 21:29   #5
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: 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;
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 01.02.2012, 14:02   #6
BODYBUILDER
AnyKey`щик
 
Регистрация: 10.01.2012
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Procedure and Function

Igor, спасибо конечно! Но не мог бы ты сформулировать весь код, а то пробовал и неуспешно. 2 ошибки выскакивают.

P.S. Буду благодарен.
(Offline)
 
Ответить с цитированием
Старый 01.02.2012, 15:31   #7
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: 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.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 01.02.2012, 16:51   #8
BODYBUILDER
AnyKey`щик
 
Регистрация: 10.01.2012
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ггг,тип забыл вписать в парам.функции(так,как не очень шарю в проц.и функ). Благодарю Igor!

Есть ещё интересные вопросы: Как создать гравитацию?(например: я двигаюсь по земле,а если яма то упал в поза зону екрана). Как сделать так если я двигаюсь в поза зону екрана то пускай и дальше продолжается путь,а то обьект скрывается(например:камера следит за обьектом). И вопрос до ранеей просьбы: А если обьект2 подвижный(например:обьект двигается по своим заданным координатам) то как создать(отследить) столкновение? Опишите пожалуйста кратко! Просто требуется знать для создание какого либо платформера.

Последний раз редактировалось SBJoker, 01.02.2012 в 18:24.
(Offline)
 
Ответить с цитированием
Старый 02.02.2012, 13:06   #9
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: 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. напиши тетрис.
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 02.02.2012, 14:53   #10
BODYBUILDER
AnyKey`щик
 
Регистрация: 10.01.2012
Сообщений: 6
Написано 0 полезных сообщений
(для 0 пользователей)
Ответ: Procedure and Function

Igor, спасибо! Всё понял.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +1, время: 23:10.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com