Type, Function и т.д.
Извиняюсь если не там постю. Может вопрос и глупый, но всё же задам.
Я плохо разбираюсь в Function и Type может есть туторы достаточно понятно объясняющие все аспекты работы с ними (создание, обновление, преобразование, удаление и т.д.). Может кто объяснит в этой теме. Прошу не ругать если что не так. |
Re: Type, Function и т.д.
Я не учитель :) Попробую как-то объяснить.
Типы. Эх. Как бы так объяснить то? Ну короче есть у тебя перс, например! И есть у него данные: количество жизней, маны и пусть будет ешо его скорость. Ты конечно можешь объявить переменные для этих данных (и на крайний случай так даже можно поступить, но только в том случае если объект к которому относятся данные один единственный). Дальше нужно объявить тип Type Field End type Type - объявляет тип. Field - данные этого типа End type - всё понятно Ну на примере нашего перса Type p Field life Field mana Field speed End type (можно и так - Filed life, mana, speed) Ишо нужно присвоить этот тип конкретному объекту. Например, так Global player.p Теперь вводим конкретные данные: player.p = new p player\life = 100 player\mana = 100 player\speed = 20 воть. теперь ты можешь всегда обращаться к этим данным и изменять их типа так if plyaer_hit = true then player\life = player\life - 10 Ладно! Типы очень полезны, когда у тебя не один объект, а много! например толпа медвэдов! Ты же не будешь всем им отдельно прописывать все их данные? Прально! Нет! Тут нам поможет тип! Type m Field life, id end type global medved.m На нужно создать 10 медвэдов! For i = 1 to 10 medved.m = new m medved.life = 100 medved.id = i next Воть теперь у нас 10 медвэдов! С номером от 1 до 10! Нужно нам, например, убить третьего медвэда! ОК! If medved.id = 3 then medved.life = 0 Думаю,ты понял. :) |
Re: Type, Function и т.д.
Таксь! Теперь по функциям!
Нуууу! Без функций никуда! Да! Функции используются при частом выполнении одного и того же действия. Возьмем пример из предыдущего поста. Нам нужно проверить попала ли пуля в перса... Для этого напишем функцию проверки попадания в перса! Значит так функция объявляется оператором Function End function Внутри функции можно писать что угодно! Функция может принимать булевый тип. То, что нам и нужно! Таксь напишем функцию: Function player_hit If pulya.x = player.x and pulya.y = player.y then Return True else Return False end if end function Как ты, наверное, уже догадался изменять значение функции (Истина/ложь) нужно оператором Return. Что бы наша функция работала, нужно обратится к ней. Это можно конечно делать при определенных условия (например, при нажатии клавиши) или постоянно (просто обращаемся к ней в главном цикле). Как к ней обратится? Элементарно! Нужно просто написать её название! player_hit() Будем считать, что это было написнао в главном цикле программы. Ну и в предыдущем посте уже была проверка значения функции. if player_hit = true then player\life = player\life - 10 Всё. Для самого начала достаточно! Теперь сорь за написанное. Хз. Мож есть и ошибки. Я ночь не спал..... |
Re: Type, Function и т.д.
Ага, ну ещё для начала можно добавить, что при объявлении функции и при обращении к ней можно задавать входные данные. Ну, например всё тот же перс. Создадим функцию для его создания :) Перс должен появится в координатах х и у. Пишем функцию
Function player_create(x,y) player.p = new p player\x = x player\y = y end function И теперь, когда мы обращаемся к функции, мы можем задать положение перса. Например player_create(100,200) Перс будет созданный в координатах 100, 200 Ладно. Теперь точно для начала всё :) |
Re: Type, Function и т.д.
Большое спасибо Raiter. Может кто-то ещё хочет что-то добавить?
|
Re: Type, Function и т.д.
Хех :) Сейчас врядли кто-то добавит что-то :) Вот через часика 3 может и буде что.
Ты если что не ясно или новые вопросы - не стесняйся. Спрашивал. Сообщество у нас, в общем-то, больше для новичков! Это даже в правилах записано! |
Re: Type, Function и т.д.
Ну я всё не читал, но считаю что разные объяснения, людей, с разными мышлениями, не помешают.
Что о типах. Массивы, нужны что-бы работать с определённым колличеством объектов, неважно сколько. Каждый массив, имеет свои значения. Например, у нас работа со спрайтами. Ну нам нежно просто что-бы было много спрайтов, и они появлялись где-либо, и просто летели вверх. Вводим массив: [blitz]Type Spark Field Sprite Field Life% End Type[/blitz] У нас 2 значения: 1 - Сам спрайт 2 - Жизнь, тоесть как долго этот спрайт будет жить. Если жизнь кончится мы его удалим. Заметь у нас он объявлен как Int (%), тоесть это целое число. Далее, нам нужно что-бы создавался спрайт. Но удобнеее сделать в функции. Что такое функция: Это те-же комманды которые ты используешь, просто они стандартные, а ты можешь создавать свои, которые будут делать действие с настройками (Например CreateSphere()), или возвращать значение (Например: EntityX#()). Все Варриаблы, которые ты создаёшь или используешь в функции, и которые не объявлены глобалями, то они локальны, тоесть за пределами функции они не существуют. И так, сделаем функцию, которая будет создавать определённое колличество спрайтов, и с определённым колличеством жизней: [blitz]Function CreateSparks(Count%,Life%) For c=0 to Count ;Sdelatj eto dejstvije mnogo raz, a imenno ot 0 do Count. s.Spark=New Spark ;Sozdajom, zametj kogda mi sozdajom v massiv, to "s" s tochkoj, a pochemy "s", tak eto nevazhno, mozhesh ljyboje sdelatj, glavnoje chtobi ne sovpadalo s drygim massivom ili varrabloj. s\Sprite=CreateSprite() ;Pri sozdaniji, ti ykazivajesh znachenija, tyt mi prosto pricepili k Sprite, nivoj sprajt. s\Life=Life ;Tyt mi ispolzyjem ykazannoje v funkciji znachenije, kak i ispolzovali jego v pervoj stroke etoj funkcii. Next End Function[/blitz] Всё, Функция готова. Теперь, сделаем функцию, котрая будет обновлять массив, эта функция очень простая, она не имеет никаких значений, просто нам удобнее вызывать её, чем писать в цикле много текста. [blitz]Function UpdateSparks() For s.Spark=Each Spark ;Pri obrasheniji mi opatj stavim "s", tyt mi govorim, delatj soderzhimoje v etom "For", dlja Vseh komponentov etogo Massiva. s\Life=s\Life-1 ;Tyt mi prosto otnimajem ot zhizni 1 MoveEntity s\Sprite,0,.1,0 ;Tyt mi dvigajem sprajt If s\Life<0 ;Jesli zhizni menshe 0 FreeEntity s\Sprite ;Ydalajem sprajt, nezabivaj ydalatj Vse Entity komponenta, jesli ti soberajeshsja ydalitj komponent iz massiva. Delete s EndIf Next End Function[/blitz] Эту функцию, вызывай каждый цикл. Всё, надеюсь, очень понятно объяснил. |
Re: Type, Function и т.д.
Чёта я так и не понял ничего. Вот у меня есть две враждующие рассы. У каждой рассы по 5 видов звездалётов. У каждого звездалёта есть набор свойств, таких как их рисунок, жизни, ... . Вот я сейчас и мучеюсь. Есть один вражеский корабль, его надо размножить, и в случайном порядке разпихать по экрану. А как я не представляю. Уже неделю сиу, запутался...
|
Re: Type, Function и т.д.
Atomikc
Это тут при чем? |
Re: Type, Function и т.д.
Цитата:
For c = 0 to кол-во вражин CreateEnemy(Rnd(a,b),RNd(a,b) Next |
Re: Type, Function и т.д.
метод реализации?
список? ou=тот объект который нада размножить u.unit=new unit u\en=ou\en u\pow=ou\pow и т.д. потом меняеш позицию, напримр u\x=rand(-2000,2000) u\y=rand(-2000,2000) и все это дело запихать в цикл массив? nu=index of unit for i=1 to 10 for param=0 to 100 total_units(myteam)++ u(myteam,total_units(myteam),param)=u(myteam,nu,pa ram) next next |
Re: Type, Function и т.д.
Вот код, то что у меня получилось, немного не так как у вас, но по принцепу верхних статей. Хотя не то что я хотел. Там всего 1 карабль вместо 10-ти хотел
Код:
Graphics 800,600,32,2 |
Re: Type, Function и т.д.
Я сделпл чуть по другому, и всё равно не помогает. Кто нибудь напишите работающий код. Вот на основе этого:
Код:
Graphics 800,600,32,2 |
Re: Type, Function и т.д.
вот бы архив со всей медиа, а то влом рисунки собирать.
|
Re: Type, Function и т.д.
Atomikc
я код быстро просмотрел ... у тебя надо вызывать функцию aviacia() перед началом цикла repeat ... until |
Часовой пояс GMT +4, время: 14:12. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot