ergo!pro | faceVALUE | OT/OB-Lib | Bastard | RUN!Only | RUN!Lib | Bubbles | Module | CAT's-eye |
Die OT/OB-Lib schafft wichtige Voraussetzungen zum Objektorientierten Programmieren in GFA-BASIC. Erschaffen Sie mit dieser Bibliothek Ihre eigenen Variablen- und Objekttypen! Beispiel Fußballmanager: Was noch fehlt ist eine kleine Prozedur, die unter Berücksichtigung der Spielerstärken der beteiligten Mannschaften und etwas Zufall das Endergebnis eines Fußballspiels ermittelt. So einfach soll ein Fußballmanager sein? Die OT/OB-Lib nutzt dabei nicht den Variablenspeicher des GFA-BASIC, sondern fordert dynamisch vom Betriebssystem immer nur in etwa so viel Speicher an, wie gerade benötigt wird.
Die Programmstruktur wird bei Benutzung dieser Bibliothek sehr übersichtlich. Arbeiten an nachträglichen Änderungen, was bekanntlich zu einem kniffeligen Unterfangen ausufern kann, sind bei solchen Programmen aufgrund der Übersichtlichkeit problemlos möglich. So einfach sieht ein Programm aus, welches zwei Fußballmanschaften mit je 11 Spielern generiert, und diese mehrmals gegeneinander antreten läßt: ' ' *** Mannschaften anlegen *** ' fch: DATA Franz DATA Bert,Hugo,Sascha DATA Markus,Frank,Theo,Daniel DATA Matthias,Andreas,Jürgen ' bvb: DATA Teddy DATA Gerhard,Jan,Christian DATA Stephan,Bodo,Pascal,Bobby DATA Patrick,Jonas,Uwe ' RESTORE fch LET fch=@verein("FC 08 Homburg",80) RESTORE bvb LET bvb=@verein("BVB 09 Borussia Dortmund",40) ' ' *** Spiel austragen *** ' PRINT "Es spielt: ";@verein_name$(fch);" gegen ";@verein_name$(bvb);"!" PRINT PRINT "Die Aufstellungen:" PRINT PRINT USING "\........\ Tor Abw Mit Stu \........\ Tor Abw Mit Stu"[.. ..] @verein_name$(fch),@verein_name$(bvb) ' FOR spieler%=0 TO 10 ' LET spieler1=@verein_spieler(fch,spieler%) LET tor1&=@fussballspieler_tor(spieler1) LET abwehr1&=@fussballspieler_abwehr(spieler1) LET mitte1&=@fussballspieler_mitte(spieler1) LET sturm1&=@fussballspieler_sturm(spieler1) ' LET spieler2=@verein_spieler(bvb,spieler%) LET tor2&=@fussballspieler_tor(spieler2) LET abwehr2&=@fussballspieler_abwehr(spieler2) LET mitte2&=@fussballspieler_mitte(spieler2) LET sturm2&=@fussballspieler_sturm(spieler2) ' PRINT USING "\........\ ### ### ### ### \........\ ### ### ### ###",[.. ..] @fussballspieler_name$(spieler1),tor1&,abwehr1&,mitte1&,[.. ..] sturm1&,@fussballspieler_name$(spieler2),tor2&,abwehr2&,mitte2&,sturm2& ' NEXT spieler% PRINT ' FOR i%=1 TO 5 @fussballspiel(fch,bvb,fch_tore&,bvb_tore&) PRINT i%;".Spiel: Das Spiel endete ";fch_tore&;":";bvb_tore&;"!" NEXT i% ' @verein_free(fch) @verein_free(bvb) Dies sind Beispielausgaben einer solchen Spielrunde: Es spielt: FC 08 Homburg gegen BVB 09 Borussia Dortmund! Die Aufstellungen: FC 08 Homb Tor Abw Mit Stu BVB 09 Bor Tor Abw Mit Stu Franz 71 2 1 0 Teddy 43 4 6 8 Bert 3 70 8 3 Gerhard 4 40 1 4 Hugo 4 70 21 17 Jan 7 37 0 10 Sascha 2 77 3 15 Christian 5 36 0 7 Markus 9 22 72 22 Stephan 5 2 39 5 Frank 7 18 79 24 Bodo 6 9 34 7 Theo 5 24 81 9 Pascal 9 5 32 1 Daniel 6 22 72 4 Bobby 6 3 35 3 Matthias 2 15 14 86 Patrick 1 12 4 31 Andreas 7 18 24 82 Jonas 9 3 1 41 Jürgen 1 21 2 71 Uwe 0 7 11 34 1.Spiel: Das Spiel endete 1:0! 2.Spiel: Das Spiel endete 3:0! 3.Spiel: Das Spiel endete 2:1! 4.Spiel: Das Spiel endete 4:1! 5.Spiel: Das Spiel endete 5:1! Anmerkung: Die Tatsache, dass der FC 08 Homburg dem BvB 09 in der Simulation so deutlich überlegen scheint, weist nicht etwa auf einen Programmfehler hin. Hier zeigt sich lediglich, dass man als Programmierer weitaus effektivere Möglichkeiten zur Einflußnahme auf den Ausgang eines Spieles hat, als Vereinsfunktionäre, Spieler und Fans eines Bundesligisten zusammen. Auch die Unterprogramme, die das Spielergebnis ermitteln, besitzen eine sehr einfache Struktur: ' PROCEDURE fussballspiel(heim,gast,VAR heim_tore&,gast_tore&) !call ' ' Diese Prozedur läßt zwei Mannschaften gegeneinander antreten. ' Sie liefert das Endergebnis des Spieles zurück. ' LOCAL heim_tor&,heim_abwehr&,heim_mitte&,heim_sturm& LOCAL gast_tor&,gast_abwehr&,gast_mitte&,gast_sturm& LOCAL heim&,gast&,max_tore& ' ' *** Mannschaftsstärken ermitteln *** ' @fussballspiel_ermittele_staerke(heim,heim_tor&,heim_abwehr&,heim_mitte&, heim_sturm&) @fussballspiel_ermittele_staerke(gast,gast_tor&,gast_abwehr&,gast_mitte&, gast_sturm&) ' LET heim&=ROUND(2*heim_sturm&-(gast_abwehr&+gast_tor&)+(heim_mitte& -gast_mitte&)) LET gast&=ROUND(2*gast_sturm&-(heim_abwehr&+heim_tor&)+(gast_mitte& -heim_mitte&)) ' LET max_tore&=(ABS(heim&)+ABS(gast&))\100 ' ADD heim&,1000 ADD gast&,1000 ' LET heim_tore&=RANDOM(ROUND(max_tore&*heim&/(heim&+gast&+1))) LET gast_tore&=RANDOM(ROUND(max_tore&*gast&/(heim&+gast&+1))) ' RETURN PROCEDURE fussballspiel_ermittele_staerke(verein,VAR tor&,abwehr&,mitte&,sturm&) ' LET tor&=@fussballspieler_tor(@verein_spieler(verein,0)) ' CLR abwehr&,mitte&,sturm& ' FOR spieler%=1 TO 3 ADD abwehr&,@fussballspieler_abwehr(@verein_spieler(verein,spieler%)) ADD mitte&,@fussballspieler_mitte(@verein_spieler(verein,spieler%))\2 ADD sturm&,@fussballspieler_sturm(@verein_spieler(verein,spieler%))\4 NEXT spieler% ' FOR spieler%=4 TO 7 ADD abwehr&,@fussballspieler_abwehr(@verein_spieler(verein,spieler%))\2 ADD mitte&,@fussballspieler_mitte(@verein_spieler(verein,spieler%)) ADD sturm&,@fussballspieler_sturm(@verein_spieler(verein,spieler%))\2 NEXT spieler% ' FOR spieler%=8 TO 10 ADD abwehr&,@fussballspieler_abwehr(@verein_spieler(verein,spieler%))\4 ADD mitte&,@fussballspieler_mitte(@verein_spieler(verein,spieler%))\2 ADD sturm&,@fussballspieler_sturm(@verein_spieler(verein,spieler%)) NEXT spieler% ' RETURN
Weitere Details zur Verwendung der OT/OB-Lib werden in unserer sehr ausführlichen, gedruckten Dokumentation beschrieben. Die Dokumentation ist bei uns zum Selbstkostenpreis erhältlich. Man erkennt, dass sich der Programmierer hier wirklich nur noch mit dem Algorithmus beschäftigen mußte, der ein möglichst realistisches, aber dennoch zufälliges Spielergebnis erzeugen sollte. Darüber, wo die Daten über die Spieler und die Vereine abgelegt sind, brauchte er sich keine Gedanken mehr zu machen. Neu in Version 1.1:
Publikationen zur OT/OB-Lib im WebATOS Programmierpraxis - Moderne ZeitenObjektorientiertes Programmieren in GFA-Basic - Teil IObjektorientiertes Programmieren in GFA-Basic - Teil II Objektorientiertes Programmieren in GFA-Basic - Teil III Anfragen per E-Mail an: herzog@run-software.de |
ergo!pro | faceVALUE | OT/OB-Lib | Bastard | RUN!Only | RUN!Lib | Bubbles | Module | CAT's-eye |