Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

menü abfrage (nur wie ?)

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 28.04.2010, 11:54    Titel: menü abfrage (nur wie ?) Antworten mit Zitat

Hallo,

Da ich jetzt seit ungefär 4 Tage mit Free Basic arbeite und ein richtiges Spiel schreibe (dank dem Forum jetzt auch mit BMP datein, Sprites usw grinsen ) bin ich meines achtens schon recht weit gekommen.
bin ich jetzt bei am Punkt, der für mich nicht realisirbar ist:
ein Menü, welches irgentwie über Tasten abfragbar ist:

sieht mom so aus:

Code:


        Spiel Starten
 ->     Spiel Laden
        Spiel Beenden



Der Pfeil lässt sich bewegen - wenn man runterdrückt und bei Spiel Beenden ist , dann springt der wieder nach spiel starten und anders rum geht das auch

ich hab das mal so gemacht:

Code:

DIM AS STRING eingabe

Screen 18,24
     
      print " "
      print " "
      print " "
      print " "
      print " "
      print " "
      print "              Spiel Starten            "
      print "              Spiel Option             "
      print "              Spiel Beenden            "

      x = 7
      y = 10
      Locate x,y
      print "->"

DO
   eingabe = INKEY
   

   IF eingabe <> "" THEN
      SELECT CASE eingabe
         CASE CHR(255, 72)
            x -= 1
         CASE CHR(255, 80)
            x += 1
         CASE CHR(27)
         end
         END SELECT
     

      SCREENLOCK
      CLS
     
      if x = 10 Then x = 7
      if x = 6 Then  x = 9

      print " "
      print " "
      print " "
      print " "
      print " "
      print " "
      print "              Spiel Starten            "
      print "              Spiel Option             "
      print "              Spiel Beenden            "
     
      Locate x,y
      print "->"
      SCREENUNLOCK
      ENDIF
   SLEEP 1
LOOP


jetzt will ich das machen das man das irgentwie anklicken kann
- hab schon gedacht das so zu machen

Code:

if x = 7
if CASE CHR(27)
spiel Starten
endif 


tuts aber nicht ... noch nicht traurig

- das ganze ist jetzt mal Textbasirt bei mit ist das halt mit sprites
(laüft aber GENAU so ) - nur halt dass ich das weder noch an "entern "
kann mit dem Kopf durch die Mauer wollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 28.04.2010, 14:22    Titel: Antworten mit Zitat

habs hinbekommen :

Code:


DIM eingabe AS STRING

Screen 18,24
1     
      print " "
      print " "
      print " "
      print " "
      print " "
      print " "
      print "              Spiel Starten            "
      print "              Spiel Option             "
      print "              Spiel Beenden            "

      x = 7
      y = 10

      Locate x,y
      print "->"

DO
   eingabe = INKEY
   
   
      if eingabe = Chr(255, 72) THEN
      x -= 1
      end if
     
      if eingabe = Chr(255, 80) THEN
      x += 1
      end if
     
      if eingabe = Chr(27) THEN
      end
      end if
       
      if x = 7 and eingabe = Chr(13) THEN
      goto spiel_laden
      end if
     
      if x = 8 and eingabe = Chr(13) THEN
      goto spiel_option
      end if

      if x = 9 and eingabe = Chr(13) THEN
      end 
      end if

      if x = 10 Then x = 7
      if x = 6 Then  x = 9
     

      SCREENLOCK
      CLS

     
 
     

      print " "
      print " "
      print " "
      print " "
      print " "
      print " "
      print "              Spiel Starten            "
      print "              Spiel Option             "
      print "              Spiel Beenden            "
     
      Locate x,y
      print "->"
     
      SCREENUNLOCK
     
loop until eingabe="27"
sleep

spiel_laden:
CLS
Print "Spiel Starten"
Sleep(1000)
goto 1


spiel_option:
CLS
Print "option"
Sleep(1000)
goto 1


_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 28.04.2010, 16:50    Titel: Antworten mit Zitat

Setzen 6! Zunge rausstrecken

Verwende keine Gotos, selbst wenn dein Leben davon abhängt, sonst frisst dich ein Raptor.

Versuch und Fehlschlag ist die Devise, bis es halt läuft, auch ohne Goto.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Westbeam



Anmeldungsdatum: 22.12.2009
Beiträge: 760

BeitragVerfasst am: 28.04.2010, 16:51    Titel: Antworten mit Zitat

Habe es jetzt nicht ausprobiert, aber:
-Kein Goto! BITTE KEIN GOTO!!!!
Schmeiß es aus dem Code raus und vergess, dass du jemals wusstest was das ist.
...
...
...
...
Bitte zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 28.04.2010, 17:16    Titel: Antworten mit Zitat

Raptoren sollten ausgestorben sein, sind sie laut dem Bild aber nicht. Zunge rausstrecken
Bei Goto ist es genau das gleiche. Das was du mit Goto machst kannst du viel besser und schöner mit sub und function machen. Etwa so:
Code:
DIM shared eingabe AS STRING
dim shared as integer x,y

declare sub printMenu()
declare sub mainLoop()
declare sub spiel_laden()
declare sub spiel_option()

Screen 18,24

printMenu()




sub printMenu()
      print " "
      print " "
      print " "
      print " "
      print " "
      print " "
      print "              Spiel Starten            "
      print "              Spiel Option             "
      print "              Spiel Beenden            "

      x = 7
      y = 10

      Locate x,y
      print "->"

    mainLoop()
end sub


sub mainLoop()
DO
   eingabe = INKEY
   
   
      if eingabe = Chr(255, 72) THEN
      x -= 1
      end if
     
      if eingabe = Chr(255, 80) THEN
      x += 1
      end if
     
      if eingabe = Chr(27) THEN
      end
      end if
       
      if x = 7 and eingabe = Chr(13) THEN
      spiel_laden()
      end if
     
      if x = 8 and eingabe = Chr(13) THEN
      spiel_option()
      end if

      if x = 9 and eingabe = Chr(13) THEN
      end
      end if

      if x = 10 Then x = 7
      if x = 6 Then  x = 9
     

      SCREENLOCK
      CLS

     
 
     

      print " "
      print " "
      print " "
      print " "
      print " "
      print " "
      print "              Spiel Starten            "
      print "              Spiel Option             "
      print "              Spiel Beenden            "
     
      Locate x,y
      print "->"
     
      SCREENUNLOCK
     
loop until eingabe="27"
sleep

end sub

sub spiel_laden()
    CLS
    Print "Spiel Starten"
    Sleep(1000)
    printMenu()
end sub


sub spiel_option()
    CLS
    Print "option"
    Sleep(1000)
    printMenu()
end sub
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 28.04.2010, 23:24    Titel: Antworten mit Zitat

neutral schön und gut aber mein compiler mekkert jetzt seit ich SUB
reingebaut habe folgende meldung:


Code:

bild  = IMAGECREATE(breite, hoehe)      - IMPLICIT CONVERSION

BLOAD "title.bmp", bild  - PASSING SCARLA AS POINTER AT PARAMETER 2
                                   
PUT(x_bmp, y_bmp), bild  - EXPECTED IDENDIFIER



peinlich und jetzt ???

und warum ist goto so "PFUI" ?
_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 28.04.2010, 23:33    Titel: Antworten mit Zitat

Dein Fehler liegt wahrscheinlich an einem fehlenden
Code:
dim bild as any ptr

oder zumindest ist dieser PTR nicht in der SUB bekannt. Genaueres kann ich ohne Code aber nicht sagen.

Zu GOTO liest du am besten mal die unzähligen Diskussionen im Netz. grinsen Zum Einstieg empfehle ich dies und das.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 29.04.2010, 00:15    Titel: Antworten mit Zitat

peinlich also irgentiw macht das langsam kein spass mehr -
sub ist ja vool umständlich, je mehr ich da ändere jemehr fehlemeldungen bekomm ich - google spuckt nur sub aus , was das ist und so


wie bekomm ich denn jetzt ganz einfach hin, dass der ein BMP in ein SUB auanzeigt wird ???

ich brauch das halt alles für mein menü - mit goto hat alles gefuntz hier der code für bmp

code tuts nicht !!!

Code:


DECLARE SUB zeige_bild()
DIM AS ANY PTR bild
DIM AS INTEGER breite, hoehe, x, y
DIM AS STRING eingabe

SCREEN 18, 32

breite = 25
hoehe = 25

bild  = IMAGECREATE(breite, hoehe)

BLOAD "picture.bmp", bild
BLOAD "picture2.bmp", bild2

PUT(x, y), bild
zeige_bild()


SUB zeige_bild()

DO
   eingabe = INKEY
   IF eingabe <> "" THEN

   SELECT CASE eingabe

     CASE CHR(27)
     IMAGEDESTROY(bild)
     END
     END SELCT
     
     SCREENLOCK 'vermeidet flackern
     CLS
     PUT(x, y), bild
     SCREENUNLOCK
   
 SLEEP 1
LOOP

END SUB



danke für jede andwort die hilft dass der code ausführbar ist
_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4699
Wohnort: ~/

BeitragVerfasst am: 29.04.2010, 06:22    Titel: Antworten mit Zitat

Wegen Zeitmangels ungetestet:
Code:
DECLARE SUB zeige_bild()
DIM SHARED AS ANY PTR bild
DIM SHARED AS INTEGER breite, hoehe, x, y

SCREEN 18, 32

breite = 25
hoehe = 25

bild  = IMAGECREATE(breite, hoehe)

BLOAD "picture.bmp", bild
BLOAD "picture2.bmp", bild2

PUT(x, y), bild
zeige_bild()

IMAGEDESTROY bild
' Programmende

SUB zeige_bild()

DIM AS STRING eingabe
DO
   eingabe = INKEY
   IF eingabe <> "" THEN
     SELECT CASE eingabe

       CASE CHR(27)
       EXIT SUB
     END SELECT
     
     SCREENLOCK 'vermeidet flackern
     CLS
     PUT(x, y), bild
     SCREENUNLOCK
   END IF
   SLEEP 1
LOOP

END SUB

_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick-Ratz



Anmeldungsdatum: 22.12.2008
Beiträge: 34

BeitragVerfasst am: 29.04.2010, 09:58    Titel: Antworten mit Zitat

cool SUPER ! der Code laüft - ich habs jetzt verstanden.
Das geilste ist ja, wenn man keine BMP datei hat dann zeigt
der ein pinkes Bild an - aber der Fehler lag bei mir happy
danke nochmals für alles - wusste garnicht was alles mit FB
möglich ist
so jetzt will ich erstmal nach dem bösen GOTO googeln lachen


danke an allen Foren-mitglieder die so tolle beiträge geleistet haben
_________________
Wie kastriert man Windows-User?
Man schneidet das Mauskabel durch...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz