|
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: 30.11.2004, 22:01 Titel: Inkey |
|
|
Eben nicht! Dann bekomm ich einen String zurück, der entspricht einer Taste! |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 30.11.2004, 23:05 Titel: |
|
|
kopier einfach mein Beispiel, da sind die Strings alle richtig abgefangen.
wenn du noch welche brauchst frag mich im ICQ oder hier oder sonst was. bis auf Shift, alt, strg und die Windows-taste kann man so alles abfragen.
und es bleibt übersichtlich. _________________ "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: 01.12.2004, 14:53 Titel: Nee |
|
|
Mein Problem sind gar nicht die Strings, WASD könnte ich auch nehmen. Aber man muss sich doch in alle Richtungen gleichzeitig bewegen können!
Und wenn man 2 Tasten drück wird immer nur eine im String gespeichert. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 01.12.2004, 17:45 Titel: |
|
|
ach sooo!
dann schreib ich dir n anderes Programm:
Code: | DIM taste(128) AS INTEGER
DIM neutaste AS INTEGER
PRINT "Numlock ausschalten! Sonst rasten die Pfeiltasten ein!"
DO
neutaste = INP(&H60)
IF neutaste > 128 THEN taste(neutaste-128) = 0 ELSE taste(neutaste) = -1
...
...
IF taste(72) THEN blabla 'hoch
IF taste(75) THEN blabla 'links
IF taste(77) THEN blabla 'rechts
IF taste(80) THEN blabla 'runter
...
...
LOOP |
_________________ "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: 01.12.2004, 18:14 Titel: So?? |
|
|
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"
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 Progger_X"
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
endedesprog:
SUB lv1
DIM taste(128) AS INTEGER
DIM neutaste AS INTEGER
CLS
SLEEP
beendet = 0
x = 100
y = 100
ON PLAY(1) GOSUB endlos
PLAY ON
Musik$ = "RM cdefgfedca2"
sc = 100
DO UNTIL beendet = 1
neutaste = INP(&H60)
IF neutaste > 128 THEN taste(neutaste - 128) = 0 ELSE taste(neutaste) = -1
IF taste(72) THEN y = y - 2'hoch
IF taste(75) THEN x = x - 2'links
IF taste(77) THEN x = x + 2'rechts
IF taste(80) THEN y = y + 2'runter
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
END SUB
|
Danke erstmal, geht schon wesentlich besser als zuvor!!
Meintest du das so? Weil wegen dem ... habsch keine Ahnung was hin soll, ich bin noch net so gut, aber mit irgend was muss man ja anfangen, da habsch gedacht so nen 2D Shooter habsch ja schon mal gemacht... .
Wie kann man das wegbekommen das die Tasten ewig gespeichert werden und wenn man 1 mal klickt das noch ne Ewigkeit weiter fliegt?
Zuletzt bearbeitet von Progger_X am 08.08.2018, 10:31, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 01.12.2004, 20:55 Titel: |
|
|
So, wieder einmal etwas Strg+C/Strg+V in ein NOTEPAD gemacht. ;-)
Vielleicht meine Tipps dazu: Bei den heutigen Maschinen sollte man bei Animationen eher mit PCOPY statt wechselnder Bildschirmseite arbeiten. Grund: Viele Grafikkarten verarbeiten den Wechsel erst beim VBlank => der CLS-Befehl für das bereits nächste Bild kommt dann zu schnell. Die Ursache ist, dass QBasic bei SCREEN mit gesetztem 4. Parameter (V-Seite% gemäss Hilfe) das Programm nicht solange anhält, bis die Grafikkarte nur noch die neu gesetzte Videoseite verarbeitet.
Und ansonsten müsste noch ein passendes Leveldatenkonzept her, denn 100 SUB-Routinen lv1() bis lv100() erstellen macht das Programm überhaupt nicht wartungsfreundlich. Du musst also unbedingt auch wie unter
http://forum.qbasic.at/viewtopic.php?p=1605#1605
gezeigt eine Struktur definieren können. Nachdem es ein Ballerspiel geben soll, könnte ich mir vorstellen, dass Du eine Hintergrundlandschaft aus Kachel-Grafikelemente brauchst. Daneben gibt es vielleicht noch Feinde, die Du auf bestimmte Startpositionen platzieren möchtest. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 01.12.2004, 21:33 Titel: Texteditor |
|
|
Ich habe es mit Texteditor zusammenkopiert und dann die Textdatei mit QB geöffnet! Einfügen geht bei mir irgendwie nicht... .
Aber das hilft doch nicht!
PCOPY ist schön und gut, aber abgesehen davon das ich den Befehl bis heute nicht kannte ist das ja nicht das Problem. Vielleicht sollte ich das eindeutiger sagen. Die Tasten funktionieren noch nicht!!! Ich kann mich nicht richtig bewegen(und NUM ist nicht an), wenn ich in eine Richtung klicke gehe ich da ewig hin und ich kann auch nicht in 2 Richtungen gleichzeitig gehen. Also was habe ich falsch gemacht und wie müsste es richtig sein? |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 01.12.2004, 22:24 Titel: |
|
|
nur die Pfeiltasten werden gespeichert. Und das auch nur, wenn NumLock an ist! machs aus und es geht. _________________ "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: 01.12.2004, 22:58 Titel: |
|
|
Ich habe es an und aus Probiert!!!!
Wie sind alle Tasten? Was wäre WASD?(nur als Test) |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 01.12.2004, 23:53 Titel: |
|
|
Habe wieder einmal das alte Beispiel unter
http://www.dreael.ch/QB/JUMPGAME.ZIP
hervorgegraben, wo ich seinerzeit ebenfalls einmal mit der INP(&H60)-Methode etwas experimentiert hatte. Erfahrung dazu: Um eine einigermassen zuverlässige Abfrage zu erhalten, muss man noch mit INKEY$ den Tastaturpuffer ständig leeren, sonst füllt es diesen ziemlich rasch auf und die Abfrage funktioniert nicht mehr ganz korrekt. Man merkt es aufgrund des ständigen "Tastaturpuffer voll!"-Piepsen eigentlich sofort, wenn man dies vergessen hat...
Ausserdem hat sich noch herausgestellt, dass das Ganze nur unter reinem MS-DOS 6.22 zuverlässig läuft, d.h. in einer NTVDM von Windows XP läuft INP(&H60) recht harzig. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 02.12.2004, 18:41 Titel: Geht nicht |
|
|
Ich kann mir in letzter Zeit leider nichts downloaden, es kommt nur noch ein Fenster mit den downgeloadeten Dateien und dann kann ich die nicht auf den Computer bekommen(Sober.I???). Deshalb konnte ich dein Spiel auch nicht begutachten.
Jedenfalls habe ich deinen INKEY$ Rat befolgt, und es ging schon besser. Dann habe ich noch ein bischen rumprobiert, und herausgekommen ist das ich die Tasten immer noch gleich 0 setzten muss. Eine Frage hätte ich allerdings dazu noch. Wieso reicht es einmal
Code: |
IF neutaste > 128 THEN
taste(neutaste - 128) = 0
ELSE
taste(neutaste) = -1
endif
|
zu benutzen? Müsste das nicht öfter gemacht werden, fals 3 oder mehr Tasten gedrückt sind und der Wert dann über 2*128 steigt?
Und wie bekommt man den Fehler weg, das man nicht sehr lange in eine Richtung fliegen kann?(Danach ruckelt es kurz und der Kreis bewegt sich immer hoch und runter).
Hier nochmal der Code:
Code: |
SUB lv1
DIM taste(128) AS INTEGER
DIM neutaste AS INTEGER
CLS
SLEEP
beendet = 0
x = 100
y = 100
ON PLAY(1) GOSUB endlos
PLAY ON
Musik$ = "RM cdefgfedca2"
sc = 100
DO UNTIL beendet = 1
neutaste = INP(&H60)
IF neutaste > 128 THEN taste(neutaste - 128) = 0 ELSE taste(neutaste) = -1
IF taste(72) THEN y = y - 3'hoch
IF taste(75) THEN x = x - 3'links
IF taste(77) THEN x = x + 3'rechts
IF taste(80) THEN y = y + 3'runter
taste(72) = 0
taste(75) = 0
taste(77) = 0
taste(80) = 0
NBelegtetaste$ = INKEY$
IF y < 0 THEN
y = 0
sc = sc - 1
END IF
IF x < 0 THEN
x = 0
sc = sc - 1
END IF
IF sc < 0 THEN beendet = 1
y = y + 1
CLS
SCREEN 9, , 0, 1
CLS
CIRCLE (x, y), 5
PRINT "Schilde: " + STR$(sc)
SCREEN 9, , 1, 0
CIRCLE (x, y), 5
PRINT "Schilde: " + STR$(sc)
LOOP
END SUB
|
|
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 02.12.2004, 20:57 Titel: |
|
|
das ist ganz einfach.. neutaste ist eben nur die neue Taste. die Abfrage erfolgt mit der Tabelle taste() wo alle aktiven Tasten mit -1 gespeichert sind. neutaste ist nur für änderungen der Speicherstände in den Tabellen.
Die Werte der Tabelle werden alle abgefragt -> mehrere Tasten _________________ "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: 02.12.2004, 21:15 Titel: Fehler |
|
|
Einen Fehler gibts da noch: wenn ich lange in eine Richtung drücke beginnt es nicht mehr zu gehen. Woran liegt das, und wie kann ich es ausschallten??
Wieso funtkioniert der Code wenn ich alle Tasten wieder gleich 0 setzte, obwohl der Sinn eigentlich die Erfassung in der Tabelle ist?
Kann es sein das es in der Tabelle kein Zurücksetzten gibt? |
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 02.12.2004, 21:45 Titel: Aktualisierung |
|
|
Code: |
SUB lv1
DIM taste(128) AS INTEGER
DIM neutaste AS INTEGER
CLS
SLEEP
beendet = 0
x = 100
y = 100
ON PLAY(1) GOSUB endlos
PLAY ON
Musik$ = "RM cdefgfedca2"
sc = 100
DO UNTIL beendet = 1
NBelegtetaste$ = INKEY$
NBelegtetaste$ = ""
neutaste = INP(&H60)
NBelegtetaste$ = INKEY$
NBelegtetaste$ = ""
IF neutaste > 128 THEN
taste(neutaste - 128) = 0
ELSE
taste(neutaste) = -1
END IF
IF taste(17) THEN y = y - 3'hoch
IF taste(30) THEN x = x - 3'links
IF taste(32) THEN x = x + 3'rechts
IF taste(31) THEN y = y + 3'runter
' taste(72) = 0
' taste(75) = 0
' taste(77) = 0
' taste(80) = 0
IF y < 0 THEN
y = 0
sc = sc - 1
END IF
IF x < 0 THEN
x = 0
sc = sc - 1
END IF
IF sc < 0 THEN beendet = 1
y = y + 1
CLS
SCREEN 9, , 0, 1
CLS
CIRCLE (x, y), 5
PRINT "Schilde: " + STR$(sc)
SCREEN 9, , 1, 0
CIRCLE (x, y), 5
PRINT "Schilde: " + STR$(sc)
LOOP
END SUB
|
So weit bin ich!
Fehler: wenn ich eine taste, z.b. a klicke und dann eine andere und danach a loslasse ist es so als wären beide gedrückt! |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 02.12.2004, 21:53 Titel: |
|
|
Code: | DIM taste(128) AS INTEGER 'Tastentabelle erzeugen
PRINT "NumLock ausschalten (nur wenns an ist ;) )!"
PRINT "In 3 Sekunden gehts los!"
SLEEP 3 'Kurz warten
SCREEN 9, , 0, 1 'Bildschirm initialisieren
DO
y = y + 1 'Ball f„llt
neutaste = INP(&H60) 'Tastentabelle aktualisieren
IF neutaste < 128 THEN taste(neutaste) = -1 ELSE taste(neutaste - 128) = 0
'eingabe verarbeiten
IF taste(72) THEN y = y - 3 'hoch
IF taste(75) THEN x = x - 3 'links
IF taste(77) THEN x = x + 3 'rechts
IF taste(78) THEN y = y + 3 'runter
CLS 'Bildschirm leeren
CIRCLE (x, y), 10, 15 'Kreis zeichnen
SCREEN 9, , 1 - seite, seite 'Pageflipping
seite = 1 - seite
LOOP UNTIL INKEY$ = CHR$(27) 'Tastaturpuffer leeren / ESC->beenden |
So funktionierts bei mir wenn NumLock AUS ist, nicht einfach umschalten!
Was du noch selber machen darfst ist Musik und des Schilde-zeugs.. _________________ "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: 03.12.2004, 19:44 Titel: funktioniert |
|
|
Danke, soweit funktionierts. Ich habe es ein bischen verändert und noch versucht Sterne hinzuzufügen, aber die werden nicht gezeigt. Der Code:
Code: |
DIM taste(128) AS INTEGER 'Tastentabelle erzeugen
DIM stern(10)
DIM stern2(10)
PRINT "NumLock ausschalten (nur wenns an ist ;) )!"
PRINT "In 3 Sekunden gehts los!"
SLEEP 3 'Kurz warten
SCREEN 9, , 0, 1 'Bildschirm initialisieren
zahler = 0
DO
y = y + 1
neutaste = INP(&H60)
IF neutaste < 128 THEN
taste(neutaste) = -1
ELSE
taste(neutaste - 128) = 0
END IF
IF taste(72) THEN
y = y - 3
END IF
IF taste(75) THEN
x = x - 3
END IF
IF taste(77) THEN
x = x + 3
END IF
IF taste(80) THEN
y = y + 3
END IF
CLS 'Bildschirm leeren
COLOR 1
CIRCLE (x, y), 10, 15
COLOR YELLOW
z2 = 1
DO
CIRCLE (stern(z2), stern2(z2)), 5
stern(z2) = stern(z2) - 1
IF stern(z2) < 0 THEN
stern(z2) = 500 + INT(RND * 100)
stern2(z2) = INT(RND * 200)
END IF
z2 = z2 + 1
LOOP UNTIL z2 > 9
SCREEN 9, , 1 - seite, seite
seite = 1 - seite
zahler = zahler + 1
IF zahler > 100 THEN
zahler = 1
taste(72) = 0
taste(75) = 0
taste(77) = 0
taste(80) = 0
END IF
LOOP UNTIL INKEY$ = CHR$(27)
|
|
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 04.12.2004, 21:52 Titel: Helfen |
|
|
Kann mir bitte mal jemand helfen? |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 04.12.2004, 23:28 Titel: |
|
|
Hallo
Vielleicht kannst du mit diesem Ansatz was anfangen:
http://www.skilltronics.de/runterlader/SPACE2.BAS
Gedreht wird mit links und rechts, beschleunigt mit der nach unten-Taste, Ende mit Escape. Funktioniert (zumindest bei mir unter XP-Pro) mit beiden Pfeiltastenarten, aber besser sind die im Ziffernblock. Bei den anderen wird manchmal das Loslassen vom Programm nicht bemerkt. Die im Nummernblock gehen übrigens sowohl bei ein- als auch bei ausgeschaltetem NumLock.
Gruss
Skilltronic |
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 05.12.2004, 12:43 Titel: Ziffernblock |
|
|
Der Ziffernblock ist bei nem Laptop recht schwer zu bedienen, da das auf den anderen Tasten drauf ist und hallt bei numlock an ist.
Ich hab XP Home Edition(Service Pack 2), da gehts nich richtig. Aber ich denke es liegt auch viel an der Laptop Tastatur. Dücke ich ein bischen länger auf eine Taste, bleibt sie eingespeichert, etwa 5 sekunden lang, erst dann ist sie nicht mehr gespeichert.
Ist das INP(96) was anderes als INP(&H96), und ließt es die Daten anders aus? Sonst könnte ich ja einfach beide verlgeichen.
Ich habe mal die anderen Beiträge aus dem MonsterFAQ gelesen, da stand was von der Library DKey. Ich finde allerdings die Website nicht.
Gibt es die Library noch irgendwo? |
|
Nach oben |
|
|
Progger_X Mr. Lagg
Anmeldungsdatum: 24.11.2004 Beiträge: 784 Wohnort: Leipzig
|
Verfasst am: 05.12.2004, 12:46 Titel: noch etwas |
|
|
Wenn ich länger auf eine Taste gedrückt habe, und sie eingespeichert ist obwohl ich loßlasse, gibt es eine Möglichkeit den Bug zu beseitigen, und zwar indem ich einfach nochmal draufdrücke.
Könnte es sein das nur der Rückgabewert 0 nicht gekommen ist, und deshalb bei längerem Drücken die Taste bleibt? Wie lässt sich das bekämpfen? |
|
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.
|
|