Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Näppäinhandleri

Sivun loppuun

tomaattigeeni [18.06.2002 13:46:17]

#

Näppäinhandleri, eli lukee montaa näppäintä samaan aikaan. Ainaki viis pysty olla samaan aikaan pohjassa.
Toimii näin:
IF nap(INP arvo) = 1 THEN tee jotain ELSE tee jotain muuta.
Näppäimen INP -arvo on aina 1 tai 0 (pohjassa tai ylhäällä.)

Mukaan laitoin myös pienen ohjelman, joka kertoo näppäinten INP -arvon, jota tarvit varmasti käyttäessäsi näppishandleria. Oon koittanu kommentoida koodia, mutta se on sotkusempi ku pöytä, koittakaa saada selvää :)

handleri.bas

' Tehty ohjelmointiputkaan by Tomageeni joskus
' Hyödyllinen, lähes pakollinen actipeleissä, jos joku QB:llä sellasen värkkää.
' Normaalit nuolinäppäimet toimii sekavasti (jää pohjaan), joten ite
' käytän "numeronuolia"
' jotka on siinä nuolien oikeella puolella. HUOM. Numlock oltava päällä,
' muuten neki toimii huonosti.
' Idean, miten juttu toimii sain Basgurusta.

DEF SEG = &H40      ' Ilman tätä ohjelma lukee näppäimiä tökkien
CLS   ' Se joka ei tiiä mitä tää tekee voi hankkia uuden elämän ;)
DIM nap(1 TO 128) ' Luodaan näppäintaulukko
DO     ' Ilmeisesti systeemi pitää aina laittaa silmukan sisään.
a = INP(&H60)   ' Näppiksen sisääntulo portti ja tarvii aina silmukkaan, jossa handleria käytetää

IF a < 128 THEN nap(a) = 1 ELSE nap(a - 128) = 0  ' Tää on se "handlaus"juttu :)
POKE &H1A, PEEK(&H1C)  ' Ilman tätä qb luulee nappie välillä jäävän pohjaan

IF nap(1) = 1 THEN END     ' Escistä loppuu. Alla pari muutakin esimerkkiä, ei
' kaipane selitystä

IF nap(72) = 1 THEN LOCATE 1, 1: PRINT "Ylöspäin nuoli pohjassa" ELSE PRINT "                          "
IF nap(75) = 1 THEN LOCATE 2, 1: PRINT "Vasemmalle nuoli pohjassa" ELSE PRINT "                          "
IF nap(77) = 1 THEN LOCATE 3, 1: PRINT "Oikeelle nuoli pohjassa" ELSE PRINT "                          "
IF nap(80) = 1 THEN LOCATE 4, 1: PRINT "Alaspäin nuoli pohjassa" ELSE PRINT "                          "
' Eli homma toimii näin: IF nap(INP arvo) = 1 then tee jotain
' Tässä voi käyttää mm. Ctrl, Shift ym. erikoisnappeja



LOOP

inp.bas

' Kertoo näppäimen INP -arvon, tarpeellinen jos käytät näppäinhandleria jossain
' Tehnyt Tomaattigeeni joskus yöllä
CLS
DO

a = INP(&H60)             ' näppäimistön sisääntuloportti
LOCATE 1, 1
PRINT a; " " ' tulostaa pohjassa olevan näppäimen INP -arvon
eski$ = INKEY$     ' Tää tarvitaan, että ohjelma lopetetaan jostain. Tässä tapauksessa escistä.
IF eski$ = CHR$(27) THEN PRINT "Escin INP arvo on yksi (1)": END

LOOP

tomaattigeeni [19.06.2002 03:15:42]

#

Huomasin muuten just, että Antti on jo tehny vähän samanlaisen vinkin. No samapa tuo.

Osmo Happonen [19.06.2002 10:34:06]

#

eikö tuon olisi oikeammin oltava:

LOCATE 1,1: IF nap(72) = 1 THEN PRINT "Ylöspäin nuoli pohjassa" ELSE PRINT " "
ja niin edelleen

ja jos tuota sitten ajelee samassaluupissa jonkun hienon jutun kanssa jonka piirto vie paljon aikaa se hukkaa kaikki näppäimien painlalukset mitä tuli kunnes ajetaan tuo kooodi

Dj Wolf [21.06.2002 21:12:52]

#

Hassua, kun tein itse melkeinpä samanlaisen ohjelman pari viikkoa sitten. Otin vain 'vähän' oppia Boot$ectorin näppishandlerista :)

tomaattigeeni [22.06.2002 02:17:00]

#

Mäpäs vedin ton päästä. Tosin olin aikasemmin niin paljon tuota BootSectorin näppishandleria käyttäny, että muistin sen melkeen kokonaan ulkoa :)

Dj Wolf [22.06.2002 20:00:01]

#

Teepäs seuraavaksi semmonen, jossa ne perusnuolinäppäimetkin toimii kunnolla.
Siinäpä haastetta kerrakseen :)

Paulus M [25.06.2002 14:49:00]

#

Miten tollainen tehään silloin kun pelaataan kaksin peliä esim. joku tappelu peli missä otellaan toisia vastaan.Toimiiko toi silloin?

(nimetön) [25.06.2002 15:16:06]

#

voika tolla tehdä kaksin pelin

tomaattigeeni [09.07.2002 03:49:04]

#

En oo koittanu tota kaksinpeliä mutta kyllä kai se onnistuu.

siansaksamies [05.08.2005 12:49:16]

#

Mulle riittäis yhden näppäimen kerrallaan käsittelevä koodinpätkä nimittäin väännään yhelle 1v lapselle "piip-piip"-softaa.

Tore [08.11.2005 17:24:07]

#

DO
SELECT CASE INKEY$
 CASE CHR$(97): c$ = "l32c": PLAY c$
 CASE CHR$(115): d$ = "l32d": PLAY d$
 CASE CHR$(32): EXIT DO
END SELECT
LOOP

se soittaa A näppylästä C:n ja S näppylästä D:n :)
aika kömpelö


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta