Punkte erhöhen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Megamag

Betreff: Punkte erhöhen

BeitragDi, Jun 17, 2008 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo.
Ich habe verschiedene Gegner, die als Types innerhalb einer Funktion definiert sind.
Und ich habe eine Variable "Global Score".
Wenn der Gegner vernichtet wird, dann soll diese Variable erhöht werden.
Aber eben außerhalb der Funktion.
Mit Return geht's nicht oder besser:
Ich weiß nicht, wie...
Also, wie kann ich das am besten anstellen?

ZaP

BeitragDi, Jun 17, 2008 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Score = Score + 1


Oder wie jetz?
Starfare: Worklog, Website (download)
 

DjDETE

BeitragDi, Jun 17, 2008 17:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn getötet dann Return 1 und dann eben wenn 1 "returned" wurde die Variable Score erhöhen.
MfG DjDETE
Aktuelles Projekt: XXX |XXX | 3% der v1b fertig
www.emu-soft.de.vu Für die Homepage suche ich noch Linktauschpartner, bei Interesse einfach melden.

Megamag

BeitragDi, Jun 17, 2008 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, aber der Type sieht ja so aus:
Code: [AUSKLAPPEN]
Function update_beispiel()
 For b.T_Beispiel = Each T_Beispiel
 
 If b\life < 0 then
 FreeEntity b\ent
 ;Hier müsste die Score erhöht werden, aber im Main-Programm
 Delete b
EndIf
 
 Next
End Function

Eingeproggt

BeitragDi, Jun 17, 2008 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn "Score" eine globale Variable ist, dann wird sie "im MainProgramm" erhöht, um es mit deinen Worten auszudrücken. Die globale Var kannst du in der Funktion genauso bearbeiten. Und wenn es unbedingt im Hauptprogramm sein muss - weshalb auch immer, machs mit Return 1 oder Return 0 und dann
Code: [AUSKLAPPEN]
Score=score+update()


Fertig Smile

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Megamag

BeitragDi, Jun 17, 2008 17:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke!
Aber ich habe es jetzt so gelöst:
Code: [AUSKLAPPEN]
Sc = update_beispiel()
If Sc = True Then
Score = Score + 10
EndIf

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jun 17, 2008 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso schaust du dir nicht mal an, was Return überhaupt macht? Denn dann wüsstest du auch sofort, wie die vorherigen Beispiele gemeint sind. Um den oben erwähnten Beispielen mal zu folgen, müsste dein Funktionsaufruf ähnlich wie folgt sein: score = score + update_beispiel()

Dann würde die Funktion aufgerufen werden ung ggf. der Wert für score erhöht. Allerdings müsstest du dann innerhalb der Funktion zuerst den aktuellen scoreupdate zusammen rechnen. Also für den Fall, dass pro Aufruf mehrere Gegner von der Bildfläche verschwinden.

Eine andere Möglichkeit ist, die Variable score als Global zu deffinieren. Dann würden Änderungen innerhalb einer Funktion auch den Wert überall anderswo ändern. Global eben.

Noch eine andere Möglichkeit ist: Ich sehen keinen Grund die paar Zeilen Code in eine Funktion zu packen, ausser du hast da noch eine Menge mit vor. Denn es gilt: Funktionen sind toll, aber nur, wenn sie innerhalb ihres Einsatzgebietes eingesetzt werden. Alles andere ist nicht unbedingt toll.

Edit1: Spät dran mal wieder ich mit meinem Beitrag.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Megamag

BeitragDi, Jun 17, 2008 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war nur eine Beispielfunktion.
In meiner richtigen Update Funktion sind
etliche Zeilen Code enthalten.

Oh, Mann!
Ich wusste gar nicht, dass globale Variablen auch in Funktionen gelten!
Hätte ich das früher gewusst, wäre mir viel Zeit und Arbeit erspart geblieben...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Jun 17, 2008 23:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit mir bekannt, gibt es globale Variablen nur damit diese auch in Funktionen erhalten bleiben. Allerdings rate ich davon ab, nun alle Variablen als global zu deklarieren. Das zeugt von keinem guten Programmierstil. Man sollte sich also schon eine gute Programmstruktur überlegen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

BladeRunner

Moderator

BeitragDi, Jun 17, 2008 23:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Jop, globale Variablen sollte man nur nutzen wenn es nicht zu vermeiden ist. Vieles lässt sich über die Rückgabewerte der Funktionen regeln.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Megamag

BeitragMi, Jun 18, 2008 8:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Verbrauchen globale Variablen denn mehr Speicher, oder
was ist so schlimm daran?

BladeRunner

Moderator

BeitragMi, Jun 18, 2008 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Sie verringern dramatisch die Datentrennung im Code, sprich sie sind eine unglaubliche Fehlerquelle. Der eigene Geltungsbereich für Variablen in einer Function wurde ja aus dem Grund geschaffen um zu verhindern dass die einzelnen Subroutinen einges Programmes sich gegenseitig Werte verändern und dann Fehler liefern. Je mehr Globale Du verwendest desto größer ist die wahrscheinlichkeit dass Du irgendwann mal mit einer einen Fehler machst und somit alles aus dem Lot bringst.
Noch dazu sind solche Fehler schwer zu debuggen, da sie eben global auftreten, sprich im kompletten Quelltext sein können. Ein lokaler Bug muss jedoch in einem recht begrenzten Bereich zu finden sein.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group