Topic : Das ATOS-Magazin 3/99
Author : Das ATOS-Team
Version : 12.11.1999
Subject : ATOS Diskettenmagazine
Nodes : 214
Index Size : 7926
HCP-Version : 5
Compiled on : Atari
@charset : atarist
@lang :
@default :
@help : ATOS Hilfe
@options : -i -s -h+zz -t2
@width : 70
View Ref-FileATOS ProgrammierpraxisModerne ZeitenAusfüllen der Prozeduren mit LebenDer Verein Das ATOS-Magazin 3/99Die Implementierung des Vereins-Objektes geschieht nun völlig analog.
Eine Besonderheit besteht hier aber durch die Benutzung eines Array-
Objektes zum Aufnehmen der Mannschaftsaufstellung. Dabei ist es
erforderlich, nach dem Anlegen eines neuen Array-Eintrages diesen
durch Aufruf der passenden init-Prozedur zu initialisieren, bzw. beim
Entfernen einen Array-Eintrages diesen durch Aufruf der exit-Prozedur
wieder "herunterzufahren", da diese beiden Vorgänge ja das Anlegen
bzw. Freigeben von Objektspeichern beinhalten. Die entsprechenden
Stellen sind gekennzeichnet:
FUNCTION verein(name$,staerke&) !call
'
' name$ => Vereinsname (bspw. "FC 08 Homburg")
' staerke& => Stärke der Spieler des Vereins im Mittel.
' (0 = sehr schlecht, 100 = sehr gut)
'
' Außerdem sind die Namen der 11 aufzustellenden Fußballspieler zu
' übergeben. Diese Namen müssen dazu in DATA-Zeilen abgelegt werden
' und der _DATA-Zeiger muß mit RESTORE auf den ersten Namen gesetzt
' werden.
'
LOCAL ob#
LET ob#=@ob_create(verein_%)
@verein_init(ob#,name$,staerke&)
RETURN ob#
ENDFUNC
PROCEDURE verein_init(ob#,name$,staerke&) !call
LOCAL aufstellung#,spieler%
LOCAL position&,spielername$
'
' *** konkrete Attribute initialisieren ***
'
@string_init(@ob_attrib(ob#,verein_%,verein_name_%))
'
' Hier muß nun der Typ der Arrayelemente (hier: fussballspieler)
' und die anfängliche Arraygröße (hier 11, da 11 Spieler) angegeben
' werden. Anschließend muß jeder einzelne Spieler initialisiert
' werden:
'
LET aufstellung#=@ob_attrib(ob#,verein_%,verein_aufstellung_%)
Hier wird nun zunächst das Array ganz normal wie jedes konkrete
Attribut initialisert. Dabei wird der Typ der Arrayelemente
(fussballspieler_%) und der Größenparameter (11) übergeben. Auf diese
Weise wird ein Array mit 11 Spieler angelegt.
Danach wird dann für jedes einzelne Array-Element die init-Prozedur
aufgerufen:
@array_init(aufstellung#,fussballspieler_%,11)
'
' --- Torwart: ---
'
LET position&=fussballspieler_position_tor_&
READ spielername$
@fussballspieler_init(@array_get(aufstellung#,0),spielername$,
position&,staerke&)
'
' --- Abwehr: ---
'
LET position&=fussballspieler_position_abwehr_&
FOR spieler%=1 TO 3
READ spielername$
@fussballspieler_init(@array_get(aufstellung#,spieler%),
spielername$,position&,staerke&)
NEXT spieler%
'
' --- Mitte: ---
'
LET position&=fussballspieler_position_mitte_&
FOR spieler%=4 TO 7
READ spielername$
@fussballspieler_init(@array_get(aufstellung#,spieler%),
spielername$,position&,staerke&)
NEXT spieler%
'
' --- Sturm: ---
'
LET position&=fussballspieler_position_sturm_&
FOR spieler%=8 TO 10
READ spielername$
@fussballspieler_init(@array_get(aufstellung#,spieler%)
spielername$,position&,staerke&)
NEXT spieler%
'
' *** Verein einrichten ***
'
' +++ Vereinsname +++
'
@verein_name_set(ob#,name$)
'
RETURN
PROCEDURE verein_exit(ob#) !call
LOCAL aufstellung#,spieler%
'
@string_exit(@ob_attrib(ob#,verein_%,verein_name_%))
'
' Nun muß umgekehrt zunächst jedes einzelne Arrayelement
' "aufgeräumt" werden - dann erst das Array selbst:
'
LET aufstellung#=@ob_attrib(ob#,verein_%,verein_aufstellung_%)
FOR spieler%=0 TO 10
@fussballspieler_exit(@array_get(aufstellung#,spieler%))
NEXT spieler%
@array_exit(aufstellung#)
'
RETURN
PROCEDURE verein_free(ob#) !call
@verein_exit(ob#)
@ob_free(ob#,verein_%)
RETURN
FUNCTION verein_name$(ob#) !call
'
' Ermittelt den Vereinsnamen.
'
RETURN @string_get$(@ob_attrib(ob#,verein_%,verein_name_%))
ENDFUNC
FUNCTION verein_spieler(ob#,spieler%) !call
'
' Gibt den Spieler mit der Nummer spieler% aus der Aufstellung
' zurück (also dessen Objektkennung).
'
RETURN @array_get(@ob_attrib(ob#,verein_%,verein_aufstellung_%),
spieler%)
'
ENDFUNC
PROCEDURE verein_name_set(ob#,name$)
@string_set(@ob_attrib(ob#,verein_%,verein_name_%),name$)
RETURN
Rückblick