Tämmöinen koodinpätkä. Kopioitu lähes suoraan kirjan Pelien Parhaat tietokoneohjelmointisivuilta, ei siis ole omatekemäni.
Paitsi kantajat ja yhteispaino. Mutta kenties siitä on jollekulle hyötyä, joten laitampa sen tänne.
Häiritsemän jäi, että pelaaja ei näy ruudulla, mutta selvennykseksi se on siis siinä kartan keskellä.
'***Atlantis maxx = 100'kartan leveys maxy = 100'ja korkeus mantereita = 3'pelimaailman muita ominaisuuksia kylia = 50 vetta = 0 maata = 1 kyla = 2 koti = 3 laiva = 4 safari = 5 pohjoiseen$ = "w" 'ja kontrollinämiskät etelaan$ = "s" lanteen$ = "a" itaan$ = "d" rantaudu$ = " " DIM m%(maxx, maxy) 'tehdään kartasta kartan kokoinen DIM kx%(kylia) 'tehdään ohjelmalle selväksi, että kyliä tulee kartalle jonkin DIM ky%(kylia) 'verran (siis X verran kohdassa kylia = X missä X on numero.) DIM kkultaa(kylia) 'Annetaan avuliaille kansalaisille kultaa DIM kmiehia(kylia) 'ja miehiä DIM kruokaa(kylia) 'ja ruokaa DIM kviha(kylia) 'ja annetaan vielä vihamieliset aivotkin DIM x(100) 'tallentaa, missä päin maata on nostettu merestä DIM y(100) 'jotta saataisiin luotua lisää mannerta järkevästi DIM p(100) 'p on todennäköisyys 'Merkit joita käytetään kartalla: karttamerkki$(vetta) = ",.," karttamerkki$(maata) = "#@#" karttamerkki$(kyla) = "(o)" karttamerkki$(koti) = "(*)" karttamerkki$(laiva) = "\*/" karttamerkki$(safari) = "œœœ" RANDOMIZE TIMER 'Nyt tulee pääohjelma! GOSUB LuoMaailma GOSUB LuoKylat GOSUB LuoKoti GOSUB AlustaPelaaja WHILE pmiehia > 0 GOSUB NaytaTilanne GOSUB Siirra WEND GOSUB NaytaTilanne LOCATE 20, 1 COLOR 12 PRINT "Retkikuntasi kaikki jäsenet menehtyivät!" COLOR 15 END LuoMaailma: CLS LOCATE 10, 10 PRINT "Hetkinen, pelimaailmaa luodaan." PRINT "Jokainen manner luodaan siten," PRINT "että muuutetaan jokin sattumanvarainen" PRINT "kohta merta maaksi. Tämän jälkeen muutetaan" PRINT "(tietyllä todennäköisyydellä) ympäröivät 4" PRINT "aluetta maaksi etc." FOR i = 1 TO mantereita n = 1 x(n) = INT(RND * maxx) + 1 y(n) = INT(RND * maxy) + 1 p(n) = 1 WHILE n > 0 xx = x(n) yy = y(n) pp = p(n) n = n - 1 IF xx < 1 THEN xx = xx + maxx IF xx > maxx THEN xx = xx - maxx IF yy < 1 THEN yy = yy + maxy IF yy > maxy THEN yy = yy - maxy IF m%(xx, yy) = vetta AND RND < pp THEN m%(xx, yy) = maata x(n) = xx: y(n) = yy - 1: p(n) = pp - .01: n = n + 1 IF n > 50 THEN n = 50 x(n) = xx: y(n) = yy + 1: p(n) = pp - .01: n = n + 1 IF n > 50 THEN n = 50 x(n) = xx: y(n) = yy - 1: p(n) = pp - .01: n = n + 1 IF n > 50 THEN n = 50 x(n) = xx: y(n) = yy + 1: p(n) = pp - .01: n = n + 1 IF n > 50 THEN n = 50 END IF WEND NEXT i RETURN LuoKylat: FOR i = 1 TO kylia WHILE m%(kx%(i), ky%(i)) = vetta kx%(i) = INT(RND * maxx) + 1 ky%(i) = INT(RND * maxy) + 1 WEND m%(kx%(i), ky%(i)) = kyla kmiehia(i) = INT(RND * 500 + RND * 500) kviha(i) = RND NEXT i RETURN LuoKoti: kotix = INT(RND * (maxx - 2)) + 2 'Koti sijaitsee saarella, kotiy = INT(RND * (maxy - 2)) + 2 'joten haetaan pala merta, IF m%(kotix, kotiy) <> vetta THEN GOTO LuoKoti 'muutetaan se kaupungiksi m%(kotix, kotiy) = koti 'ja ympäröivät neljä m%(kotix - 1, kotiy - 1) = maata 'kartta-aluetta maaksi, m%(kotix + 1, kotiy - 1) = maata 'muodostamaan saaren. m%(kotix - 1, kotiy + 1) = maata m%(kotix + 1, kotiy + 1) = maata RETURN AlustaPelaaja: CLS px = kotix - 1 'Alussa pelaaja sijaitsee kotikaupungin vieressä. py = kotiy pmiehia = 5 pkantajia = 1200 pkultaa = 300 phelyja = 100 pruokaa = 350 ppaino = pkultaa + phelyja + pruokaa pkulku = laiva m%(px, py) = laiva RETURN NaytaTilanne: 'Pelin kartasta näytetään kerrallaan 11x11 ruudun kokoinen alue pelaajan 'ympäriltä. Pelaajan liikkuessa kartta siirtyy. Jos kartan liikkuminen on 'liian hidas, voi pienentää näytettävän kartan kokoa, esim -3:sta 3:een FOR j = -5 TO 5 FOR i = -5 TO 5 LOCATE j + 6, (i + 6) * 3 xx = px + i yy = py + j IF xx < 1 THEN xx = xx + maxx IF yy < 1 THEN yy = yy + maxy IF xx > maxx THEN xx = xx - maxx IF yy > maxy THEN yy = yy - maxy PRINT karttamerkki$(m%(xx, yy)) NEXT i NEXT j LOCATE 3, 40 PRINT "Yhteispaino:"; ppaino; " " LOCATE 4, 40 PRINT "Kantajia:"; pkantajia; " " LOCATE 5, 40 PRINT "Miehiä:"; pmiehia; " " LOCATE 6, 40 PRINT "Kultaa:"; pkultaa; " " LOCATE 7, 40 PRINT "Lasihelyjä:"; phelyja; " " LOCATE 8, 40 PRINT "Ruokaa:"; pruokaa; " kiloa" LOCATE 20, 10 PRINT "Jos kantajien määrä on vähemmän kuin yhteispaino, lastisi tuhoutuu ja kantajat kuolevat!" RETURN Siirra: a$ = INKEY$ IF a$ <> "" THEN IF pkulku = laiva THEN m%(px, py) = vetta ELSE m%(px, py) = maata vx = px vy = py IF a$ = lanteen$ THEN px = px - 1 IF a$ = itaan$ THEN px = px + 1 IF a$ = pohjoiseen$ THEN py = py - 1 IF a$ = etelaan$ THEN py = py + 1 IF px < 1 THEN px = px + maxx IF py < 1 THEN py = py + maxx IF px > maxx THEN px = px - maxx IF py > maxy THEN py = py - maxy IF pkulku = safari AND m%(px, py) = laiva THEN pkulku = laiva IF m%(px, py) = maata AND pkulku = laiva THEN px = vx: py = vy IF m%(px, py) = vetta AND pkulku = safari THEN px = vx: py = vy IF m%(px, py) = koti THEN GOSUB Kotona: px = vx: py = vy IF m%(px, py) = kyla THEN GOSUB Kylassa: px = vx: py = vy IF a$ = rantaudu$ THEN GOSUB rantaudu: m%(px, py) = pkulku IF RND * 7 < 1 THEN pruokaa = pruokaa - miehia IF pruokaa < 0 THEN pruokaa = 0: pmiehia = pmiehia - 1 ppaino = pkultaa + phelyja + pruokaa IF ppaino > pkantajia THEN pkantajia = 0: pkultaa = 0: phelyja = 0: pruokaa = 0: ppaino = 0 END IF END IF RETURN rantaudu: xxx = px yyy = py FOR j = -1 TO 1 FOR i = -1 TO 1 xx = px + i yy = py + j IF xx < 1 THEN xx = xx + maxx IF xx > maxx THEN xx = xx - maxx IF yy < 1 THEN yy = yy + maxy IF yy > maxy THEN yy = yy - maxy IF (m%(xx, yy) = maata) THEN xxx = xx: yyy = yy 'Aloittakaamme lähimmän NEXT i 'maapläntin etsiminen! NEXT j IF m%(xxx, yyy) = maata THEN m%(px, py) = laiva px = xxx py = yyy pkulku = safari END IF 'Maapläntti löytyi ja RETURN 'laivasta tehtiin safaria. Kotona: 'Kotonaan voi ostaa lasihelyjä tai ruokaa sekä palkata itselleen 'miehiä. Näitä voi myös myydä takaisin samaan hintaan. <ENTER>:iä painamalla 'pääsee ulos sieltä. FOR i = 1 TO kylia kkultaa(i) = INT(RND * kmiehia(i)) kruokaa(i) = INT(RND * kmiehia(i)) NEXT i kotimiehia = 500 kotihelyja = 1000 kotiruokaa = 2000 kotikantajia = 5000 CLS LOCATE 2, 10 PRINT "Olet kotikaupungissasi." LOCATE 4, 13 PRINT "Sinulla", "Kaupungissa" a$ = "" WHILE a$ <> CHR$(13) 'CHR$(13) on siis se <ENTER>. LOCATE 5, 1 PRINT "(M)iehiä", pmiehia, kotimiehia, "(1 mies maksaa 10 kultaa)" LOCATE 6, 1 PRINT "(H)elyjä", phelyja, kotihelyja, "(5 helyä maksaa 1 kullan)" LOCATE 7, 1 PRINT "(R)uokaa", pruokaa, kotiruokaa, "(10 kiloa maksaa 1 kullan)" LOCATE 8, 1 PRINT "(K)antajia", pkantajia, kotikantajia, "(1 kantaja maksaa 1 kullan)" LOCATE 9, 1 PRINT "Sinulla on "; pkultaa; " kultaa" LOCATE 11, 10 PRINT "Paina alkukirjainta(m,h,r) ostaaksesi," LOCATE 12, 10 PRINT "tai Sift + alkukirjain myydäksesi." a$ = "" WHILE a$ = "": a$ = INKEY$: WEND IF a$ = "m" AND pkultaa >= 10 AND kotimiehia > 0 THEN pkultaa = pkultaa - 10 kotimiehia = kotimiehia - 1 pmiehia = pmiehia + 1 END IF IF a$ = "M" AND pmiehia > 1 THEN pmiehia = pmiehia - 1 kotimiehia = kotimiehia + 1 pkultaa = pkultaa + 10 END IF IF a$ = "h" AND pkultaa >= 1 AND kotihelyja > 4 THEN pkultaa = pkultaa - 1 kotihelyja = kotihelyja - 5 phelyja = phelyja + 5 END IF IF a$ = "H" AND phelyja >= 5 THEN phelyja = phelyja - 5 pkultaa = pkultaa + 1 kotihelyja = kotihelyja + 1 END IF IF a$ = "r" AND pkultaa >= 1 AND kotiruokaa > 9 THEN pkultaa = pkultaa - 1 pruokaa = pruokaa + 10 kotiruokaa = kotiruokaa - 10 END IF IF a$ = "R" AND pruokaa >= 10 THEN pruokaa = pruokaa - 10 pkultaa = pkultaa + 1 kotiruokaa = kotiruokaa + 10 END IF IF a$ = "k" AND kotikantajia >= 1 AND pkultaa >= 1 THEN pkultaa = pkultaa - 1 kotikantajia = kotikantajia - 1 pkantakia = pkantajia + 1 END IF IF a$ = "K" AND pkantajia >= 1 THEN pkultaa = pkultaa + 1 kotikantajia = kotikantajia + 1 pkantajia = pkantajia - 1 END IF WEND CLS RETURN Kylassa: 'Ollessaan ystävällisessä kylässä pelaaja voi käydä kauppaa alkuasukkaiden 'kanssa vaihtamalla lasirihkamaa kultaan ja ruokaan. i = 1 WHILE kx%(i) <> px OR ky%(i) <> py i = i + 1 WEND GOSUB Kohtaaminen IF kviha(i) <= .1 THEN CLS LOCATE 2, 10 PRINT "Olet alkuasukaskylässä." LOCATE 4, 13 PRINT "Sinulla", "Kylässä" a$ = "" WHILE a$ <> CHR$(13) LOCATE 5, 1 PRINT "Kultaa", pkultaa, kkultaa(i), "(5 kultaa maksaa yhden helyn)" LOCATE 6, 1 PRINT "Ruokaa", pruokaa, kruokaa(i), "(10 ruokaa maksaa yhden helyn)" LOCATE 11, 10 PRINT "Paina alkukirjainta(k,r) ostaaksesi," LOCATE 12, 10 PRINT "tai Sift + alkukirjain myydäksesi." a$ = "" WHILE a$ = "": a$ = INKEY$: WEND IF a$ = "k" AND phelyja >= 1 AND kkultaa(i) > 4 THEN phelyja = phelyja - 1 kkultaa(i) = kkultaa(i) - 5 pkultaa = pkultaa + 5 END IF IF a$ = "K" AND pkultaa >= 5 THEN phelyja = phelyja + 1 kkultaa(i) = kkultaa(i) + 5 pkultaa = pkultaa - 5 END IF IF a$ = "r" AND phelyja >= 1 AND kruokaa(i) > 9 THEN phelyja = phelyja - 1 kruokaa(i) = kruokaa(i) - 10 pruokaa = pruokaa + 10 END IF IF a$ = "R" AND pruokaa >= 10 THEN pruokaa = pruokaa - 10 phelyja = phelyja + 1 kruokaa(i) = kruokaa(i) + 10 END IF WEND END IF CLS RETURN 'Riippuen alkuasukaskylän vihamielisyydestä pelaaja voi onnistua käymään 'heidän kanssaan kauppaa, tai joutua hyökkäyksen kohteeksi. 'Lahjojen anto vähentää vihamielisyyttä. Jos pelaaja hyökkää kylän kimppuun, 'hän voi onnistua saamaan kylän omaisuuden ilmaiseksi. Tämä kuitenkin lisää 'lähikylien vihamielisyyttä hiukan. Kohtaaminen: CLS a$ = "" WHILE a$ <> CHR$(13) LOCATE 2, 10 PRINT "Olet "; kmiehia(i); " alkuasukkaan kylässä." LOCATE 4, 10 PRINT "Alkuasukkaat näyttävät "; IF kviha(i) > .7 THEN PRINT "vihamielisiltä!" n = INT(RND * kmiehia(i) / 10) IF n > pmiehia THEN n = pmiehia LOCATE 5, 10 PRINT n; " retkikuntasi jäsentä menehtyy alkuasukkaiden hyökkäyksessä!" pmiehia = pmiehia - n END IF IF kviha(i) > .1 AND kviha(i) <= .7 THEN PRINT "nuivilta." IF kviha(i) <= .1 THEN PRINT "ystävällisiltä." LOCATE 7, 10 PRINT "(A)nna lahjoja" LOCATE 8, 10 PRINT "(H)yökkää kyläläisten kimppuun" LOCATE 9, 10 PRINT "(K)äy kauppaa" LOCATE 10, 10 PRINT "(P)akene paikalta" LOCATE 12, 10 PRINT "Sinulla on "; pmiehia; " miestä ja "; phelyja; " lasihelyä." LOCATE 13, 10 PRINT "Valitse mitä teet ja paina vastaavaa alkukirjainta." a$ = "" WHILE a$ = "": a$ = INKEY$: WEND IF pmiehia < 1 THEN a$ = CHR$(13) IF a$ = "a" AND phelyja >= 10 THEN phelyja = phelyja - 10 kviha(i) = kviha(i) - RND / 10 IF kviha(i) < 0 THEN kviha(i) = 0 LOCATE 5, 1 PRINT " " END IF IF a$ = "h" THEN kviha(i) = 1 kmiehia(i) = kmiehia(i) - INT(RND * pmiehia) IF kmiehia(i) < pmiehia OR RND < .1 THEN LOCATE 5, 10 PRINT "Alkuasukkaat antautuvat. Takavarikoit kylästä kaiken ja orjuutat " LOCATE 6, 10 PRINT "kansalaiset." pkultaa = pkultaa + kkultaa(i) pruokaa = pruokaa + kruokaa(i) pmiehia = pmiehia + kmiehia(i) kkultaa(i) = 0 kruokaa(i) = 0 kmiehia(i) = 0 a$ = CHR$(i) FOR j = 1 TO kylia kviha(j) = kviha(j) + RND / 10 IF kviha(j) > 1 THEN kviha = 1 NEXT j END IF END IF IF a$ = "k" THEN IF kviha(i) < .1 THEN a$ = CHR$(13) ELSE LOCATE 5, 10 PRINT "''Ei kauppoja ilman lahjoja!'', vastaa päällikkö." END IF END IF IF a$ = "p" THEN a$ = CHR$(13) WEND RETURN
Ja kommentteja kiitos, kuten kaikki sanovat, vaikken tiedäkään, miksi.
Minusta on turhaa lähetellä tänne valmiita pelejä. :)
emt sanonko mitä mieltä olen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.