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

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

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 08.01.2007, 07:50   #1
Тарас Шевченко
Знающий
 
Регистрация: 17.08.2006
Сообщений: 246
Написано 0 полезных сообщений
(для 0 пользователей)
Type, Function и т.д.

Извиняюсь если не там постю. Может вопрос и глупый, но всё же задам.
Я плохо разбираюсь в Function и Type может есть туторы достаточно понятно объясняющие все аспекты работы с ними (создание, обновление, преобразование, удаление и т.д.). Может кто объяснит в этой теме.
Прошу не ругать если что не так.
(Offline)
 
Ответить с цитированием
Старый 08.01.2007, 08:29   #2
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
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

Думаю,ты понял.
(Offline)
 
Ответить с цитированием
Старый 08.01.2007, 08:43   #3
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
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

Всё. Для самого начала достаточно!

Теперь сорь за написанное. Хз. Мож есть и ошибки. Я ночь не спал.....
(Offline)
 
Ответить с цитированием
Старый 08.01.2007, 08:50   #4
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
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

Ладно. Теперь точно для начала всё
(Offline)
 
Ответить с цитированием
Старый 08.01.2007, 09:04   #5
Тарас Шевченко
Знающий
 
Регистрация: 17.08.2006
Сообщений: 246
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Type, Function и т.д.

Большое спасибо Raiter. Может кто-то ещё хочет что-то добавить?
(Offline)
 
Ответить с цитированием
Старый 08.01.2007, 09:14   #6
Raiter
Гигант индустрии
 
Регистрация: 04.08.2006
Сообщений: 2,642
Написано 53 полезных сообщений
(для 92 пользователей)
Re: Type, Function и т.д.

Хех Сейчас врядли кто-то добавит что-то Вот через часика 3 может и буде что.

Ты если что не ясно или новые вопросы - не стесняйся. Спрашивал. Сообщество у нас, в общем-то, больше для новичков! Это даже в правилах записано!
(Offline)
 
Ответить с цитированием
Старый 09.01.2007, 00:38   #7
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Подмигивание 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]
Эту функцию, вызывай каждый цикл.
Всё, надеюсь, очень понятно объяснил.
(Offline)
 
Ответить с цитированием
Старый 27.01.2007, 15:30   #8
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Type, Function и т.д.

Чёта я так и не понял ничего. Вот у меня есть две враждующие рассы. У каждой рассы по 5 видов звездалётов. У каждого звездалёта есть набор свойств, таких как их рисунок, жизни, ... . Вот я сейчас и мучеюсь. Есть один вражеский корабль, его надо размножить, и в случайном порядке разпихать по экрану. А как я не представляю. Уже неделю сиу, запутался...
(Offline)
 
Ответить с цитированием
Старый 27.01.2007, 15:33   #9
alcoSHoLiK
Дэвелопер
 
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений
(для 110 пользователей)
Re: Type, Function и т.д.

Atomikc
Это тут при чем?
(Offline)
 
Ответить с цитированием
Старый 27.01.2007, 15:40   #10
c0mrad
Разработчик
 
Регистрация: 08.06.2006
Сообщений: 412
Написано 13 полезных сообщений
(для 4 пользователей)
Re: Type, Function и т.д.

Сообщение от Atomikc
Чёта я так и не понял ничего. Вот у меня есть две враждующие рассы. У каждой рассы по 5 видов звездалётов. У каждого звездалёта есть набор свойств, таких как их рисунок, жизни, ... . Вот я сейчас и мучеюсь. Есть один вражеский корабль, его надо размножить, и в случайном порядке разпихать по экрану. А как я не представляю. Уже неделю сиу, запутался...
Ээээ...Берешь функцию создания врага и вперед

For c = 0 to кол-во вражин
CreateEnemy(Rnd(a,b),RNd(a,b)
Next
(Offline)
 
Ответить с цитированием
Старый 28.01.2007, 01:49   #11
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
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
(Offline)
 
Ответить с цитированием
Старый 02.02.2007, 21:24   #12
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Type, Function и т.д.

Вот код, то что у меня получилось, немного не так как у вас, но по принцепу верхних статей. Хотя не то что я хотел. Там всего 1 карабль вместо 10-ти хотел
Graphics 800,600,32,2
;Генератор случайных чисел
SeedRnd(MilliSecs())
SetBuffer BackBuffer()

gal=LoadImage("galaxi.jpg"); Фон(галактика)
MaskImage  gal ,0,0,0 ; Маска
;звёзы
star=LoadImage("fon.png");Звезды, движутся
star2=LoadImage("fon2.png");Звезды, движутся

avv=LoadImage("3_1.bmp");Aviacia Vrag
avs=LoadImage("4_2.bmp");Aviacia Souznik
plamia=LoadAnimImage("Fire.bmp",39,16,0,4)

Type avi ; Tip Aviacia
	Field x,y
	Field life
	Field fire
	Field id
End Type
Global av_s.avi
Global av_v.avi




;Создание игрока-человека
av_s.avi = New avi
;Начальное значение очков
av_s\life=100
;позиция
av_s\x=360
av_s\y=500


Function creat_av_v() ;img,life,x,y,id
;Создание игрока-компа

av_v.avi = New avi
;Начальное значение очков
av_v\life=100
;Позиция

;av_v\fire=creat_av_v()
For i = 1 To 10 

av_v\id=i
av_v\x=Rnd(10,600)
av_v\y= Rnd(20,250)
Next
End Function

creat_av_v()
Repeat
Cls()

DrawImage (gal, 0, 0);Позиция галактики
     TileImage star,0,qq:qq=qq- -3
     TileImage star2,0,hh:hh=hh- -1

DrawImage (avv, av_v\x, av_v\y,av_v\id=i)
DrawImage (avs, av_s\x, av_s\y)

;##################
If KeyDown(2)
	av_v\id=1  
	av_v\x = av_v\x +5
EndIf 

If KeyDown(3)
	av_v\id=2 
      av_v\x = av_v\x -5
EndIf 
;######################
;Вправо
If KeyDown(205)
	av_s\x = av_s\x +5
EndIf 
;Влево
If KeyDown(203)
	av_s\x = av_s\x -5
EndIf 

;Верх
If KeyDown(200)
	av_s\y = av_s\y -5
EndIf 
;Вниз
If KeyDown(208) 
If av_s\y<=520
	av_s\y = av_s\y +5
EndIf 
EndIf
;######################

Flip() 
Until KeyDown(1)
(Offline)
 
Ответить с цитированием
Старый 12.02.2007, 13:30   #13
Atomikc
Бывалый
 
Регистрация: 14.12.2006
Сообщений: 811
Написано 93 полезных сообщений
(для 257 пользователей)
Re: Type, Function и т.д.

Я сделпл чуть по другому, и всё равно не помогает. Кто нибудь напишите работающий код. Вот на основе этого:
Graphics 800,600,32,2
SetBuffer BackBuffer()
avv=LoadImage("3_1.bmp")
avs=LoadImage("4_2.bmp")
Type avi
	Field x,y
	Field life
	Field img
End Type
Function aviacia()
;Создание игрока-человека
av_s.avi = New avi
av_s\life=100
av_s\x=360
av_s\y=500
av_s\img=avs
;Создание игрока-компа
SeedRnd MilliSecs()
For i= 0 To 9
av_v.avi = New avi
av_v\life=100
av_v\x=Rand(10,600)
av_v\y= Rand(20,250)
av_v\img=avv
Next
End Function

Repeat
Cls()

DrawImage (avv, av_v\x, av_v\y)
DrawImage (avs, av_s\x, av_s\y)


;######################
;Вправо
If KeyDown(205)
	av_s\x = av_s\x +5
EndIf 
;Влево
If KeyDown(203)
	av_s\x = av_s\x -5
EndIf 

;Верх
If KeyDown(200)
	av_s\y = av_s\y -5
EndIf 
;Вниз
If KeyDown(208) 
If av_s\y<=520
	av_s\y = av_s\y +5
EndIf 
EndIf
;######################

Flip() 
Until KeyDown(1)
(Offline)
 
Ответить с цитированием
Старый 12.02.2007, 15:47   #14
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Re: Type, Function и т.д.

вот бы архив со всей медиа, а то влом рисунки собирать.
(Offline)
 
Ответить с цитированием
Старый 12.02.2007, 17:09   #15
jimon
 
Сообщений: n/a
Re: Type, Function и т.д.

Atomikc
я код быстро просмотрел ... у тебя надо вызывать функцию aviacia() перед началом цикла repeat ... until
 
Ответить с цитированием
Ответ


Опции темы

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Type in Type Taugeshtu 2D-программирование 7 18.09.2009 08:36
Error: library/unit does not contain function... kalexi Основной форум 0 29.07.2009 22:14
Type and etc... ELIAS 2D-программирование 8 05.02.2009 19:34
SFL (Standard Function Library) pax C++ 2 09.11.2006 01:31
Dim vs Type HolyDel 3D-программирование 13 08.10.2006 14:30


Часовой пояс GMT +4, время: 02:44.


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