Functions und Parameterübergabe
Übersicht

WernerBetreff: Functions und Parameterübergabe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo Zusammen
Probiere gerade wieder zu Programmieren und finde Blitzmax ganz elegant. Ich hänge nun schon länger mit den Funcions und der Parameterübergabe. Habe mir Beispiele angeschaut, komme aber trotzdem nicht weiter. Will eine Uhr auf dem Bilschirm anzeigen lassen. Hier ist mein Code: SuperStrict Graphics 800,800 Global timer:TTimer=New TTimer While Not KeyHit( KEY_ESCAPE ) Or AppTerminate() Cls DebugStop() '------ Elemente gerade SetOrigin 0,0 SetHandle 0,0 SetTransform 0,1,1 '----- Zifferblatt SetColor 150,150,150 DrawOval 0,0,800,800 '---- Functions systemtime:Int(sec:Int,minu:Int,std:Int) sekunde:Int(sec:Int) minute:Int(minu:Int) stunde:Int(std:Int) datum:Int() ziffern:Int() mittelpunkt() Flip Wend EndGraphics Function systemtime:Int(sec:Int,minu:Int,std:Int) Local time:String=CurrentTime() Local p1:Int = Instr(time,":") Local svorne:String = Left$(time, p1-1) Local p2:Int = Instr(time,":", p1+1) Local smitte:String = Mid$(time,p1+1,p2-p1-1) Local shinten:String = Right$(time,Len(time)-p2) Local std:Int = Int(svorne) Local minu:Int = Int(smitte) Local sec:Int = Int(shinten) Return sec;minu;std End Function Function sekunde:Int(sec:Int) SetColor 0,100,255 SetOrigin 400,400 SetHandle 1,0 SetTransform 180+sec*6,1,1 DrawRect 0,0,2,330 EndFunction Function minute:Int(minu:Int) SetColor 0,255,0 SetOrigin 400,400 SetHandle 4,0 SetTransform 180+minu*6,1,1 DrawRect 0,0,8,300 EndFunction usw........ Ich möcht die Parameter in Systemtime: sec,minu,std an die Funktionen für z.B. sekunde weitergeben. Wäre über eure Vorschläge sehr erfreut. Vielleicht hat noch einer ein paar Tips zum Macs!!! z.B. funktioniert das Sample glcube.gmx unter MAXGUI bei mir nicht, obwohl ich maxgui.mod in den Ordner mod unter Blitzmax schon reinkopiert habe?. Fehlermeldungen: Can't find interface for module 'maxgui.drivers' Identifier 'TGadget' not found Danke für Eure Hilfe.. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte benutze die Code bzw. Syntax Boxen.
Du kannst nicht mehrere Variablen zurückgeben, nur eine und das über eine Zuweisung: Code: [AUSKLAPPEN] var = function()
Bei mehreren Variablen kannst du die Variablen Global deklarieren oder Var benutzen: BlitzMax: [AUSKLAPPEN] Local x:Int Zu guter Letzt gibt es nette Möglichkeiten, Strings zu verarbeiten, von denen du gebrauch machen solltest: BlitzMax: [AUSKLAPPEN] Local time:String[] = CurrentTime().Split(":") |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Farbfinsternis |
![]() Antworten mit Zitat ![]() |
---|---|---|
...oder aber er gibt ein Array zurück.
BlitzMax: [AUSKLAPPEN] Function machWasTolles:String[](einParameter:Int = 1337)[...] |
||
Farbfinsternis.tv |
Werner |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit dem String.Split funktioniert sehr gut.Danke
Habe es mit globalen Variablen zum laufen gebracht. Möchte aber zur Übung die lokalen Parameter übergeben. Code: [AUSKLAPPEN] SuperStrict
Graphics 800,800 While Not KeyHit( KEY_ESCAPE ) Or AppTerminate() Cls 'DebugStop() '------ Elemente gerade SetOrigin 0,0 SetHandle 0,0 SetTransform 0,1,1 '----- Zifferblatt SetColor 150,150,150 DrawOval 0,0,800,800 '---- Functionen Fsystemtime:Int() <-Habe hier schon alle Varianten versucht. : Missing function parameter 'sekunde' Fsekunde:Int(sekunde) 'Fminute:Int(m) 'Fstunde:Int(st) Fdatum() Fziffern() Fmittelpunkt() Flip Wend EndGraphics Function Fsystemtime:Int(sekunde:Int Var, minute:Int Var, stunde:Int Var) Local time:String[] = CurrentTime().Split(":") Local svorne:String = (time[0]) Local smitte:String = (time[1]) Local shinten:String = (time[2]) stunde = Int(svorne) minute = Int(smitte) sekunde = Int(shinten) Return End Function Function Fsekunde:Int() 'Local sec:Int SetColor 0,100,255 SetOrigin 400,400 SetHandle 1,0 SetTransform 180+sec*6,1,1 DrawRect 0,0,2,330 EndFunction Dieses Superstrict ist evtl. noch eine Ursache? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
SuperStrict kein Teil des Problems ![]() Wenn du Locale Variablen verwenden willst... deklariere Locale Variablen und übergib sie auch den Funktionen in der richtigen Anzahl. Zu guter Letzt: Du könntest dir auch den Zwischenschritt sparen, und die Strings gleich zu Int casten: Code: [AUSKLAPPEN] stunde = Int(time[0])
|
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Ana |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Werner,
also du rufst die Funktion BlitzMax: [AUSKLAPPEN] Fsystemtime:Int(sekunde:Int Var, minute:Int Var, stunde:Int Var)auf. Das heißt zwangsläufig das du auch alle diese Parameter übergeben musst. Durch das var kannst du hier auch keine Konstanten also so etwas wie BlitzMax: [AUSKLAPPEN] Const wert:Int oder direkte Zahlen oder Strings verwenden, da var die Referenz der Variable übergibt, sprich nicht den Wert sondern die Speicheradresse auf deinem Hauptspeicher. Fülle mal deine Funktion mit Variablen. Des weitern bedeutet das :Int hinter dem Funktionsnamen beim deklarieren, das du deine Funktion einen Int Wert zurückgeben lassen möchtest. Das solltest du nur nutzen wenn du das tatsächlich auch tust, sonst mag es dein Compiler völlig zu recht nicht. Bei BlitzMax: [AUSKLAPPEN] Fsekunde:Int(sekunde) übergibst du eine Variable, die du vorher nicht deklariert hast, was mit superstrict nicht erlaubt ist, da muss jede Variable vor dem ersten mal nuten mit local/Global Name:Typ vorgestellt werden.
So wäre es beispielsweise compilierbar, wenn es glaube ich auch nicht genau das macht was es sollte. BlitzMax: [AUSKLAPPEN] SuperStrict Liebe Grüße Diana |
||
Don't only practice your art,
but force your way into its secrets, for it and knowledge can raise human to divine |
Werner |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
So funktionierts endlich. Das war jetzt fast eine Geburt.
Code: [AUSKLAPPEN] SuperStrict Graphics 800,800 Local se:Int, mi:Int, st:Int While Not KeyHit( KEY_ESCAPE ) Or AppTerminate() Cls 'DebugStop() Fgeraderichten() Fzifferblatt() Fziffern() Fsystemtime:Int(se,mi,st) Fsekunde:Int(se:Int) Fminute:Int(mi:Int) Fstunde:Int(st:Int) Fdatum() Fmittelpunkt() Flip Wend EndGraphics Function Fsystemtime:Int(sek:Int Var, minu:Int Var, std:Int Var) Local time:String[] = CurrentTime().Split(":") sek=Int(time[2]) minu=Int(time[1]) std=Int(time[0]) 'Print "Sekunde"+std+":"+minu+":"+sek End Function Function Fsekunde:Int(se:Int) SetColor 0,100,255 SetOrigin 400,400 SetHandle 1,0 SetTransform 180+se*6,1,1 DrawRect 0,0,2,330 EndFunction Danke für eure Tips ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group