Olin tekemässä kasinomanagerointipeliä, kun ilmeni kumma ongelma:
Alkuvalikossa liikutaan nuolilla. Mutta ainoastaan ensimmäinen nuolitarkistus toimii.
Koodi:
LOCATE y, x: PRINT cur$ IF INKEY$ = CHR$(0) + CHR$(80) AND y = 4 AND x = 26 THEN vari1 = 15: vari2 = 14: LOCATE y, x: PRINT tyhja$: y = 6: x = 15 'tämä toimii 'seuraavat taas eivät toimi IF INKEY$ = CHR$(0) + CHR$(80) AND y = 6 AND x = 15 THEN vari1 = 14: vari2 = 15: LOCATE y, x: PRINT tyhja$: y = 6: x = 26 IF INKEY$ = CHR$(0) + CHR$(72) AND y = 4 AND x = 26 THEN vari1 = 15: vari2 = 14: LOCATE y, x: PRINT tyhja$: y = 6: x = 15
Kiitos etukäteen.
Kanattaa kokeilla muuttaa muut ifit elseifeiksi.
Vika on siinä, että aina kun viitataan INKEY$-funktioon, luetaan uusi arvo näppäimistöstä.
Eli tee näin:
a$ = INKEY$ IF a$ = CHR$(0) + CHR$(80) THEN ... IF a$ = CHR$(0) + CHR$(72) THEN ...
Tällä tavalla joka IFissä käsitellään samaa arvoa.
Minä olen itse tehnyt alkuvalikot aina näin:
choice = 1 start: color 7 Print "VALIKKO v0.62" print if choice = 1 then color 2 else color 7 print "Valinta 1" if choice = 2 then color 2 else color 7 print "Valinta 2" if choice = 3 then color 2 else color 7 print "Valinta 3" do select case inkey$ case chr$(0) + "H" if choice > 1 then choice = choice - 1 goto start case chr$(0) + "P" if choice < 3 then choice = choice + 1 goto start end select loop
Tein nopeasti joten saattaapi olla hieman virheellinen, mutta kyllä tuon pitäisi toimia, ainakin minulla toimii moitteettomasti...
Jooh, CASE-lauseketta voi myös käyttää. Siihenhän pistetään INKEY$ vain kerran, ja samaa arvoa vertaillaan koko ajan. Tuon GOTOnkin voi muuten tuosta helposti korvata. Nuo "GOTO start"-rivit tuosta vain pois kokonaan, start-rivin tilalle "DO" ja aivan loppuun "LOOP"
Aihe on jo aika vanha, joten et voi enää vastata siihen.