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
Huomasin muuten just, että Antti on jo tehny vähän samanlaisen vinkin. No samapa tuo.
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
Hassua, kun tein itse melkeinpä samanlaisen ohjelman pari viikkoa sitten. Otin vain 'vähän' oppia Boot$ectorin näppishandlerista :)
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 :)
Teepäs seuraavaksi semmonen, jossa ne perusnuolinäppäimetkin toimii kunnolla.
Siinäpä haastetta kerrakseen :)
Miten tollainen tehään silloin kun pelaataan kaksin peliä esim. joku tappelu peli missä otellaan toisia vastaan.Toimiiko toi silloin?
voika tolla tehdä kaksin pelin
En oo koittanu tota kaksinpeliä mutta kyllä kai se onnistuu.
Mulle riittäis yhden näppäimen kerrallaan käsittelevä koodinpätkä nimittäin väännään yhelle 1v lapselle "piip-piip"-softaa.
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ö
Aihe on jo aika vanha, joten et voi enää vastata siihen.