Vanhasta tietokoneesta meni emolevy. Uutta konetta odotellessa pitää käyttää iskän työsuhdeläppäriä, johon juuri latasin qbasic 4.5:n. Ja se ei toimi. Väittää että PIF tiedosto ei kelpaa tai jotain vastaavaa, joten olisiko jollain ideaa, mikä voisi auttaa asiassa?? Kiitos etukäteen.
Kokeile poistaa PIF-tiedosto häiritsemästä, siellä saattaa lukea esim. edellisen käyttäjän hakemistojen nimiä, jotka eivät täsmää omiin hakemistoihisi. PIF-tiedosto on samanniminen kuin EXE-tiedosto, mutta sen pääte on PIF. Windows saattaa kätkeä päätteen ja ilmoittaa PIF-tiedoston olevan "shortcut to MS-DOS Program" tai vastaavaa suomeksi. Mutta kokeile siis poistaa tuo turha PIF-tiedosto, niin pitäisi toimia.
hahaa, toimii. - Ihmettelen kyllä suuresti miksi edellisen käyttäjän QB ei sijainnut kansiossa työpöytä/nörtit ohjelmat. -
Kysympä tässä samalla, mikä tässä koodissa on vikana:
'Ventti tietokoneelle RANDOMIZE TIMER Paaohjelma: GOSUB alkuruutu GOSUB Peli GOSUB ottaako GOSUB ottaako2 GOSUB ottaako3 GOSUB ottaako4 GOSUB tarkistaarvot GOSUB CPUarvot GOSUB voittiko GOSUB Paaohjelma arvot: 'Tässä aliohjelmassa asetetaan kaikki nollattavat arvot nollaan. kortti1 = 0 kortti2 = 0 kortti3 = 0 kortti4 = 0 kortti5 = 0 tkortti = 0 tkortti2 = 0 tkortti3 = 0 tkortti4 = 0 tkortti5 = 0 pisteet = 0 ykkoset = 4 kakkoset = 4 kolmoset = 4 neloset = 4 vitoset = 4 kutoset = 4 seiskat = 4 kasit = 4 ysit = 4 kympit = 4 jatkat = 4 akat = 4 kunkut = 4 RETURN alkuruutu: 'Tässä aliohjelmassa näytetään pelin alkuruutu, joka siis näkyy pelin alussa. CLS LOCATE 3, 10 PRINT "Ventti tietokoneelle" LOCATE 5, 10 PRINT "Tässä pelissä sinun täytyy voittaa tietokone." LOCATE 6, 10 PRINT "Sinun täytyy saada mahdollisimman lähelle 21." LOCATE 7, 10 PRINT "Jos tulos on yli 21, häviät suoraan." LOCATE 9, 10 PRINT "Paina jotakin näppäintä jatkaaksesi." SLEEP RETURN Peli: 'tässä aliohjelmassa peli alkaa ja ensimmäinen kortti jaetaan. CLS kortti1 = INT(RND * 13) LOCATE 3, 10 PRINT "Ensimmäisen kortin arvo: "; kortti1; " " IF kortti1 = 0 THEN ykkoset = ykkoset - 1 IF kortti1 = 1 THEN kakkoset = kakkoset - 1 IF kortti1 = 2 THEN kolmoset = kolmoset - 1 IF kortti1 = 3 THEN neloset = neloset - 1 IF kortti1 = 4 THEN vitoset = vitoset - 1 IF kortti1 = 5 THEN kutoset = kutoset - 1 IF kortti1 = 6 THEN seiskat = seiskat - 1 IF kortti1 = 7 THEN kasit = kasit - 1 IF kortti1 = 8 THEN ysit = ysit - 1 IF kortti1 = 9 THEN kympit = kympit - 1 IF kortti1 = 10 THEN jatkat = jatkat - 1 IF kortti1 = 11 THEN akat = akat - 1 IF kortti1 = 12 THEN kunkut = kunkut - 1 LOCATE 15, 10 PRINT "Paina jotakin näppäintä jatkaaksesi." SLEEP RETURN ottaako: 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti2 = INT(RND * 13) LOCATE 4, 10 PRINT "Toisen kortin arvo: "; kortti2; " " IF kortti2 = 0 THEN ykkoset = ykkoset - 1 IF kortti2 = 1 THEN kakkoset = kakkoset - 1 IF kortti2 = 2 THEN kolmoset = kolmoset - 1 IF kortti2 = 3 THEN neloset = neloset - 1 IF kortti2 = 4 THEN vitoset = vitoset - 1 IF kortti2 = 5 THEN kutoset = kutoset - 1 IF kortti2 = 6 THEN seiskat = seiskat - 1 IF kortti2 = 7 THEN kasit = kasit - 1 IF kortti2 = 8 THEN ysit = ysit - 1 IF kortti2 = 9 THEN kympit = kympit - 1 IF kortti2 = 10 THEN jatkat = jatkat - 1 IF kortti2 = 11 THEN akat = akat - 1 IF kortti2 = 12 THEN kunkut = kunkut - 1 SLEEP ELSE GOSUB tarkistaarvot END IF RETURN ottaako2: 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti3 = INT(RND * 13) LOCATE 4, 10 PRINT "Kolmannen kortin arvo: "; kortti3; " " IF kortti3 = 0 THEN ykkoset = ykkoset - 1 IF kortti3 = 1 THEN kakkoset = kakkoset - 1 IF kortti3 = 2 THEN kolmoset = kolmoset - 1 IF kortti3 = 3 THEN neloset = neloset - 1 IF kortti3 = 4 THEN vitoset = vitoset - 1 IF kortti3 = 5 THEN kutoset = kutoset - 1 IF kortti3 = 6 THEN seiskat = seiskat - 1 IF kortti3 = 7 THEN kasit = kasit - 1 IF kortti3 = 8 THEN ysit = ysit - 1 IF kortti3 = 9 THEN kympit = kympit - 1 IF kortti3 = 10 THEN jatkat = jatkat - 1 IF kortti3 = 11 THEN akat = akat - 1 IF kortti3 = 12 THEN kunkut = kunkut - 1 SLEEP ELSE GOSUB tarkistaarvot END IF RETURN ottaako3: 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti4 = INT(RND * 13) LOCATE 6, 10 PRINT "´Neljännen kortin arvo: "; kortti4; " " IF kortti4 = 0 THEN ykkoset = ykkoset - 1 IF kortti4 = 1 THEN kakkoset = kakkoset - 1 IF kortti4 = 2 THEN kolmoset = kolmoset - 1 IF kortti4 = 3 THEN neloset = neloset - 1 IF kortti4 = 4 THEN vitoset = vitoset - 1 IF kortti4 = 5 THEN kutoset = kutoset - 1 IF kortti4 = 6 THEN seiskat = seiskat - 1 IF kortti4 = 7 THEN kasit = kasit - 1 IF kortti4 = 8 THEN ysit = ysit - 1 IF kortti4 = 9 THEN kympit = kympit - 1 IF kortti4 = 10 THEN jatkat = jatkat - 1 IF kortti4 = 11 THEN akat = akat - 1 IF kortti4 = 12 THEN kunkut = kunkut - 1 SLEEP ELSE GOSUB tarkistaarvot END IF RETURN ottaako4: 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti5 = INT(RND * 13) IF kortti5 = 0 AND ykkoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 1 AND kakkoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 2 AND kolmoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 3 AND neloset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 4 AND vitoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 5 AND kutoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 6 AND seiskat = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 7 AND kasit = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 8 AND ysit = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 9 AND kympit = 0 THEN kortti = kortti5 - 1 IF kortti5 = 10 AND jatkat = 0 THEN kortti5 = kortti5 - 1 IF kortti5 = 11 AND akat = 0 THEN kortti5 = kortti5 - 1 IF kortti5 = 12 AND kunkut = 0 THEN kortti5 = kortti - 1 LOCATE 7, 10 PRINT "Viimeisen kortin arvo: "; kortti5; " " SLEEP ELSE GOSUB tarkistaarvot END IF RETURN tarkistaarvot: tulos = (kortti + 1) + kortti1 tulos = tulos + (kortti2 + 1) tulos = tulos + (kortti3 + 1) tulos = tulos + (kortti4 + 1) tulos = tulos + (kortti5 + 1) IF tulos > 21 THEN tulos = 0 RETURN CPUarvot: CPUtulos = INT(RND * 8) IF CPUtulos = 0 THEN CPUtulos = 21 IF CPUtulos = 1 THEN CPUtulos = 20 IF CPUtulos = 2 THEN CPUtulos = 19 IF CPUtulos = 3 THEN CPUtulos = 18 IF CPUtulos = 4 THEN CPUtulos = 18 IF CPUtulos = 5 THEN CPUtulos = 18 IF CPUtulos = 6 THEN CPUtulos = 17 IF CPUtulos = 7 THEN CPUtulos = 0 RETURN voittiko: CLS IF tulos > CPUtulos THEN PRINT "Jee pääsit" IF tulos < CPUtulos THEN PRINT "Jee et päässy" SLEEP RETURN
Miten niin vikana? Toimii todella hyvin, tosin ääkköset eivät näy kunnolla, mutta eihän se ole koodin syy. :D
Ehdottaisin näytön tyhjentämistä aina tietyin väliajoin, ettei näytöllä oleva tieto mene ihan sekaisin. Voisi tuohon lisätä korttien yhteissumman näytönkin...
Muuten ihan hyvä..
Höh? toimii? Minulla ei printtaannu tuo toisen kortin numero. No, jospa se oli vain joku bugi joka tuli ensimmäisellä kerralla testatessa... Ei, ei se toimi edelleenkään. Hmm... taidanpa lisätä tuohon sen yhteismäärän, jotta näen, missäpäin mahdollinen vika on.
Ihan vinkkinä sä voisit tutustua taulukoiden käyttämiseen. Ei oo kovin mielekästä käyttää noin montaa eri muuttujanimeä, koska se vain hankaloittaa niiden käsittelemistä. Lue tämä tai tämä.
Kiitos vinkistä :D
Nyt korjailin koodia vähäsen. Tuo toisen kortin printtaantuminen johtui siitä että kolmannen kortin arvo printtautui sen päälle ... vika korjattu ja koodia paranneltu muutenkin, jätin tosin alun pari ensimmäistä subia siihen versioon koodista jossa tarkastin että mikä on vikana. Varmaan lähes lopullinen koodi on tässä, jos joku haluaa sen copypasteta :D
'Ventti tietokoneelle RANDOMIZE TIMER Paaohjelma: GOSUB arvot GOSUB alkuruutu GOSUB Peli GOSUB ottaako GOSUB ottaako2 GOSUB ottaako3 GOSUB ottaako4 GOSUB tarkistaarvot GOSUB CPUarvot GOSUB voittiko GOSUB Paaohjelma arvot: 'Tässä aliohjelmassa asetetaan kaikki nollattavat arvot nollaan. kortti1 = 0 kortti2 = 0 kortti3 = 0 kortti4 = 0 kortti5 = 0 tkortti = 0 tkortti2 = 0 tkortti3 = 0 tkortti4 = 0 tkortti5 = 0 pisteet = 0 ykkoset = 4 kakkoset = 4 kolmoset = 4 neloset = 4 vitoset = 4 kutoset = 4 seiskat = 4 kasit = 4 ysit = 4 kympit = 4 jatkat = 4 akat = 4 kunkut = 4 RETURN alkuruutu: 'Tässä aliohjelmassa näytetään pelin alkuruutu, joka siis näkyy pelin alussa. CLS LOCATE 3, 10 PRINT "Ventti tietokoneelle" LOCATE 5, 10 PRINT "Tässä pelissä sinun täytyy voittaa tietokone." LOCATE 6, 10 PRINT "Sinun täytyy saada mahdollisimman lähelle 21." LOCATE 7, 10 PRINT "Jos tulos on yli 21, häviät suoraan." LOCATE 9, 10 PRINT "Paina jotakin näppäintä jatkaaksesi." SLEEP RETURN Peli: 'tässä aliohjelmassa peli alkaa ja ensimmäinen kortti jaetaan. CLS kortti1 = INT(RND * 13) LOCATE 3, 10 PRINT "Ensimmäisen kortin arvo: "; kortti1; " " IF kortti1 = 0 THEN ykkoset = ykkoset - 1 IF kortti1 = 1 THEN kakkoset = kakkoset - 1 IF kortti1 = 2 THEN kolmoset = kolmoset - 1 IF kortti1 = 3 THEN neloset = neloset - 1 IF kortti1 = 4 THEN vitoset = vitoset - 1 IF kortti1 = 5 THEN kutoset = kutoset - 1 IF kortti1 = 6 THEN seiskat = seiskat - 1 IF kortti1 = 7 THEN kasit = kasit - 1 IF kortti1 = 8 THEN ysit = ysit - 1 IF kortti1 = 9 THEN kympit = kympit - 1 IF kortti1 = 10 THEN jatkat = jatkat - 1 IF kortti1 = 11 THEN akat = akat - 1 IF kortti1 = 12 THEN kunkut = kunkut - 1 pisteet = pisteet + kortti1 LOCATE 13, 10 PRINT "Yhteismäärä: "; pisteet; " " LOCATE 15, 10 PRINT "Paina jotakin näppäintä jatkaaksesi." SLEEP RETURN ottaako: CLS 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 3, 10 PRINT "Ensimmäisen kortin arvo: "; kortti1; " " LOCATE 13, 10 PRINT "Yhteismäärä: "; pisteet; " " LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti2 = INT(RND * 13) LOCATE 4, 10 PRINT "Toisen kortin arvo: "; kortti2; " " IF kortti2 = 0 THEN ykkoset = ykkoset - 1 IF kortti2 = 1 THEN kakkoset = kakkoset - 1 IF kortti2 = 2 THEN kolmoset = kolmoset - 1 IF kortti2 = 3 THEN neloset = neloset - 1 IF kortti2 = 4 THEN vitoset = vitoset - 1 IF kortti2 = 5 THEN kutoset = kutoset - 1 IF kortti2 = 6 THEN seiskat = seiskat - 1 IF kortti2 = 7 THEN kasit = kasit - 1 IF kortti2 = 8 THEN ysit = ysit - 1 IF kortti2 = 9 THEN kympit = kympit - 1 IF kortti2 = 10 THEN jatkat = jatkat - 1 IF kortti2 = 11 THEN akat = akat - 1 IF kortti2 = 12 THEN kunkut = kunkut - 1 pisteet = pisteet + kortti2 LOCATE 13, 10 PRINT "Yhteismäärä: "; pisteet; " " SLEEP ELSE GOSUB tarkistaarvot END IF RETURN ottaako2: CLS 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 13, 10 PRINT "Yhteismäärä: "; pisteet; " " LOCATE 3, 10 PRINT "Ensimmäisen kortin arvo: "; kortti1; " " LOCATE 4, 10 PRINT "Toisen kortin arvo; "; kortti2; " " LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti3 = INT(RND * 13) LOCATE 5, 10 PRINT "Kolmannen kortin arvo: "; kortti3; " " IF kortti3 = 0 THEN ykkoset = ykkoset - 1 IF kortti3 = 1 THEN kakkoset = kakkoset - 1 IF kortti3 = 2 THEN kolmoset = kolmoset - 1 IF kortti3 = 3 THEN neloset = neloset - 1 IF kortti3 = 4 THEN vitoset = vitoset - 1 IF kortti3 = 5 THEN kutoset = kutoset - 1 IF kortti3 = 6 THEN seiskat = seiskat - 1 IF kortti3 = 7 THEN kasit = kasit - 1 IF kortti3 = 8 THEN ysit = ysit - 1 IF kortti3 = 9 THEN kympit = kympit - 1 IF kortti3 = 10 THEN jatkat = jatkat - 1 IF kortti3 = 11 THEN akat = akat - 1 IF kortti3 = 12 THEN kunkut = kunkut - 1 pisteet = pisteet + kortti3 LOCATE 13, 10 PRINT "Yhteismäärä: "; pisteet; " " SLEEP ELSE GOSUB tarkistaarvot END IF RETURN ottaako3: 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti4 = INT(RND * 13) LOCATE 6, 10 PRINT "Neljännen kortin arvo: "; kortti4; " " IF kortti4 = 0 THEN ykkoset = ykkoset - 1 IF kortti4 = 1 THEN kakkoset = kakkoset - 1 IF kortti4 = 2 THEN kolmoset = kolmoset - 1 IF kortti4 = 3 THEN neloset = neloset - 1 IF kortti4 = 4 THEN vitoset = vitoset - 1 IF kortti4 = 5 THEN kutoset = kutoset - 1 IF kortti4 = 6 THEN seiskat = seiskat - 1 IF kortti4 = 7 THEN kasit = kasit - 1 IF kortti4 = 8 THEN ysit = ysit - 1 IF kortti4 = 9 THEN kympit = kympit - 1 IF kortti4 = 10 THEN jatkat = jatkat - 1 IF kortti4 = 11 THEN akat = akat - 1 IF kortti4 = 12 THEN kunkut = kunkut - 1 pisteet = pisteet + kortti4 LOCATE 13, 10 PRINT "Yhteismäärä: "; pisteet; " " SLEEP ELSE GOSUB tarkistaarvot END IF RETURN ottaako4: 'Tässä aliohjelmassa kysytään, otetaanko lisää kortteja. Jos otetaan, niin jaetaan, muutoin mennään tulosten tarkistukseen. LOCATE 9, 10 INPUT "Otatkos lisää?(K/E)", a$ IF a$ = "K" OR a$ = "k" THEN kortti5 = INT(RND * 13) IF kortti5 = 0 AND ykkoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 1 AND kakkoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 2 AND kolmoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 3 AND neloset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 4 AND vitoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 5 AND kutoset = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 6 AND seiskat = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 7 AND kasit = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 8 AND ysit = 0 THEN kortti5 = kortti5 + 1 IF kortti5 = 9 AND kympit = 0 THEN kortti = kortti5 - 1 IF kortti5 = 10 AND jatkat = 0 THEN kortti5 = kortti5 - 1 IF kortti5 = 11 AND akat = 0 THEN kortti5 = kortti5 - 1 IF kortti5 = 12 AND kunkut = 0 THEN kortti5 = kortti - 1 LOCATE 7, 10 PRINT "Viimeisen kortin arvo: "; kortti5; " " pisteet = pisteet + kortti5 LOCATE 13, 10 PRINT "Lopullinen pistemäärä: "; pisteet; " " SLEEP ELSE GOSUB tarkistaarvot END IF RETURN tarkistaarvot: IF pisteet > 21 THEN pisteet = 0 RETURN CPUarvot: CPUtulos = INT(RND * 8) IF CPUtulos = 0 THEN CPUtulos = 21 IF CPUtulos = 1 THEN CPUtulos = 20 IF CPUtulos = 2 THEN CPUtulos = 19 IF CPUtulos = 3 THEN CPUtulos = 18 IF CPUtulos = 4 THEN CPUtulos = 18 IF CPUtulos = 5 THEN CPUtulos = 18 IF CPUtulos = 6 THEN CPUtulos = 17 IF CPUtulos = 7 THEN CPUtulos = 0 LOCATE 16, 10 PRINT "artificial intelligence sai "; CPUtulos; " pistettä." RETURN voittiko: CLS IF pisteet > CPUtulos THEN PRINT "Jee pääsit" IF pisteet < CPUtulos THEN PRINT "Jee et päässy" IF pisteet = CPUtulos THEN PRINT "Lol, tasapeli" SLEEP RETURN
Krhm.. Vielä yksi parannusehdotus:
Voisit koodata ohjelmaan sammuttamisen. Tarkoitan siis, että esim. jos painaa ESC, niin ohjelma loppuu. Nyt joudun halutessani lopettaa, painaa Ctrl+C- yhdistelmää!
copypasteta vaikka siihen alkumenuuseen SLEEPin tilalle:
LOCATE 9,10 PRINT "Huitase ykköstä ja enteriä niin pääset pelaamaan" LOCATE 10,10 PRINT "Tai huitase kakkosta ja enteriä niin pääset pois pelistä" INPUT a IF a = 1 THEN RETURN ELSE END
tai sitten:
LOCATE 9,10 PRINT "Ole hyvä ja kirjota 'laalalaa' tuohon kenttään jos haluat pois." LOCATE 10, 10 PRINT "Muuten peli jatkuu." INPUT a$ IF a$ = "laalalaa" THEN END ELSE RETURN
Toimiihan tuo ihan hyvin. On vaan tehty tuttu korttipeli kauhian vaikeasti :D
E.K.Virtanen
Juu, en jaksanut vielä miettiä aaiitä, joten laitoin vain randomilla jotain tuloksia.
Aihe on jo aika vanha, joten et voi enää vastata siihen.