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=16947)

polopok 22.06.2012 13:59

создание записи во втором типе через первый
 
Собственно идея такова , создать связанный список типов и при необходимости заменить в первом типе значение на значение второго типа.
вот код:
увы выдаёт ошибку
Подскажите как правильно сделать !
хочется избежать пробежки по каждому типу в отдельности
Код:

Type tsecond        ;второй тип
Field  f 
End Type

Type tfirst                ;первый тип
Field ab.tsecond ,d          ; ab.tsecond - ссылка на второй тип
End Type

Graphics 800,600
SetBuffer BackBuffer()
q.tfirst= jac()        ;создание записи в первом типе
;q\d=  4


q\ab.tsecond =dak()        ;создание записи во втором типе через первый
;q\ab\f= 1

        ; присвоение значения первого типа второму
While Not KeyHit(1)
;If ab.tsecond <> Null Then
q\ab\f = q\d
;EndIf
For q.tfirst=Each tfirst

Text 10,20,"q\d - "+q\d;+" | "+q\y+"  q\d# -  "+q\d#+ "  " ;вывод значений x и y
Text 10,30, "q\ab\f - "+q\ab\f;+" | ";+ q\ab\f ;вывод z#

Next

Flip
Wend
Delete Each tsecond
Delete Each tfirst
End 

WaitKey()
Function jac.tfirst()
        Local pff.tfirst= New tfirst
        pff\d = 4
        Return pff
End Function

Function dak.tsecond ()
        Local pdd.tsecond = New tsecond
        pdd\f= 1
        Return pdd
End Function


Жека 22.06.2012 14:26

Ответ: создание записи во втором типе через первый
 
Всё дело в переменной "q".
Ты перед главным циклом в неё присваиваешь новый объект, а затем в цикле вайл проходишь фором по списку, используя всё ту же q. При завершении for... each... в q содержится Null. Обрати внимание что на экране нарисаван текст, т.е. один раз главный цикл крутанулся.

polopok 22.06.2012 14:31

Ответ: создание записи во втором типе через первый
 
:) Поменял на
Код:

For w.tfirst=Each tfirst

Text 10,20,"w\d - "+w\d;+" | "+w\y+"  w\d# -  "+w\d#+ "  " ;вывод значений x и y
Text 10,30, "w\ab\f - "+w\ab\f;+" | ";+ w\ab\f ;вывод z#

Next

Заработало ...
Спасибо !

polopok 22.06.2012 14:46

Ответ: создание записи во втором типе через первый
 
А как динамически присваивать ? например MouseX()

polopok 22.06.2012 14:58

Ответ: создание записи во втором типе через первый
 
Однако ,нашёл примеры буду разбирать .
примеры здесь:
http://blitzetc.blitzmax.ru/index.php/%D0%9A%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3:Blitz3D _-_%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80% D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85

polopok 22.06.2012 16:18

Ответ: создание записи во втором типе через первый
 
Вот разобрался ...
Код -ответ на свой вопрос :
Код:

Global mx , my ,ab.hero

Type hero        ;второй тип
Field  x ,y
End Type

Type map        ;первый тип
Field ab.hero
Field x ,y          ; ab.tsecond - ссылка на второй тип
End Type

Graphics 800,600
SetBuffer BackBuffer()
mx = MouseX() : my = MouseY()
q.map=CreateMap()        ;создание записи в первом типе
;q\d=  4

q\ab.hero =CreateHero()        ;создание записи во втором типе через первый
;q\ab\f= 1

While Not KeyHit(1)
Cls

;If KeyHit(3) Then
If KeyHit(2) Then q\ab\x=  q\x : q\ab\y=  q\y

For w.map=Each map
        If MouseDown(1)Then
                w\x =MouseX()
                w\y =MouseY()
                w\ab\x = w\x      ; присвоение значения первого типа второму
                w\ab\y = w\y      ;
        EndIf
        If MouseDown(2)Then
                w\ab\x = MouseX()
                w\ab\y = MouseY()
        EndIf
       
Text w\x,w\y,"q\x - "+w\x+" | w\y - "+w\y ;вывод значений x и y
Text w\ab\x,w\ab\y+10, "q\ab\x - "+w\ab\x+" | w\ab\y - "+ w\ab\y

Next

Flip
Wend
Delete Each hero
Delete Each map
End 

WaitKey()
Function CreateMap.map()
        Local pff.map= New map
        pff\ab.hero = Null
        pff\x = 400
        pff\y = 200
        Return pff
End Function

Function CreateHero.hero()
        Local ab.hero= New hero
        ab\x= Rnd( 100,600)
        ab\y= Rnd( 100,400)
        Return ab
End Function


Жека 22.06.2012 18:52

Ответ: создание записи во втором типе через первый
 
Расскажи в чём тут "фишка"? :)

polopok 22.06.2012 19:58

Ответ: создание записи во втором типе через первый
 
Смотри мою предыдущую тему про гексагоны.
хочется избавиться от многих прохождений по разным спискам


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

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