QBasicilla tehty Space Invanders, oma suomennokseni Avaruusmönkijöiden Hyökkäys. Kaikki varmaankin tuntevat tuon klassikkopelin, mutta selitetään sen yksinkertainen idea joka tapauksessa. Eli pelaaja on tykki, ja ylhäällä on avaruusmönkijöitä. Mönkijät pommittavat ja lähestyvät jatkuvasti. Jos mönkijän pommi osuu tykkiin, pelaaja menettää yhden elämän. Ja jos mönkijät pääsevät liian lähelle tykkiä, koko peli loppuu. Versio on lähes kokonaan bugikorjattu, mutta joitakin bugeja jäi vielä. Jos saan joskus täysin bugivapaan version rakennettua exe-tiedostoksi, se on ladattavissa osoitteessa:
www.freewebs.com/chaosmakergames/
'*** MONKIJAT.BAS '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 'I www.freewebs.com/chaosmakergames I '* www.ohjelmointiputka.net * 'I Koodin suunnittelija: Petri Kokko I '* Bugikorjaus: Chaosworm * 'I Grafiikka: Chaosworm I '* Koodaaja: Chaosworm * 'I Žäniefektit: Chaosworm I '* Bugikorjatun version julkaisija: Chaosmaker Games 2007 * 'I Koodia saa käyttää vapaasti ja levittää vapaasti I '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* SCREEN 12 'Asetetaan näyttötila sopivaksi leveys = 75 'Kentän leveys on 75 (isoin mahdollinen) korkeus = 20 'Kentän korkeus on 20 (aika hyvä näin) maxmonkijoita = 26 'mönkijöitä voi olla maksimissaan 26 maxammuksia = 10 'ammuksia voi olla ruudulla kerallaan 10 maxpommeja = 50 'pommeja voi olla ruudulla kerrallaan 50 tykkeja = 3 'kolme elämää alussa uusitykki = 5000 'uusi elämä 5k pisteen välein monkija$ = "<o>" 'mönkijä on ton näkönen tykki$ = "olo" 'tykki on tollanen Rajahdys$ = "#" 'räjähdykseen printataan risuaita ammus$ = "*" 'ja ammus näyttää tähdeltä pommi$ = "%" 'pommi on tollane. tyhja$ = " " 'tyhjä on tollane vasemmalle$ = CHR$(0) + "K" 'ja vasemmalle mennään vasemmasta nuolesta oikealle$ = CHR$(0) + "M" 'oikeelle oikeesta nuolesta Ammu$ = " " 'Space ampuu Lopeta$ = CHR$(27) hidastus = 550000 'Hidastetaan peliä. Mitä pienempi, sen vaikeampi peli. 'DIMit on sellasia jänniä 'en oikeestaan tiiä että mitä ne tekee, mutta 'tiiän että niitä pitää laittaa DIM mx(maxmonkijoita) DIM my(maxmonkijoita) DIM ax(maxammuksia) DIM ay(maxammuksia) DIM px(maxpommeja) DIM py(maxpommeja) WHILE 1 'Pääohjelma GOSUB Alkuruutu 'GOSUBeja ei liene tarpeellista WHILE tykkeja > 0 'kommentoida. GOSUB AsetaMuodostelma WHILE tykkeja > 0 AND monkijoita > 0 GOSUB SiirraMonkijoita GOSUB SiirraPommeja GOSUB SiirraTykkia GOSUB SiirraAmmuksia GOSUB TilanneTiedotus FOR i = 1 TO hidastus NEXT i WEND WEND WEND END Alkuruutu: CLS 'Puhdistetaan näyttö kaikesta vanhasta sonnasta COLOR 15 'Väri valkoseks LOCATE 5, 10 PRINT "Avaruusmönkijöiden hyökkäys!" LOCATE 7, 10 PRINT "Tuhoa inhat avaruusmönkijät ennen kuin ne "; PRINT "tuhoavat sinut." LOCATE 8, 10 PRINT "Onnea vaaralliseen tehtävään!" LOCATE 9, 10 PRINT "Tykki:"; COLOR 2 'Väri vihreeks että saadaan tykin värinen tykki PRINT tykki$ 'printataan tykki COLOR 15 'ja väri takas valkoseks LOCATE 10, 10 PRINT "Mönkijä:"; COLOR 9 'väri siniseks että saadaan mönkijän värinen mänkijä PRINT monkija$ 'printataan mönkijä COLOR 15 'Ja väri valkoseks LOCATE 13, 10 PRINT "Uusi tykki(elämä) "; uusitykki; " pisteen välein" LOCATE 16, 10 PRINT "Vasemmalle: <- Oikealle: -> " LOCATE 17, 10 PRINT "Ammu: Space" a$ = "" '_ niin kauan WHILE a$ = "" ' l kunnekka a$ = INKEY$ ' l painetaa jotai WEND '_l niin pysytään tässä kohdassa RETURN 'ja mennään takasin pääohjelmaan AsetaMuodostelma: monkijoita = maxmonkijoita 'mönkijöitä on niin paljon kun niitä voi olla. taso = taso + 1 'asetetaan leveli kohdalleen ammuksia = 0 'ammuksia ja pommeja on nolla pommeja = 0 tx = INT(leveys / 2) 'tykki sijaitsee leveyden puolessa välissä CLS 'tyhjennetään ruutu mx(1) = 1 'ja yhen mönkijän sijaintiX my(1) = 1 'ja saman mönkijän sijaintiY FOR i = 2 TO monkijoita '_ja sitte tungetaan niitä mönkijöitä sinne mx(i) = mx(i - 1) + 4 ' l my(i) = my(i - 1) '_l IF (mx(i) > leveys) THEN ' ja jos mönkijä meinaa mennä ruudusta ulos ni mx(i) = 1 'sitten laitetaan rivin alkuun my(i) = my(i) + 1 'ja toiselle riville se mönkijä. END IF 'lopetetaan if NEXT i 'tekee niitä mönkijöitä lisää kai LOCATE korkeus, tx 'jaa sitten laitetaan tykki paikalleen COLOR 2 'vihreänä PRINT tykki$ 'ja printataan se COLOR 15 'ja väri valkoseks RETURN TilanneTiedotus: LOCATE 22, 1 FOR i = 1 TO tykkeja '\ tähän kohtaan tulee hieno elämätaulukko PRINT tykki$; " "; ' > NEXT i '/ PRINT tyhja$; PRINT tyhja$; 'kumitetaan PRINT tyhja$ LOCATE 23, 1 PRINT "Taso:"; taso; " Pisteet"; pisteet; " " 'ja levelit ja pisteetkin näytetään RETURN SiirraMonkijoita: 'Tää on kiva juttu FOR i = 1 TO monkijoita 'laitetaan siis jotain mönkijöitä sinne LOCATE my(i), mx(i) + 2 '\ PRINT tyhja$ ' l LOCATE my(i), mx(i) + 1 ' > Laitetaan mönkijän tilalle tyhjää PRINT tyhja$ ' l LOCATE my(i), mx(i) ' l PRINT tyhja$ '/ mx(i) = mx(i) + 1 'siirretään mönkijää IF mx(i) > leveys THEN 'ja jos se menee ulos ruudusta niin laitetaan mx(i) = 1 'se rivin alkuun my(i) = my(i) + 1 'ja seuraavalle riville END IF 'lopetetaan if IF my(i) > korkeus THEN END 'ja jos yksikään mönkijä tulee liian lähelle, niin peli loppuu LOCATE my(i), mx(i) 'ja otetaan mönkijän uusi sijainti COLOR 9 'ja sinisenä PRINT monkija$ 'piirrämme mönkijän skriinille hillumaan COLOR 15 'ja väri vaihtuu valkoiseksi IF RND * 100 < taso THEN GOSUB Pommita 'ja mönkijä pommittaa välillä, riippuen levelistä NEXT i 'ja tehdään taas se next i RETURN 'ja palataan pääohjelmaan SiirraTykkia: a$ = INKEY$ 'a$ on näppäimen painallus IF a$ <> "" THEN 'jos a$ on jotakin niiiiiin LOCATE korkeus, tx 'kaiken varalta tehään tyhjää sinne PRINT " " 'sen tykin tilalle LOCATE korkeus, tx + 2 PRINT " " IF a$ = vasemmalle$ THEN tx = tx - 1 'ja jos painetaan menemään vasemmalle, niin tykki tottelee kiltisti IF a$ = oikealle$ THEN tx = tx + 1 'oikealle, samahomma IF a$ = Ammu$ THEN GOSUB Ammu 'jos painetaan ampumisnämiskää, niin ammutaan IF a$ = Lopeta$ THEN END 'jos painetaan poistumista ni lopetetaan IF tx > leveys THEN tx = leveys 'ja jos tykin sijainti on suurempi kuin leveys, se on leveys IF tx < 1 THEN tx = 1 'ja jos tykin sijainti on pienempi kuin yksi, niin se on yksi LOCATE korkeus, tx 'ja tykin paikalle COLOR 2 'heitetään sininen PRINT tykki$ 'tykki COLOR 15 'ja vaihdetaan väri valkoiseksi END IF 'lopetetaan if RETURN 'palataan pääohjelmaan SiirraAmmuksia: FOR i = 1 TO ammuksia 'tää kohta toimii kuin mönkijöiden siirrossa LOCATE ay(i), ax(i) PRINT tyhja$ ay(i) = ay(i) - 1 IF ay(i) < 1 THEN ax(i) = ax(ammuksia) ay(i) = ay(ammuksia) ammuksia = ammuksia - 1 END IF 'tähän asti FOR j = 1 TO monkijoita IF ay(i) = my(i) AND ax(i) >= mx(j) AND ax(i) <= mx(j) + 2 THEN 'jos se osuu mönkijään niin x = mx(j) 'x on mönkijän sijainti y = my(j) 'y on mönkijän sijainti GOSUB Rajahdys 'mennään räjäytykseen pisteet = pisteet + 10 'morescore IF pisteet / uusitykki = INT(pisteet / uusitykki) THEN 'ja jos pisteet ylittää uuden elmään rajat niin saa uuden elämän tykki = tykki + 1 'lisätään se elämä END IF 'lopetetaan if mx(j) = mx(monkijoita) 'hmm... my(j) = my(monkijoita) 'se on siis se yks tietty mönkijä monkijoita = monkijoita - 1 'ja poistetaan se mönkijä ax(i) = ax(ammuksia) 'jaa ja nää sitte on että se on ay(i) = ay(ammuksia) 'se tietty ammus joka ammuksia = ammuksia - 1 'poistetaan END IF 'lopetetaan if NEXT j IF i <= ammuksia THEN 'jos i on suurempi kun ammuksien määrä, LOCATE ay(i), ax(i) 'niin sinne heitetään se ammus COLOR 14 'keltasena PRINT ammus$ 'nyt COLOR 15 'ja väri valkoseks END IF NEXT i RETURN SiirraPommeja: 'sama juttu kuin äsköses FOR i = 1 TO pommeja 'juu, kyllä, IHAN kokonaan sama LOCATE py(i), px(i) PRINT " " py(i) = py(i) + 1 IF py(i) = korkeus AND px(i) >= tx AND px(i) <= tx + 2 THEN x = tx y = korkeus GOSUB Rajahdys tykkeja = tykkeja - 1 LOCATE korkeus, tx PRINT tykki$ IF tykkeja < 1 THEN GOTO Lopetus END IF IF py(i) > korkeus THEN px(i) = px(pommeja) py(i) = py(pommeja) pommeja = pommeja - 1 END IF IF i <= pommeja THEN LOCATE py(i), px(i) COLOR 14 PRINT pommi$ COLOR 15 END IF NEXT i RETURN Ammu: IF ammuksia < maxammuksia THEN 'jos ammuksia mahtuu vielä niin ammuksia = ammuksia + 1 'tulee yksi lisää SOUND 300, 1 SOUND 298, 1 'hienoja ääniefektejä SOUND 295, 1 ax(ammuksia) = tx + 1 'ja se sijaitsee tykin yläpuolella ay(ammuksia) = korkeus - 1 END IF RETURN Pommita: IF pommeja < maxpommeja THEN 'jos pommeja mahtuu vielä, niin pommeja = pommeja + 1 'tulee yksi lisää SOUND 100, 1 SOUND 98, 1 SOUND 96, 1 px(pommeja) = mx(i) + 1 'ja se sijaitsee mönkihän alapuolella py(pommeja) = my(i) + 1 END IF RETURN Rajahdys: LOCATE y, x 'kohteen sijainti COLOR 4 'punainen räjähdys PRINT Rajahdys$ 'ja printataan se SOUND 50, 1 SOUND 900, 1 'näitä mahtavia piipperiääniä taas SOUND 400, 1 COLOR 15 'ja väri takaisin valkoiseksi FOR k = 1 TO hidastus * 10 'ja hidastusta laitetaan lisää että NEXT k 'peli pysähtyy hetkeksi LOCATE y, x + 1 'ja printataan sitten PRINT tyhja$ 'kohteen päälle tyhjäää LOCATE y, x + 2 PRINT tyhja$ LOCATE y, x PRINT tyhja$ RETURN 'palataan kohtaan, josta tänne tultiin Lopetus: CLS COLOR 4 LOCATE 3, 10 PRINT "MAAPALLO TUHOUTUI!" LOCATE 5, 10 PRINT "Et saanut mönkijöitä pysäytettyä." LOCATE 6, 10 PRINT "Parempi onni ensi keralla." SLEEP '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-* 'www.freewebs.com/chaosmakergames 'www.ohjelmointiputka.net 'Koodin suunnittelija: Petri Kokko 'Bugikorjaus: Chaosworm 'Grafiikanmuuntelu: Chaosworm 'Koodaaja: Chaosworm 'Žäniefektit: Chaosworm 'Bugikorjatun version julkaisija: Chaosmaker Games 2007 'Koodia saa käyttää vapaasti ja levittää vapaasti '*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Space Invaders.
Ihan sama.
Aihe on jo aika vanha, joten et voi enää vastata siihen.