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:

Tastaturabfrage
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 27.11.2004, 13:35    Titel: Tastaturabfrage Antworten mit Zitat

Hi!

Ich habe im QB Monster FAQ gelesen, das man die Langzeitmotivation eines Spieles durch die Abrruchtmöglichkeit eines Intros berbessern kann. Im Monster FAQ steht leider lediglich wie man das mit einer Schleife macht. Geht es nicht irgendwie automatisch mit "On Key(n) Gosub Zeilenmarke" oder so, das mit der Schleife möchte ich nicht, da ich immer mit Goto und so Arbeite und deshalb Gosub ja spitze wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 27.11.2004, 13:45    Titel: Antworten mit Zitat

Das mit dem ON KEY(n) geht nur mit bestimmten Tasten. Eine Liste gibt's in der Direkthilfe zur KEY-Anweisung. Die F1-Taste hat z.B. die Nr. 1. Zuerst wird die Taste aktiviert und dann eine Sprungmarke zugewiesen.

KEY (1) ON
ON KEY (1) GOSUB hiergehtsraus

Gibst du das am Anfang an, wird während das Programmablaufs jederzeit nach hiergehtsraus verzweigt, wenn du F1 drückst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.11.2004, 13:53    Titel: Antworten mit Zitat

ON KEY geht mit allen Tasten, man muss die nur Recht umständlich definieren...

Hatte mal ein Snakespiel geschrieben (leider wegformatiert), das funktionierte komplett mit ON KEY.. Das geht schon.
ging glaub ich irgendwie so KEY n, CHR$(0)+CHR$(ebbes) oder so. Das erste CHR$(0) sagt aus, dass es eine Tastenkombination mit keiner weiteren Taste als der 2. ist. wenn man da sagt chr$(1) ist das glaub ich dann shift+ebbes, bei 2 strg, 3 shift und strg, 4 alt, 5 alt+shift, 6 alt+strg, 7 alles drei usw...
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 27.11.2004, 20:08    Titel: Tasten Antworten mit Zitat

Was wäre dann Escape?

Und ist demzufolge die 10 F10?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 28.11.2004, 18:04    Titel: Frage Antworten mit Zitat

Welche Nummern tragen die Hoch/Runter Rechts/Links Tasten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 28.11.2004, 18:53    Titel: Antwort? Antworten mit Zitat

Antwortet mir noch wer?

Habs rausgefunden mit der Hilfe=)

Neue Frage:

wieso klappt das nicht:

Code:

beendet = 0
 x = 100
 y = 100
 KEY(10) ON
 KEY(11) ON
 KEY(12) ON
 KEY(13) ON
 KEY(14) ON
 ON KEY(11) GOSUB Hoch
 ON KEY(12) GOSUB Links
 ON KEY(13) GOSUB rechts
 ON KEY(14) GOSUB Runter
 ON PLAY(1) GOSUB Endlos
 PLAY ON
 Musik$ = "RM cdefgfedca2"
 DO UNTIL beendet = 1
  y = y + 1
  SCREEN 9, , 0, 1
  CLS
  CIRCLE (x, y), 5
  SCREEN 9, , 1, 0
  CLS
  CIRCLE (x, y), 5

 LOOP
Hoch:
y = y - 2
RETURN
Runter:
y = y + 2
RETURN
Links:
x = x - 2
RETURN
rechts:
x = x + 2
RETURN
Endlos:
PLAY Musik$
RETURN
END SUB


Kommt bei On... Marke nicht definiert(bei der Tastatur).
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 28.11.2004, 20:10    Titel: Noch was Antworten mit Zitat

Wenn es wichtig ist: das ist der Sub LV1 vom Hauptprogramm "Spiel"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 29.11.2004, 11:23    Titel: Antworten Antworten mit Zitat

Kann bitte jemand antworten?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 29.11.2004, 13:28    Titel: Antworten mit Zitat

Reihenfolge beachten:
1. ON KEY n GOSUB blabla
2. KEY n ON
...
3. KEY n OFF
Syntax stimmt jetzt ned aber sorum musstes machen.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 29.11.2004, 15:19    Titel: Naja Antworten mit Zitat

Klappt nicht. Wenns Sub1 ist, dann kommt nach wie vor Marke nicht definiert, wenn ichs ausschneide dann kann ich alle Richtungstasten drücken und es passiert nichts. Der neue Code:

Code:

 beendet = 0
 x = 100
 y = 100
 ON KEY(11) GOSUB Hoch
 ON KEY(12) GOSUB Links
 ON KEY(13) GOSUB rechts
 ON KEY(14) GOSUB Runter
 ON PLAY(1) GOSUB endlos
 PLAY ON
 KEY(11) ON
 KEY(12) ON
 KEY(13) ON
 KEY(14) ON
 Musik$ = "RM cdefgfedca2"
 DO UNTIL beendet = 1
  y = y + 1
  SCREEN 9, , 0, 1
  CLS
  CIRCLE (x, y), 5
  SCREEN 9, , 1, 0
  CLS
  CIRCLE (x, y), 5
 LOOP
 KEY(10) OFF
 KEY(11) OFF
 KEY(12) OFF
 KEY(13) OFF
Hoch:
 y = y - 2
 RETURN
Runter:
 y = y + 2
 RETURN
Links:
 x = x - 2
 RETURN
rechts:
 x = x + 2
 RETURN
endlos:
 PLAY Musik$
 RETURN
 KEY(11) OFF
 KEY(12) OFF
 KEY(13) OFF
 KEY(14) OFF
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 29.11.2004, 22:28    Titel: Programm Antworten mit Zitat

Hier mal das vollständige Programm, in der Hoffnung das mir dann einer helfen kann. Ich weiß aber nicht ob das der einzige Fehler ist, so butterweich annimiert siehts net aus.

Code:

DECLARE SUB lv1 ()
Intro:
SCREEN 9
CLS
KEY(10) ON
ON KEY(10) GOSUB HM
LOCATE 15, 15
COLOR 1
PRINT "DGR pr„sentiert"
PLAY "c3d2"
SLEEP 1
CLS
LOCATE 15, 15
PRINT "Ein Spiel von David Georg Reichelt"
PLAY "e3f2"
SLEEP 1
CLS
COLOR 4
LOCATE 15, 15
PRINT "I---------------I"
LOCATE 16, 15
PRINT "IDer groáe KriegI"
LOCATE 17, 15
PRINT "I---------------I"
CIRCLE (180, 200), 100
CIRCLE (180, 200), 110
CIRCLE (180, 200), 120
CIRCLE (180, 200), 130
CIRCLE (180, 200), 140
CIRCLE (180, 200), 150
PLAY "ga"
PLAY ">"
PLAY "cdef2"
PLAY "<"
SLEEP 1
CLS
COLOR 1
PRINT "           Hergestellt von David Georg Reichelt"
PRINT "Ich w?rde mich ?ber eine R?ckmeldung an davidgeorg_reichelt@yahoo.de freuen"
PRINT "                oder ?ber eventuelle Bugs."
PRINT "                     Viel Spaá!                           "
SLEEP 3
GOTO Intro
HM:
KEY(10) OFF
HM2:
SCREEN 9, , 1, 0
CLS
PRINT "   Der groáe Krieg   "
PRINT " Ein Spiel von D.G. Reichelt"
PRINT "(1)-Level 1 starten"
PRINT "(5)-Ende"
Eing$ = INKEY$
IF Eing$ = "5" THEN ende = 2
SCREEN 9, , 0, 1
CLS
PRINT "   Der groáe Krieg   "
PRINT " Ein Spiel von D.G. Reichelt"
PRINT "(1)-Level 1 starten"
PRINT "(5)-Ende"
Eing$ = INKEY$
IF Eing$ = "1" THEN CALL lv1
IF Eing$ = "5" THEN ende = 2
IF ende = 0 THEN GOTO HM2
GOTO endedesprog
endlos:
 PLAY Musik$
 RETURN
Hoch:
  y = y - 2
RETURN
runter:
  y = y + 2
RETURN
Links:
  x = x - 2
RETURN
rechts:
  x = x + 2
RETURN

endedesprog:

SUB lv1
 CLS
 SLEEP
 beendet = 0
 x = 100
 y = 100
 ON PLAY(1) GOSUB endlos
 ON KEY(11) GOSUB Hoch
 ON KEY(12) GOSUB Links
 ON KEY(13) GOSUB rechts
 ON KEY(14) GOSUB runter
 KEY(11) ON
 KEY(12) ON
 KEY(13) ON
 KEY(14) ON
 PLAY ON
 Musik$ = "RM cdefgfedca2"
 sc = 100
l1w:
 DO UNTIL beendet = 1
  PRINT "Schilde: " + STR$(sc)
  IF y < 0 THEN
   y = 0
   sc = sc - 1
  END IF
  IF sc < 0 THEN beendet = 1
  y = y + 1
  SCREEN 9, , 0, 1
  CLS
  CIRCLE (x, y), 5
  SCREEN 9, , 1, 0
  CLS
  CIRCLE (x, y), 5
 LOOP
 KEY(11) OFF
 KEY(12) OFF
 KEY(13) OFF
 KEY(14) OFF
END SUB
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 29.11.2004, 23:08    Titel: Antworten mit Zitat

Hallo

Wie man die Richtungstasten etc. abfragen kann, ist mindesten schon 100 mal im alten, in diesem, in der Monster-FAQ auf qbasic.de usw. erklärt worden, aber na gut. Also ich würde diesen ganzen KEY-Käse weglassen und es irgendwie so machen:

Code:

...
DO
DO
taste$ = INKEY$
LOOP WHILE taste$ = ""
IF taste$ = CHR$(0) + "H" THEN GOSUB hoch
IF taste$ = CHR$(0) + "P" THEN GOSUB runter
IF taste$ = CHR$(0) + "M" THEN GOSUB rechts
IF taste$ = CHR$(0) + "K" THEN GOSUB links
LOOP WHILE beendet = 0
...


Diese Schleife musst du während des Spiels immer wieder durchlaufen lassen. Das in deinen Code einzubauen fand ich etwas kompliziert, weil ich keinen Plan habe, was man da eigentlich spielen soll. Bei mir zuckt nur irgendwie ein Kreis nach unten (nachdem ich erstmal das GOTO Intro entfernt hatte).

Gruss
Skilltronic
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 29.11.2004, 23:42    Titel: Antworten mit Zitat

Artikel zum Thema aus meiner Sammlung:

http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/Sondertasten.html
http://www.dreael.ch/Deutsch/BASIC-Knowhow-Ecke/EreignisSchleife.html

Und ansonsten noch die INKEY$-Codetabelle (Excel):

http://www.dreael.ch/QB/Tastenbelegung.xls
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 30.11.2004, 12:48    Titel: Antworten mit Zitat

Noch ne Anmerkung: ON KEY kann glaub ich nicht in Subs definiert werden, oder? Ich hab hier kein QB zum testen, Schul-rechner, aber das is glaub ich so.

Bei welcher ON marke kommt den der Fehler? Vielleicht bei PLAY ON? Dann liegts nämlich nicht an KEY...

Aber benutz lieber die Variante mit INKEY$

Nur um Skills Code mal n bisschen aufzuarbeiten:
@skill: qb kann auch SELECT CASE mit Strings falls du das nicht weißt (wenn dus weißt, warum benutzt dus dann nicht zwinkern ).. das ist ja leider bei allen Programmiersprachen so...
Also so mach ich das eigrntlich immer:
Code:
DO
 DO: t$=INKEY$: LOOP UNTIL t$ <> ""
 SELECT CASE LEFT$(t$,1)
 CASE 0
  SELECT CASE RIGHT$(t$,1)
  CASE "H": 'hoch-taste
  CASE "K": 'links
  CASE "M": 'rechts
  CASE "P": 'runter
  END SELECT
 CASE CHR$(13): 'enter
 CASE CHR$(27): 'escape
 END SELECT
LOOP

das sind so die Tasten die man am häufigsten braucht. Für n Spiel muss man das ganze etwas umschreiben. dann musst du aus
Code:
DO: t$=INKEY$: LOOP UNTIL t$<>""

einfach nur
Code:
t$ = INKEY$
IF t$ <> "" THEN
'hier den Select case-krempel
'und nach dem letzten END SELECT noch
END IF

dann funktioniert das.

Wenn du andere Tasten brauchst kannst du die die beinahe errechnen: Der Nummernblock ist Alphabetisch "nummeriert" von oben links nach unten rechts und wird in dem inneren SELECT CASE abgefragt (da wo oben hoch/runter... stehen. Achtung, Großschrift!):
Pos1 (7) =G
Pfeil Hoch (8 )=H
Bild auf (9) =I
(+) = J
Pfeil links(4) = K
(5) = L
Pfeil rechts(6) = M
Enter = N (bin ich mir nicht sicher)
Ende(1) = O
Pfeil runter(2 ) = P
Bild ab(3) = Q
Einfügen = R
Entfernen = S

dürfte stimmen..

die normalen Tasten kannste dann mit a bzw A, b oder B wie auch immer abfragen im äußeren SELECT CASE, also wie escape und Enter im beispiel, nur dass du für die kein CHR$ brauchst weil du die ja einfach schreiben kannst.. Die CHR$()-Codes findest du in der Onlinehilfe, sind aber etwas schwer zu verstehen. ein paar kenn ich noch so, das sind CHR$(8 ) = Backspace, 9 ist Tab, 13 Enter, 27 Escape etc.
Die Tasten sind in der Onlinehilfe abgekürzt. so steht bei Zeichen 8 zB als Abkürzung (BS) für BackSpace.. so kann mans verstehen wenn man drauf kommt zwinkern


Also viel glück damit. grinsen
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 30.11.2004, 17:24    Titel: Nee Antworten mit Zitat

Danke erstmal an alle die versucht haben mir zu helfen! grinsen

So, erstmal generell der erhoffte Nutzen des Programs:
Ein Shooter in dem der Kreis(den ich noch verfeinern werde) sich ständig nach unten bewegt, da sich der gesammt Bildschirm nach unten bewegt. Später sollen noch Gegner oder Hindernisse kommen, denen man ausweichen muss/die man Abschießen muss. Außerdem darf man nicht an den unteren Rand kommen.

On Key(x) Gosub Marke weil:
Ich habe das bereits ohne On Key(x) Gosub Marke versucht, das heißt wie im Monster FAQ angegeben(was ich übrigens auch habe, das kenn ich schon), aber da steht hallt die Inkey$ Lösung. Die ist in diesem Fall nicht gut, da ich ja mehrere Tasten brauche, die man gleichzeitig benutzt
(wär ja sinnlos wenn man sich nur in eine Richtung bewegen könnte).

Ja, es liegt an Key, da kommt der Fehler. Ich habe bereits den ganzen Code ausgeschnitten und im Hauptprogramm probiert, aber das funtkioniert nicht. Gosub geht auch in Unterprogrammen, aber irgendwie muss dann die Marke im Hauptprogramm sein.

Kann bitte jemand mir sagen wie es so geht?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 30.11.2004, 20:34    Titel: Antworten mit Zitat

also ich hab jetzt mal den letzten Code ausprobiert den du gepostet hast und bei mir funktioniert der ohne Probleme.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 30.11.2004, 21:01    Titel: ??? Antworten mit Zitat

Echt? Kann das dran liegen das ich XP habe??
Oder ist die Notebook tastatur anders?

Kannst du das Ding bewegen?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 30.11.2004, 21:09    Titel: Antworten mit Zitat

1. Ich hab auch XP. Daran liegts ned.
2. An deiner Tastatur liegts ned, versuchs ma mit frischem QBasic4.5
Auch wenn deine Tastatur anders ist, die KEY-Nummern hängen ja von der Software ab.
3. Nein, ich konnte den nicht bewegen. Die voreingestellten Keys gehen glaub ich nur aufm Nummernblock und das hab ich vorhin ned ausprobiert.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Progger_X
Mr. Lagg


Anmeldungsdatum: 24.11.2004
Beiträge: 784
Wohnort: Leipzig

BeitragVerfasst am: 30.11.2004, 21:18    Titel: Bewegeb Antworten mit Zitat

Na das Bewegen ist doch die Hauptsache! Errorfrei habschs auch mal irgendwie bekommen, mit Musik auch aber bewegt nicht?

Ich habe mir erst vor kurzem QB gehohlt, und hatte da immer Probleme mit dem Starten und der PIF datei, nochmal mach ich das nicht!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 30.11.2004, 21:20    Titel: Antworten mit Zitat

Probiers mal mit den Pfeiltasten auf dem NumPad mal mit und mal ohne NumLock..

das müssten die gewesen sein, dass hat ich nicht ausprobiert.. Aber deshalb ist das mist, das mit ON KEY zu machen. ON KEY ist nicht gut. Bau dei Programm auf die Inkey-Variante um, die ich da gepostet hab. Lohnt sich, glaubs mir.
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
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 QBasic. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
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