Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: QB: Atlantis-simulaattori

Chaosworm [02.03.2007 10:00:37]

#

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

Chaosworm [02.03.2007 10:06:43]

#

Ja kommentteja kiitos, kuten kaikki sanovat, vaikken tiedäkään, miksi.

tgunner [03.03.2007 01:24:25]

#

Minusta on turhaa lähetellä tänne valmiita pelejä. :)

moptim [23.03.2007 16:10:02]

#

emt sanonko mitä mieltä olen.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta