Tervehdys taas täältä nyyppälästä.
Olen jo kauan aikaa miettinyt oman roolipelin tekoa. Mutta nyt se on kaatumassa pieneen onkelmaan :P.
Siis ajattelin, että miten saisin @-merkin liikkumaan (se on siis hahmo.) Saattaa muuten olla tuttu liikkumis-tyyli ADOM peliä pelanneille.
Olen yrittänyt etsiä erilaisilta roolipeleille suunnatuilta sivuila, mutta turhaan.
Olette viimeinen toivoni.
- NyhvöLandian lippulaiva kuittaa
Hausta ei voi olla löytymättä aikasempaa keskustelua aiheesta.
Koodivinkeissäkin saattaa olla. En muista QB-vinkkejä.
Olikonhan joku locate(x,y) millä siirretään kursori johonkin kohtaan näytölle. eli liikuttaessa poistetaan merkki edellisestä kohdasta ja piirretään uuteen.
LOCATE y, x
Tosiaan määrittää, mihin kohtaan PRINT tulostaa tekstiä. Noita koordinatteja voit sitten vaihdella ja saada siten merkin liikkumaan.
No kyllä mä sentään ton tiesin :P. Mutta en oikein osaa liikuttaa sitä @-merkkiä.
Mutta muutenkin miten se LOCATE tulee, meneekö se jotenkin LOCATE y, x
x = 122
y = 122
PRINT "@"
Noinko?
Öh, siis ensin asetetaan ne koordiaatit x,y ja vasta sitten LOCATE:lla määrätään kirjoituskohta koordinaateiksi x,y. :)
Ja sitä merkkiä liikutat muttamalla niitä koordinaatteja x,y ja sitten piirrät sen merkin uudestaan kohtaan x,y.
No saattaisi toimia :|. Mutta kuinka PELAAJA voi ohjata sitä XD. En oikeen osaa kuten huomaatte.
Mutta silti veikaan INKEY$-jutun liittyvän asiaan.
Älkää ottako pultteja alituisesta kyselemisestäni.
-NyhvöLandian lippulaiva kuittaa
Ei oteta pulttia. Näihinän on kivan helppo vastata
Tässä on yksin kertainen vinkki kun alanuolta painaa niin menee alas.
X = 10:Y = 10 DO A$ = INKEY$ LOCATE Y, X: PRINT "@" IF A$ = CHR$(0) + "P" THEN X=X+1: LOCATE X-1, Y: PRINT " " 'Toi pee on ala nuolelle LOOP
No jos w,s,a ja d olisivat näppäimet, niin koodi olisi tällainen.
maxx = 100 maxy = 100 ukko$ = "@" DIM x(maxx) DIM y(maxy) x = 10 y = 10 DO LOCATE y,x PRINT ukko$ nappi$ = INKEY$ IF nappi$ = "w" THEN x = x - 1 LOOP UNTIL INKEY$ = CHR$(27)
Sorruin taas valmiin koodin antamiseen...
R.Nyrhinen kirjoitti:
Mutta kuinka PELAAJA voi ohjata sitä XD.
No kuinka nyt yleensä haluat sitä ohjattavan. Näppäimistöllä luultavasti, joten luet näppäimen INKEY$:llä ja INPUT$(1):llä, ja sitten tarkistat, että jos painettiin oikeaa nappia, niin sitten muutetaan koordinaatteja.
Latska: Mitä nuo taulukot tuossa oikein tekee? Tuossa on muuten typo: UNIL = UNTIL.
Noin mä olen aina yleensä tehnyt. En tiedä miksi. :) Siis tarkoitan taulukkoja. Tuo ainakin ekoissa räpellyksissä ehkäisi erroreita, joten se jäi voimaan.
En kyllä oikein usko, että tuo ehkäisisi mitään ongelmia, kun ei tuossa ole oikein mitään järkeäkään. :) Luot taulukot nimeltä x, ja y, etkä kuitenkaan koskaan käytä niitä? Eivät ne mitenkään liity noihin muuttujiin x ja y. Tietysti ne voit määritellä:
DIM x AS INTEGER DIM y AS INTEGER
Mutta ei tuossa taulukoita tarvita.
Öhöm. En haluaisi olla niuho, muttaa
maxx = 100 maxy = 100 ukko$ = "@" DIM x(maxx) DIM y(maxy) x = 10 y = 10 DO LOCATE y,x PRINT ukko$ nappi$ = INKEY$ IF nappi$ = "w" THEN x = x - 1 LOOP UNTIL INKEY$ = CHR$(27)
Tuossa kun painoin "w" niin @-merkki liikkui vasemmalle :P.
Mutta kyllä mä taas tänään opin jotain uutta. Kannatti elää tämäkin päivä.
-NyhvöLandian lippulaiva kuittaa (Viimeisen kerran tänään [3.11])
R.Nyrhinen kirjoitti:
Tuossa kun painoin "w" niin @-merkki liikkui vasemmalle :P
Koska sulla on locatessa x ja y väärinpäin.
Blaze: LOCATE:ssa ne tuleekin nimenomaan noin päin, ensin rivi, sitten sarkain. Vika on tuossa:
IF nappi$ = "w" THEN x = x - 1
Pitäisi olla tietysti:
IF nappi$ = "w" THEN y = y - 1
Ja R.Nyrhinen: Ota nuo taulukot pois, niitä ei tarvita.
hunajavohveli kirjoitti:
Blaze: LOCATE:ssa ne tuleekin nimenomaan noin päin, ensin rivi, sitten sarkain.
Pöh, QB on ihan tyhmää :P
No, PRINT:hän onkin tarkoitettu tekstin tulostamiseen, eikä @-merkkien piirtelyyn, joten on se kai ihan loogista olla noin päin. Kyllä minä ainakin, kun johonkin tekstin kohtaan pitää viitata, ilmoitan ensin rivin ja sitten sarakkeen.
Siis tekstitilaan liittyvissä aliohjelmissa ja funktioissa (LOCATE, SCREEN) ilmoitetaan ensin rivi ja sitten vasta sarake. Sitä vastoin grafiikkatilan aliohjelmissa ja funktioissa (PSET, PRESET, LINE, CIRCLE...) ilmoitetaan ensin x-koordinaatti ja vasta sen jälkeen y-koordinaatti.
Tekaisin muuten taannoin esimerkin tekstitilassa liikkuvasta hahmosta: https://www.ohjelmointiputka.net/keskustelu/6505-qb-näppis
No niin se taisi olla sitten tämän jutun loppu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.