BASIC

Author Topic: (Erledigt) Sowas wie ByRef als Funktionsrückgabe  (Read 5178 times)

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10697
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
Also.

Einen Zeiger auf ein Element bekommst Du mit:
ALIAS zeiger AS feld[index]
zeiger.xx

Oder Du übergibst an eine Funktion. Types werden _immer_ BYREF übergeben. Arrays auch.

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
@Kitty Hello  :enc:
danke, spiele ich mal mit rum  ;)

Wenn wie in der Hilfe dieses Each
Quote
FOREACH ref IN feld[]
...
NEXT

echt wie sowas ist
Quote
FOR i = 0 to BOUNDS(feld[],0)-1
   ref = feld
   ...
   feld = ref
NEXT
dann wäre nach Adam Riese ref schon eine Kopie.

Jede Sprache macht es anders , das Beispiel in der Hilfe war nützlich.

(mit "Objekten" die immer Byref übergeben werden kenne ich von MS,fände es aber logischer wenn es davor stehen würde weil die anderen wohl byval sind oder.)

 :x
« Last Edit: 2012-Apr-24 by Markus »

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
@Alle
Danke

Und falls das jemand interessiert  :booze:
Code: GLBasic [Select]

TYPE TPlayer
        Nr
        Name$
        x
        y
        Money

        FUNCTION Draw:
                SETPIXEL self.x,self.y,RGB(255,255,255)
        ENDFUNCTION

        FUNCTION Position: x,y
                self.x=x
                self.y=y
        ENDFUNCTION

        FUNCTION Update:

                //<- 203 Cursors
                //-> 205
                //^  200
                //V  208
                //o   28 RETURN

                LOCAL Name$=self.Name$ //for debug

                IF KEY(205) // Taste nach rechts
                        IF self.x<800 THEN self.x=self.x+1
                ENDIF

        ENDFUNCTION

ENDTYPE

GLOBAL Players[] AS TPlayer

ALLOWESCAPE TRUE

MainLoop()
END

FUNCTION MainLoop:

        LOCAL A AS TPlayer
        A.Nr=1
        A.Name$="Markus"
        A.Position(100,300)

        LOCAL B AS TPlayer
        B.Nr=2
        B.Name$="Computer"
        B.Position(800-100,300)

        DIMPUSH Players[],A
        DIMPUSH Players[],B

        REPEAT

                FOREACH P IN Players[]
                        P.Draw()
                NEXT

                LOCAL i%
                i=FindPlayer(1,Players[])              
                ALIAS P AS Players[i]   //so vereinfacht die Schreibweise enorm und man arbeitet mit dem Original
                P.Update() // Fragt nur die Rechts Taste ab

                SHOWSCREEN

        UNTIL FALSE

ENDFUNCTION

FUNCTION FindPlayer: Nr,List[] AS TPlayer //damit innen keine Globalen Variablen benutzt werden die Liste als Byref
        LOCAL i%
        FOR i = 0 TO BOUNDS(List[],0)-1
                IF List[i].Nr=Nr
                        RETURN i
                        BREAK
                ENDIF
        NEXT
        RETURN 0
ENDFUNCTION
 

Offline Kitty Hello

  • code monkey
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 10697
  • here on my island the sea says 'hello'
    • View Profile
    • http://www.glbasic.com
FOREACH j IN ar[] ist sowas wie:
FOR I%= 0 to LEN(ar[])-1
   ALIAS j AS as
   j...
NEXT

Offline Markus

  • Mr. Polyvector
  • ***
  • Posts: 125
  • Offline
    • View Profile
@Kitty Hello
viel anders weiter geben konnte ich die Variable mit dem Alias nicht
aber das Alias hilft sehr damit es übersichtlicher bleibt.
Habe jetzt den dreh raus.