Local Anfängerprobleme
Übersicht

![]() |
Raiden93Betreff: Local Anfängerprobleme |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey,
ich habe mir mal gedacht ich fange so langsam mal an, Locale Variablen zu benutzen doch leider habe ich gerade ein bisschen Schwierigkeiten und Hoffe das mir der ein oder andere vielleicht 1,2 Tipps geben könnte. Also ich wollte mal ein kleines Retro Pong Programmieren, doch leider kriege ich Local nicht meine Menü Auswahl Punkte zum laufen. Sobald ich (Pfeil Oben) benutze soll die Selektion ein Hoch gehen und bei (Pfeil Runter) die Selektion nach unten. Meine Selektion bleibt aber solange sie Local ist so stehen wie sie ist da sie ja bei jedem Durchlauf neu erstellt wird. Wie würdet ihr das Problem Lösen? Code: [AUSKLAPPEN] Function Gui (Game_Modus, Font_Blitz_Logo, Font_Blitz)
Select Game_Modus Case 1 ;Hauptmenü Local Menu_Auswahl = 3 ;Logo SetFont Font_Blitz_Logo Color 255,255,255 Text 180,10,"Retro Pong" If KeyHit (200) And Menu_Auswahl >1 ;Hoch Menu_Auswahl = Menu_Auswahl -1 Else If KeyHit (208) And Menu_Auswahl <3 ;Runter Menu_Auswahl = Menu_Auswahl +1 End If ;Menü Punkte If Menu_Auswahl = 1 SetFont Font_Blitz Color 255,255,0 Text 270,230,"Spiel Starten" Color 255,255,255 Text 310,280,"Optionen" Color 255,255,255 Text 320,340,"Beenden" Else If Menu_Auswahl = 2 SetFont Font_Blitz Color 255,255,255 Text 270,230,"Spiel Starten" Color 255,255,0 Text 310,280,"Optionen" Color 255,255,255 Text 320,340,"Beenden" Else If Menu_Auswahl = 3 SetFont Font_Blitz Color 255,255,255 Text 270,230,"Spiel Starten" Color 255,255,255 Text 310,280,"Optionen" Color 255,255,0 Text 320,340,"Beenden" End If Case 2 ;Spiel Case 3 ;Optionen End Select End Function |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würd's lösen, indem ich Menu_Auswahl Global![]() Anderer Tipp: Gewöhne dir an, Konstanten zu benutzen, statt Zahlen. Code: [AUSKLAPPEN] Case 1 ;Hauptmenü
Lesbarer, und weniger Fehleranfällig.
vs. Case Game_State_Mainmenu |
||
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) |
![]() |
Raiden93 |
![]() Antworten mit Zitat ![]() |
---|---|---|
wie meinst du das mit dem
Code: [AUSKLAPPEN] Case 1 ;Hauptmenü
vs. Case Game_State_Mainmenu Soll ich für jede Zahl eine Konstante Variable erstellen? |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erst mal: "Konstante Variable" gibt es nicht ![]() Jeder Wert, der sich nicht ändert, kann eine Konstante werden. Dann kannst du auf Kommentare an der Seite verzichten, die kryptische Zahlen erklären müssen. True und False sind 1 und 0 vor zu ziehen - wenn die Werte Wahr und Falsch repräsentieren. |
||
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) |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Local vs. global ist ein heikles Thema.
Globale vereinfachen Dir den Zugriff auf Daten, bergen aber das Risiko von Fehlmanipulation. Daher sind lokal gültige Variablen idR. vorzuziehen. Hier in diesem Fall ist es jedoch so dass Du ja einen Wert über mehrere aufrufe erhalten willst, und das geben die BB-Möglichkeiten nicht wirklich her (Unter Bmax wäre es kein Problem eine Globale mit Gültigkeit nur in der Funktion anzulegen). In deinem Beispiel gäbe es mehrere Möglichkeiten: - deklariere deine Auswahl global. Einfach umzusetzen. Torpediert jedoch die Datentrennung. ede beliebige Stelle des Programmes kann deine Auswahl verändern. - Übergib der Funktion die aktuelle Auswahl und lasse sie die veränderte zurückgeben. Spart die Globale, ist jedoch auch nicht wirklich gekapselt. - Erstelle einen Hilfstype / eine Bank / ein Array. Auch hier ist die Datenkapselung nur unvollständig. In Kombination mit eindeutig benannten Konstanten wäre es jedoch ein Schritt in die richtige Richtung. Unter BB würde ich - auch wenn es mir schwerfällt- dennoch die erste Möglichkeit die sinnigste, sprich: eine globale für solche Fälle zu erlauben. ( hier ist es auch sehr schwer das Design so umzukrempeln dass auf eine Globale verzichtet werden kann). |
||
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 |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Xeres weist Dich auf eine andere Optimierungsmöglichkeit im Code hin. Sie hat gar nichts mit Deiner Frage zu tun, ist aber ein sehr sinnvoller Tipp und dient der besseren Lesbarkeit von Programmen und hilft Fehler zu vermeiden.
Du verwendest für die Select /Case-Struktur Zahlen zur Unterscheidung: BlitzBasic: [AUSKLAPPEN] Function Gui (Game_Modus, Font_Blitz_Logo, Font_Blitz) Xeres rät Dir nun lieber symbolische Konstanten zu verwenden, wie etwa: BlitzBasic: [AUSKLAPPEN] Const HAUPT_MODUS=1 , SPIEL_MODUS=2 , OPTIONEN_MODUS=3 So benötigst Du keine Kommentare mehr hinter den Zahlen, weil die "Zahl" selbst schon informativ ist. Das solltest D u dir unbedingt angewöhnen. Wenn man es weitertreibt lassen sich so alle direkten Zahlen in Computerprogrammen durch erklärende Ausdrücke ersetzen: BlitzBasic: [AUSKLAPPEN] Const HAUPT_MODUS=1 , SPIEL_MODUS=2 , OPTIONEN_MODUS=3 Das ganze jetzt noch kombiniert mit einer Straffung des Codes in Bezug auf doppelte Zeilen: Hier sieht man nun schön, wie der Einsatz von Konstanten den Code stark kürzt: BlitzBasic: [AUSKLAPPEN] Const HAUPT_MODUS=1 , SPIEL_MODUS=2 , OPTIONEN_MODUS=3 Der größte Vorteil aber liegt darin, dass Du nun sehr leicht viele weitere Menuzeilen einfügen kannst oder z.b. das gelbe Hervorheben ohne große Code-Änderungen in ein rotes oder grünes Hervorheben ändern kannst. |
||
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Sinn der Funktion Gui ist mir schleierhaft... Wieso benutzt du denn eine Funktion für drei völlig verschiedene Aufgaben? Soll das eine Art Front-Controller sein, wie man ihn aus MVC kennt, oder was? Wieso denn keine drei Funktionen: showMenu, showGame und showOptions? Da spart man sich doch das ganze Konzept mit den globalen Variablen.
ZEVS |
||
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn ich das nun richtig interpretiert habe, sind Const keinesfalls variablen ![]() Konstanten sind nicht umsonst KONSTANT - sie können niemals im programm geändert werden. Sie sind eine möglichkeit, komplexe programmstrukturen mit Lesbarkeit zu verfeinern. Beim compilevorgang wird jede Const durch ihren eigentlich wert ausgetauscht - im späteren Programmcode findet sich nur die Zahl, kein pointer auf den Wert im speicher ![]() aber nun zurück zum eigentlich thema - hat dir BladeRunner ein wenig helfen können? ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group