forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   типы и хранение данных (http://forum.boolean.name/showthread.php?t=608)

Akima 23.01.2006 13:26

Ну как всегда у меня полторы пары вопросов, сегодня по Типам
1
как в типе:
Type tNPC
;...
;...
Field name
Field Head#;здоровье головы
Field Legs#;здоровье ноги
Field Belly#;здоровье живот
Field Tors#;здоровье торса
;....
Field Magic1#;удар магии
Field Strength#;кулачный удар
Field Weapont#;удар с приминением оружия
;....
End Type

посчитать средние значение показателей здоровья и наини меньшее из них


2 Делаю тах и выкатывает ошибку "Object does not exist", ваще непонимаю в чом дело
Type TBody
Field Head#;здоровье головы
Field Legs#;здоровье ноги
Field Belly#;здоровье живот
Field Tors#;здоровье торса
End Type
Type TUdar;Сила удара
Field Magic1#;удар магии
Field Strength#;кулачный удар
Field Weapont#;удар с приминением оружия
End Type

Type tNPC
Field health.tbody
Field udar.tudar
Field name

End Type

Function NewNPC.Tnpc(nName,hHead#,hTors#,hBelly#,hLegs#,uMa gic1,uStr,uWeap)
;задаем параметры нового игрока
Local n.tNPC=New tNPC
n\health\Head=hHead
n\health\Belly=hbelly#
n\health\Legs=hlegs#
n\health\Tors=htors#
Return n
End Function


Graphics3D 640,480,16,2
SetBuffer BackBuffer()
SetFont LoadFont("arial cyr",16)
cam=CreateCamera()
PositionEntity cam,0,30,-20

Ground=CreatePlane()
texa=CreateTexture( 63,63,9)
ScaleTexture texa,10,10
SetBuffer TextureBuffer(texa)
Color 128,128,128
Rect 32,0,32,32
Rect 0,32,32,32
Color 255,255,255
Rect 32,32,32,32
Rect 0,0,32,32
SetBuffer BackBuffer()
EntityTexture Ground,texa
FreeTexture texa

OrigMonster=CreateCube()
EntityColor OrigMonster,255,0,0
HideEntity OrigMonster
;###############################

n1.tnpc=NewNPC( "0", 25,25,25,25,6, 18,3)
n2.tnpc=NewNPC( "1", 18,18,18,18,13, 12,6)
;###############################
While Not KeyDown(1)


UpdateWorld
RenderWorld

Flip
Wend
End
;

3. как лутше организовать хранение параметров каждого парсонажа в RPG (ролевой) игре [параметры следующие: жизнь и тп, там несколько магии, владение разным оружием ну как в любой RPG]

jimon 23.01.2006 14:16

ессно что хранить типами
а вот етот гемор (я про юзание функции типа function lalala.blablabla())
надо заманить на handle :)

impersonalis 23.01.2006 15:34

Не вижу ничего дурного в lalala.blablabla()
как и в хендлах - всему своё место.

AsmLover 24.01.2006 09:31

To AKIMA

Для типа TNPC полями являются другие типы. А ты их не создаешь и сразу присваивешь какие-то значения. Попытка обращения к несуществуещему объекту, естественно, дает ошибку.
Инициализующая функция должна быть такой:
Код:


Function NewNPC.Tnpc(nName,hHead,hTors#,hBelly#,hLegs#,uMagic1,uStr,uWeap)
 
 *n.tNPC = New tNPC
 * *n\health.TBody * = New TBody
 * *n\udar.TUdar * * = New TUdar

 * * *n\health\Head *= hHead
 * * *n\health\Belly = hbelly#
 * * *n\health\Legs *= hlegs#
 * * *n\health\Tors *= htors#
 *Return n

End Function

Теперь все будет работать. Но я бы реализовал это по другому, без связанных типов, через массив:

Код:

Const HEAD * *= 1
Const LEGS * *= 2
Const BELLY * = 3
Const TORSO * = 4

Type TNPC
 * *Field health# [4]
 * *Field name
End Type

n.TNPC = New TNPC

n \ health [ HEAD ] = 25


Akima 24.01.2006 12:15

А как найти меньшее и среднее значения

jimon 24.01.2006 14:33

перебрать все значения

AsmLover 24.01.2006 15:02

Покажи, как ты думаешь делать и что не получается, тогда помогу.

Akima 26.01.2006 11:04

Цитата:

Originally posted by AsmLover@Jan 24 2006, 06:02 PM
Покажи, как ты думаешь делать и что не получается, тогда помогу.

Делаю систему боя двух и более NPC, в начале боя каждая нпс определяет слабые части тела врага и определяет свой опыт удара по этим частям, и во время боя должна наносить удары по нескольким "удачным" для нее частям тела врага.
например :
враг видит что игрок ванен в ногу и например у игрока еще на голове нет шлема. вражеская нпс определяет что он будет бить по этим частям тела и ищет среди своих параметров опыта куда еще он может наносить удары.


Код:

;- Параметры тела
Global tAll=0;Общее
Global tHead=1
Global tHand=2
Global tBody=3
Global tLegs=4
;- Параметры
Global tStrength=1;Сила
Global tDexterity=2;Ловкость


Type tNPC
        Field tName$
       
        Field tHP#[4];Здоровье тела
        Field tArmor#[4];Броня на теле
        Field tExpWar#[4];Опыт нанесения ударов по телу
       
End Type


Function NewNPC.tNPC(name$,nHP1#,nHP2#,nHP3#,nHP4# ,nAP1#,nAP2#,nAP3#,nAP4#, nEW1#,nEW2#,nEW3#,nEW4# )
;задаем параметры нового игрока
    Local n.tNPC=New tNPC
    n\tname=name
    ;Заполняем шкалу здоровья
    n\tHP[tHead]=nhp1
    n\tHP[tHand]=nhp2
    n\tHP[tBody]=nhp3
    n\tHP[tLegs]=nhp4
    n\tHP[tAll]=(nhp1+nhp2+nhp3+nhp4)/4/1.2
    ;Заполняем шкалу Брони(одежды)
    n\tArmor[tHead]=nap1
    n\tArmor[tHand]=nap2
    n\tArmor[tBody]=nap3
    n\tArmor[tLegs]=nap4
    n\tArmor[tAll]=(nap1+nap2+nap3+nap4)/4/1.2
    ;Заполняем шкалу Опыта нанесения ударов
    n\tExpWar[tHead]=new1
    n\tExpWar[tHand]=new2
    n\tExpWar[Body]=new3
    n\tExpWar[tLegs]=new4
    n\tExpWar[tAll]=(new1+new2+new3+new4)/4/1.2
 
 Return n
End Function

Dim nt(2)

Dim p1(2,3)
Dim minn#(2,2);первое число индекс врага / второе: 1-текущее значение 2-Самое слабое


Graphics3D 640,480,32,2

SetFont LoadFont("arial cyr",16)

N1.tnpc=NewNPC("Player1",12,23,14,8, 4,0,2,6, 4,2,1,3)
N2.tnpc=NewNPC("ENEMY",8,12,23,4, 3,4,2,1, 3,4,1,2 )


Real_WAR

While Not KeyHit(1)
        Text 20,20, n1\tname
       
        Text 50,10,minn(1,2)
        Text 50,30,minn(2,2)
        Flip
Wend
End



        Function Real_WAR()
minn(1,2)=9999
minn(2,2)=9999
;Определяем самые слабые чати тела соперника
        For i=1 To 3
;Local i=1
;!!!!!!!!!!!!!!!!!!!!!!!!! Только Здесь ОШИБКА Какаято непойму, к массиву придерается
        minn(1,1)=n1\thp[i];+n1\tArmor[i]
        minn(2,1)=n2\thp[i];+n2\tArmor[i]       
       
        If minn(1,1)<minn(1,2) minn(1,2)=minn(1,1)
        If minn(2,1)<minn(2,2) minn(2,2)=minn(2,1)       
        Next
       
       
End Function


Круто да :glag: :blink:

----------------------------------------
и еще вопросики
1/аказывается в типах можно делать так field health[3] ето хорошо А можно какнибуть так field health[3,4], ну чтобы не только 3 переменные запихать а у каждой чтобы еще по несколько было (как в массиве)
2/у меня все элементы типа содержат Field nName$ (именя), и другие параметры, я узнаю именя например 1 и 30 элементов и потом в отдельной функции должно проиходить вычисления только между этими двумя (или более) элементами, это можно сделать какнибудь без поиска этих элементов каждый цикл
For NPC.tNpc = Each tNPC
if npc.nname=[Имя элемента]
next

:(

Akima 06.02.2006 14:56

Чаво ни кого нету то

kortesfil 06.02.2006 15:21

акима а ты что делаеш? поделись=)

Akima 07.02.2006 14:08

я пытаюсь делать RPG типа (EVIL ISLANDS, корсары, beyond oasis на сеге), но пока неочень то получается.
попозже думаю замутить приглашение желающих и умеющих в группу для создания етой игры. а в этой теме я спрашиваю про данные и делаю систему боя к игре

ЗЫ: или может сейчас замутить. ващи мнения. немного скетчей нарисовано и моделей смоделировано

kortesfil 07.02.2006 15:13

замути конечно сейчас! а насчёт корсаров ты прав!обожаю корсары!

Akima 08.02.2006 13:56

Внимание: объявлен проэкт игры "Заброшенные земли", желающие принять участие идите на http://community.boolean.name/index.php?showtopic=776 :)

Akima 09.02.2006 15:39

Опять какието проблемы с типами, заполняю тип вроде все впорядке, а когда запрашиваю из него информацию нечего не происходит. Помогите а.



Фаил удален . А в следующем сообщении прикреплен файл с о всеми объяснениями

impersonalis 09.02.2006 18:36

Ничего не понял в коде - читается информация из фацлы и обрабатвается ужасным алгоритмом. Расставь отстыпы и прочее. И вообще - напиши, что конкретно ты хочшь от файла?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot