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
RETURNJa 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.