 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 27.11.2004, 13:35 Titel: Tastaturabfrage |
|
|
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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 27.11.2004, 13:45 Titel: |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.11.2004, 13:53 Titel: |
|
|
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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 27.11.2004, 20:08 Titel: Tasten |
|
|
Was wäre dann Escape?
Und ist demzufolge die 10 F10? |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 28.11.2004, 18:04 Titel: Frage |
|
|
Welche Nummern tragen die Hoch/Runter Rechts/Links Tasten? |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 28.11.2004, 18:53 Titel: Antwort? |
|
|
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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 28.11.2004, 20:10 Titel: Noch was |
|
|
Wenn es wichtig ist: das ist der Sub LV1 vom Hauptprogramm "Spiel" |
|
Nach oben |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 29.11.2004, 11:23 Titel: Antworten |
|
|
Kann bitte jemand antworten? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 29.11.2004, 13:28 Titel: |
|
|
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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 29.11.2004, 15:19 Titel: Naja |
|
|
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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 29.11.2004, 22:28 Titel: Programm |
|
|
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 |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 29.11.2004, 23:08 Titel: |
|
|
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 |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.11.2004, 12:48 Titel: |
|
|
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 ).. 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
Also viel glück damit.  _________________ "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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 30.11.2004, 17:24 Titel: Nee |
|
|
Danke erstmal an alle die versucht haben mir zu helfen!
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.11.2004, 20:34 Titel: |
|
|
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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 30.11.2004, 21:01 Titel: ??? |
|
|
Echt? Kann das dran liegen das ich XP habe??
Oder ist die Notebook tastatur anders?
Kannst du das Ding bewegen? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.11.2004, 21:09 Titel: |
|
|
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 |
|
 |
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 30.11.2004, 21:18 Titel: Bewegeb |
|
|
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 |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.11.2004, 21:20 Titel: |
|
|
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 |
|
 |
|
|
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.
|
|