Wieso braucht man in diesem code eine Function ?
Übersicht

![]() |
sbrogBetreff: Wieso braucht man in diesem code eine Function ? |
![]() Antworten mit Zitat ![]() |
---|---|---|
; 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
MacBook | MacOSX 10.5 | 80GB HDD | 1GB | BlitzMax 1.28 |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ;******************************************************* |
||
MasterK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ö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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() mfG Ctuchik |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group