Wieso braucht man in diesem code eine Function ?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

sbrog

Betreff: Wieso braucht man in diesem code eine Function ?

BeitragSo, März 14, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
; Rob´s BB-Kurs 2
; Robert Gerlach 11.2001
;
; Snake Grundlagen
;----------------------------------------------
; Noch kein Spiel, nur die Technik hinter einer Snake.



Graphics 640, 480, 16,2
SetBuffer BackBuffer()



; Startposition festlegen
Global x = 320
Global y = 240

; Die Richtung festlegen
Global xplus = 1 ; Nach rechts
Global yplus = 0 ; weder nach oben oder nach unten. Nur nach rechts.

; Die Länge der Schlange
Global laenge = 200
Dim snakex(laenge + 1)
Dim snakey(laenge + 1)



; Hauptschleife
Repeat
Cls

tastenpruefen
snakebewegen

Flip
Until KeyHit(1)
End


;-----------------------------------------------------------------------
Function tastenpruefen()
; Tastenabfrage
If KeyHit(205) Then ; rechts
xplus = 1
yplus = 0
EndIf

If KeyHit(203) Then ; links
xplus = -1
yplus = 0
EndIf

If KeyHit(208) Then ; unten
xplus = 0
yplus = 1
EndIf

If KeyHit(200) Then ; oben
xplus = 0
yplus = -1
EndIf
End Function
;----------------------------------------------------------------------
Function snakebewegen()

x = x + xplus ; xplus und yplus werden in tastenpruefen() gesetzt.
y = y + yplus


; Wenn er am Rand ist, kommt er an der anderen Seite wieder raus
If x > 640 Then x = 0
If x < 0 Then x = 640
If y > 480 Then y = 0
If y < 0 Then y = 480


; Jeder Punkt der Linie wird gemalt
For i = 0 To laenge
Color i, laenge - i + 50, laenge - i + 50; Unwichtig, aber schön...
Plot snakex(i), snakey(i)
Next

; Jedem Punkt werden die Koordinaten des davorliegenden zugewiesen.
; Das eigentlich wichtige an einem Snake-Programm.
;_________
For i = laenge To 1 Step -1
snakex(i) = snakex(i - 1)
snakey(i) = snakey(i - 1)
Next
;---------

; Der erste Punkt hat die Hauptkoordinaten. Die des Anfangs eben.
snakex(0) = x
snakey(0) = y



Wäre es in diesem code nicht besser, das tastenpruefen und snakebewegen ohne Function zu schreiben, da der befehl eh nur einmal gebraucht wird ?

ChrisAttack

BeitragSo, März 14, 2004 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktionen werden deshalb benutzt, weil das spätere Umschreiben leichter ist. Wenn du jetzt ein neues Feature einbauen willst, ist es einfacher du hast eine Funktion, als dass du die zeilen mühsam im Quelltext umschreiben musst. Außerdem dient es der Uberschaubarkeit.
B3D
MSVC++
DX9SDK
 

MasterK

BeitragSo, März 14, 2004 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
programme hintereinander weg zu schreiben ist so mit das schlimmste was man machen kann. wenn deine hauptschleife 10000 zeilen beinhaltet, wünsche ich dir viel spass beim suchen und bearbeiten.

Freeman

BeitragMo, März 15, 2004 9:58
Antworten mit Zitat
Benutzer-Profile anzeigen
es ist einfacher wenn du 1000 funktionen hast als wenn du 1000 Codezeilen hast. Allein die übersicht machts. Aber ich war auch mal so drauf nur Codezeilen zu schreiben...aba das hat sich jetzt zum Glück geändert Smile
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28
 

Omenaton_2

BeitragMo, März 15, 2004 13:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, es ist bei allen Programmen die mehr als nur ein Paar Zeilen haben wichtig den Code modular aufzubauen. Selbst wenn in dem Beispiel oben der Code sehr kurz ist, wenn du ihn aber bald erweitern willst, kommt dir das stark zu Gute, daß du es aufgeteilt hast.
Was ich aber anmerken will (schon wieder) ist, daß es nicht die Functions sind die wichtig sind, sondern der modulare Aufbau des Codes.

Function ist da nicht nötig. Ist zwar nicht "schädlich", bringt aber keinerlei Vorteile gegenüber Subrutinen mit Gosubs (wie ich sie immer verwende).

Du könntest stat Fucntions schreiben:

Code: [AUSKLAPPEN]


GOSUB tastenpruefen
GOSUB snakebewegen

Flip
Until KeyHit(1)
End


;*** Tastenabfrage *****************************************
.tastenpruefen

If KeyHit(205) Then ; rechts
   xplus = 1
   yplus = 0
EndIf

If KeyHit(203) Then ; links
   xplus = -1
   yplus = 0
EndIf

If KeyHit(208) Then ; unten
   xplus = 0
   yplus = 1
EndIf

If KeyHit(200) Then ; oben
   xplus = 0
   yplus = -1
EndIf

RETURN
;*******************************************************
[/code]
 

MasterK

BeitragMo, März 15, 2004 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
örgs... gosub-return. des teufels brut. und vor allem nutzlos, da sie funktionen nur imitieren aber null vorteil bringen. im gegenteil, keine parameter möglich und rückgabewerte sind auch fehlanzeige.

edit: was heissen soll: funktionen bringen doch vorteile
 

Omenaton_2

BeitragMo, März 15, 2004 17:10
Antworten mit Zitat
Benutzer-Profile anzeigen
MasterK hat Folgendes geschrieben:
örgs... gosub-return. des teufels brut. und vor allem nutzlos, da sie funktionen nur imitieren aber null vorteil bringen. im gegenteil, keine parameter möglich und rückgabewerte sind auch fehlanzeige.

edit: was heissen soll: funktionen bringen doch vorteile


Nutzlos, weil keine Parameter möglich und keine Rückgabewerte ?
Was soll das ?

Parameter sind da, das sind die aktuellen Variablenwerte die in der Subrutine benutzt werden und Rückgabewert ist auch, da , in dem Beispiel sind das xplus und yplus.
Alles ist da, wird nur nicht so großspurig "Parameter" und "Rückgabewert" genannt, ist aber doch das selbe.

Ctuchik

BeitragMo, März 15, 2004 19:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann aber in Funktionen Variablen die Lokal definiert werden doppelt verwenden!
Bie Gosub ist alles im Hauptprogramm, demnach müsste ich in jedem Gosub zum Beispiel eine andere Variable für For-Schleifen benutzen, weil sonst vielleicht eine andere überschrieben wird!
Bei Funktionen passiert das nicht!

Funktionen sind auch nur minimal langsamer als Gosub und ich finde sie praktischer! Aber da teilen sich die Meinungen halt Smile

mfG Ctuchik

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group