Kirjautuminen

Haku

Tehtävät

Koodit: QB: Rallipeli

Kirjoittaja: Qman

Kirjoitettu: 31.05.2006 – 31.05.2006

Tagit: pelinteko, koodi näytille, peli, vinkki, DOS

Paranneltu versio Antti Laaksosen kaahailusta parkkipaikalla.
tässä on mm. uusia automalleja(vaihtuu välilyönnistä), bensamittari, aika, turbot(nollasta)

törmäystarkistus saisi kuitenkin olla parempi(ehdotuksia, ehdotuksia)...
Pitemmittä puheitta, itse asiaan:

DECLARE SUB piirrakentta ()

SCREEN 13
DIM SHARED x AS SINGLE, y AS SINGLE, tankki AS INTEGER, vari AS SINGLE
DIM SHARED malli AS INTEGER, turbo AS INTEGER, xs AS SINGLE, ys AS SINGLE
pii = 4 * ATN(1)
col = 35
x = 290                                         'sijoitetaan auto
y = 100
kaantyvyys = 1
nopeus = 3
kulma = 60
LINE (0, 0)-(320, 200), 0, BF
DO
  LINE (x - 30, y - 30)-(x + 30, y + 30), 0, BF
  x = x - SIN(kulma * 2 * pii / 360) * nopeus
  y = y - COS(kulma * 2 * pii / 360) * nopeus
 IF malli = 0 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5c14r2br4r2br1bd1 c0l10"
  DRAW "d1br1c1r8c0br1d1bl1c1l8c0bl1d1"
  DRAW "br1c1r8c0br1d1bl1c1l8c0bl1d1"
  DRAW "c0r10d1bl1c3l8bl1c0d1r10"
  FOR i = 1 TO 5
    DRAW "d1bl1c1l8c0bl1d1br1c1r8c0br1d0"
  NEXT
  DRAW "d1l10bd1br1c4r0br8r0"

 ELSEIF malli = 1 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c10 r3br2r3br1bd1c0l10"             'etuvalot
  DRAW "d1br1 c8 r8c0br1d1bl1 c2 l8c0bl1d1"     'katto
  DRAW "br1 c8 r8c0br1d1bl1 c2 l8c0bl1d1"       'katto
  DRAW "c0r10d1bl1 c7 l8bl1c0d1r10"             'lasi
  FOR i = 1 TO 4                                'pituus
    DRAW "d1bl1 c2 l8c0bl1d1br1 c8 r8c0br1d0"   'katto
  NEXT
  DRAW "d1l10bd1br1 c4 r1br6r1"                 'takavalot

 ELSEIF malli = 2 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c14 r2br4r2br1bd1 c0 l10"           'etuvalot
  DRAW "d1br1 c14 r8c0br1d1bl1 c14 l8c0bl1d1"   'katto
  DRAW "br1 c14 r8c0br1d1bl1 c14 l8c0bl1d1"     'katto
  DRAW "c0r10d1bl1 c3 l8bl1c0d1r10"             'lasi
  FOR i = 1 TO 8                                'pituus
    DRAW "d1bl1 c14 l8c0bl1d1br1 c14 r8c0br1d0" 'katto
  NEXT
  DRAW "d1l10bd1br1 c4 r1br6r1"                 'takavalot

 ELSEIF malli = 3 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c14 r2br4r2br1bd1 c0 l10"           'etuvalot
  DRAW "d1br1 c13 r8c0br1d1bl1 c13 l8c0bl1d1"   'katto
  DRAW "br1 c13 r8c0br1d1bl1 c13 l8c0bl1d1"     'katto
  DRAW "c0r10d1bl1 c11 l8bl1c0d1r10"            'lasi
  FOR i = 1 TO 3                                'pituus
    DRAW "d1bl1 c5 l8c0bl1d1br1 c5 r8c0br1d0"   'katto
  NEXT
  DRAW "d1l10bd1br1 c12 r2br4r2"                'takavalot
 ELSEIF malli = 4 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c14 r2br4r2br1bd1 c0 l10"           'etuvalot
  DRAW "d1br1 c0 r8c0br1d1bl1 c0 l8c0bl1d1"     'katto
  DRAW "br1 c0 r8c0br1d1bl1 c0 l8c0bl1d1"       'katto
  DRAW "c0r10d1bl1 c18 l8bl1c0d1r10"            'lasi
  FOR i = 1 TO 8                                'pituus
    DRAW "d1bl1 c0 l8c0bl1d1br1 c0 r8c0br1d0"   'katto
  NEXT
  DRAW "d1l10bd1br1 c12 r2br4r2"                'takavalot
 END IF
  kulma = kulma + kaantyvyys                    'käännetään autoa
  IF kulma > 360 THEN                           'vaihdetaan autoa
    kulma = kulma - 360
    malli = malli + 1
      IF malli > 4 THEN malli = 0               'tarkistetaan, ettei tule olemattomia autoja
  END IF
  col = col + 1 / 4                             'lisätään väriä
  IF col > 60 THEN col = 35
  COLOR col
  LOCATE 13, 16: PRINT "QB-Ralli";
  COLOR 25
  LOCATE 24, 34: PRINT "(c)Qman";
  WAIT &H3DA, 8
LOOP UNTIL INKEY$ <> ""
'itse peliin;
alku:
x = 40                                          'määritellään auton ominaisuudet
y = 120
kaantyvyys = 10                                 'kannattaa
nopeus = 0                                      'testata
kulma = 0                                       'eri
turbo = 1                                       'vaihtoehtoja
tankki = 3000
kierros = 1
aikass = 0                                      'nollataan laskuri
aikas = 0
aikam = 0

'näytön tyhjennys
  LINE (0, 0)-(320, 200), 8, BF
DO

  'vanhojen jälkien siivous
  LINE (x - 30, y - 30)-(x + 30, y + 50), 8, BF

  x = x - SIN(kulma * 2 * pii / 360) * nopeus   'liikutetaan autoa
  y = y - COS(kulma * 2 * pii / 360) * nopeus


 IF x > 330 THEN x = 0                          'lasketaan, meneekö auto reunan yli
 IF x < 0 THEN x = 330                          'jos menee,
 IF y > 210 THEN y = -10                        'palautetaan toiseen reunaan
 IF y < -10 THEN y = 210

 IF nopeus > 2 THEN nopeus = nopeus - 1 / 50    'jos on turbot päällä, hidastetaan

  'auton piirtäminen
 IF malli = 0 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5c14r2br4r2br1bd1 c0l10"
  DRAW "d1br1c1r8c0br1d1bl1c1l8c0bl1d1"
  DRAW "br1c1r8c0br1d1bl1c1l8c0bl1d1"
  DRAW "c0r10d1bl1c3l8bl1c0d1r10"
  FOR i = 1 TO 5
    DRAW "d1bl1c1l8c0bl1d1br1c1r8c0br1d0"
  NEXT
  DRAW "d1l10bd1br1c4r0br8r0"

 ELSEIF malli = 1 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c10 r3br2r3br1bd1c0l10"             'etuvalot
  DRAW "d1br1 c8 r8c0br1d1bl1 c2 l8c0bl1d1"     'katto
  DRAW "br1 c8 r8c0br1d1bl1 c2 l8c0bl1d1"       'katto
  DRAW "c0r10d1bl1 c7 l8bl1c0d1r10"             'lasi
  FOR i = 1 TO 4                                'pituus
    DRAW "d1bl1 c2 l8c0bl1d1br1 c8 r8c0br1d0"   'katto
  NEXT
  DRAW "d1l10bd1br1 c4 r1br6r1"                 'takavalot

 ELSEIF malli = 2 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c14 r2br4r2br1bd1 c0 l10"           'etuvalot
  DRAW "d1br1 c14 r8c0br1d1bl1 c14 l8c0bl1d1"   'katto
  DRAW "br1 c14 r8c0br1d1bl1 c14 l8c0bl1d1"     'katto
  DRAW "c0r10d1bl1 c3 l8bl1c0d1r10"             'lasi
  FOR i = 1 TO 8                                'pituus
    DRAW "d1bl1 c14 l8c0bl1d1br1 c14 r8c0br1d0" 'katto
  NEXT
  DRAW "d1l10bd1br1 c4 r1br6r1"                 'takavalot

 ELSEIF malli = 3 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c14 r2br4r2br1bd1 c0 l10"           'etuvalot
  DRAW "d1br1 c13 r8c0br1d1bl1 c13 l8c0bl1d1"   'katto
  DRAW "br1 c13 r8c0br1d1bl1 c13 l8c0bl1d1"     'katto
  DRAW "c0r10d1bl1 c11 l8bl1c0d1r10"            'lasi
  FOR i = 1 TO 3                                'pituus
    DRAW "d1bl1 c5 l8c0bl1d1br1 c5 r8c0br1d0"   'katto
  NEXT
  DRAW "d1l10bd1br1 c12 r2br4r2"                'takavalot

 ELSEIF malli = 4 THEN
  DRAW "bm" + STR$(INT(x)) + "," + STR$(INT(y))
  DRAW "TA" + STR$(kulma)
  DRAW "bu5 c14 r2br4r2br1bd1 c0 l10"           'etuvalot
  DRAW "d1br1 c0 r8c0br1d1bl1 c0 l8c0bl1d1"     'katto
  DRAW "br1 c0 r8c0br1d1bl1 c0 l8c0bl1d1"       'katto
  DRAW "c0r10d1bl1 c18 l8bl1c0d1r10"            'lasi
  FOR i = 1 TO 9                                'pituus
    DRAW "d1bl1 c0 l8c0bl1d1br1 c0 r8c0br1d0"   'katto
  NEXT
  DRAW "d1l10bd1br1 c12 r2br4r2"                'takavalot
 END IF

 IF nopeus = 2 THEN kaantyvyys = 20
 IF nopeus < 2 THEN kaantyvyys = 10
 IF nopeus > 2 THEN kaantyvyys = 25

  'näppäimien luku
  SELECT CASE INKEY$
  CASE CHR$(32)
    malli = malli + 1                           'vaihdetaan mallia
    IF malli > 4 THEN malli = 0
  CASE CHR$(48)
    IF turbo > 0 THEN
    nopeus = nopeus + 2                         'käytetään turbo
    turbo = turbo - 1
    ELSEIF turbo = 0 THEN nopeus = 1 + 1 / 2    'jos käyttää olemattomoa turboja, rangaistaan
    END IF
  CASE CHR$(0) + CHR$(72)
    IF nopeus > 2 THEN
                  nopeus = nopeus
    ELSE
    nopeus = nopeus + 1 / 2
    IF nopeus > 2 THEN nopeus = 2               'kaasutetaan
    END IF
  CASE CHR$(0) + CHR$(80)
    nopeus = nopeus - 1 / 2
    IF nopeus < -1 THEN nopeus = -1
  CASE CHR$(0) + "K"
    kulma = kulma + kaantyvyys                  'käännetään
    IF kulma > 360 THEN kulma = kulma - 360     'oikealle...
  CASE CHR$(0) + "M"
    kulma = kulma - kaantyvyys                  '...ja vasemmalle
    IF kulma < 1 THEN kulma = kulma + 360
  CASE CHR$(27)                                 'tauko
  COLOR 4
  PRINT "                                          "
  FOR l = 1 TO 21
    PRINT                                       'ruudun tyhjentäminen
  NEXT
   LOCATE 7, 17: PRINT "Tauko"                  'tämän luulisi kaikkien tietävän
   LOCATE 10, 13: PRINT "Lopeta(L)"
   LOCATE 11, 13: PRINT "Asetukset(A)"
   LOCATE 12, 13: PRINT "Alusta(R)"
   LOCATE 13, 13: INPUT "", tauko$
   IF tauko$ = "l" THEN END
   IF tauko$ = "r" THEN GOTO alku
   IF tauko$ = "a" THEN
     CLS
     LOCATE 7, 17: PRINT "Tauko"
     LOCATE 10, 13: PRINT "Seinät?(K/E)"
     LOCATE 12, 13: INPUT "", tauko$
     IF tauko$ = "e" THEN onkoseinat = 1
     IF tauko$ = "k" THEN onkoseinat = 0
   END IF
   LINE (0, 0)-(320, 200), 8, BF
  END SELECT

  piirrakentta

   LINE (0, 191)-(149, 200), 0, BF

   COLOR 1
   LOCATE 1, 1: PRINT "Bensa:";                 'näytetään bensatilanne
   IF tankki > 2500 THEN                        'vaihetaan
     COLOR 2                                    'väriä
   ELSEIF tankki > 2000 THEN                    'sen mukaan
     COLOR 10                                   'paljonko
   ELSEIF tankki > 1500 THEN                    'bensaa
     COLOR 14                                   'on
   ELSEIF tankki > 1000 THEN                    'tankissa
     COLOR 6
   ELSEIF tankki > 500 THEN
     COLOR 12
   ELSEIF tankki > 0 THEN
     COLOR 4
   END IF
   PRINT tankki / 1000;
   LOCATE 1, 12: PRINT "l";
   COLOR 14
   LOCATE 1, 13: PRINT kierros; "/ 5"           'kierrosten määrä
   COLOR 15
   LOCATE 2, 1: PRINT aikam; ":";               'paljonko aikaa
   LOCATE 2, 4: PRINT aikas;
   turbo = turbo - 1                            'estetään turboa nousemasta liiaksi
   COLOR 3
   LOCATE 25, 1: PRINT "Turbo ";
   COLOR 2
   PRINT "[";
   FOR turbo = 1 TO turbo                       'näytetään silmukoilla
     PRINT "*";                                 'turbon määrä
   NEXT
   LOCATE 25, 11: PRINT "]";
   COLOR 14
   PRINT "<";
   IF tl > 85 THEN PRINT "Û";
   IF tl > 170 THEN PRINT "Û";
   IF tl > 255 THEN PRINT "Û";
   IF tl > 340 THEN PRINT "Û";
   IF tl > 425 THEN PRINT "Û";
   LOCATE 25, 18: PRINT ">";
   IF NOT nopeus = 0 THEN tl = tl + 1           'lisätään turbolaskuriin 1
   IF tl > 500 THEN                             'jos turbolaskuri on täynnä,
   turbo = turbo + 1                            'lisätään turboa
   tl = 0                                       'tyhjätään laskuri
   END IF
   IF turbo > 3 THEN turbo = 3                  'turboja ei saa olla enempää kuin 3
  COLOR 15

   IF onkoseinat = 0 THEN
     IF POINT(x, y + 1) = 15 THEN               'seinätarkistus
       y = y - 1
       nopeus = -.05
     END IF
     IF POINT(x, y - 1) = 15 THEN
       y = y + 1
       nopeus = -.05
     END IF
     IF POINT(x + 1, y) = 15 THEN
       x = x - 1
       nopeus = -.05
     END IF
     IF POINT(x - 1, y) = 15 THEN
       x = x + 1
       nopeus = -.05
     END IF
   END IF

   IF POINT(x, y) = 5 THEN                      'jos käydään varikolla...
     tankki = tankki + 100                      '...lisätään bensaa
     IF tankki > 3000 THEN tankki = 3000        'mutta ei liikaa
   END IF
   IF POINT(x, y) = 11 THEN                     'vaihdetaan kierrosta
     kierros = kierros + 1
     y = 125
   END IF
   IF nopeus > 0 THEN tankki = tankki - nopeus  'tankki vähenee sitämukaa,
   IF nopeus < 0 THEN tankki = tankki + nopeus  'kun liikutaan
   IF tankki < 0 THEN                           'jos ei riitä bensaa...
     COLOR 4
     FOR l = 1 TO 23
       PRINT "                                          "
     NEXT
     LOCATE 7, 17: PRINT "Game Over"            '...hävitään
     LOCATE 10, 13: PRINT "Uudestaan?(K/E)"
     LOCATE 12, 13: INPUT "", tauko$
     IF tauko$ = "e" THEN END
     IF tauko$ = "k" THEN GOTO alku
   END IF
   aikass = aikass + .017                       'lisätään aikaa
   IF aikass > 1 THEN
     aikass = 0
     aikas = aikas + 1
   END IF
   IF aikas > 59 THEN
     aikas = 0
     aikam = aikam + 1
   END IF
     IF kierros = 6 THEN                        'kun voitetaan
       FOR l = 1 TO 23
         PRINT "                                          "
       NEXT
       pisteet = pisteet + tankki               'lasketaan pisteet
       pisteet = pisteet - aikas
       pisteet = pisteet - aikam * 60
       COLOR 9
       LOCATE 9, 15: PRINT "Finish!!!"
       LOCATE 11, 13: PRINT "pisteet:"; pisteet
       END
     END IF
  WAIT &H3DA, 8

LOOP
SUB piirrakentta
  'käännös alhaalta oikealle
  '1: x + 15,y - 25
  '2: x + 30,y - 15
  '3: x + 30,y = y
   LINE (-1, -1)-(321, 201), 15, B

   LINE (15, 140)-(0, 140)
   LINE (15, 50)-(15, 140)
   LINE (15, 50)-(30, 25)
   LINE (30, 25)-(60, 10)

   LINE (60, 10)-(90, 10)
   LINE (90, 10)-(120, 25)
   LINE (120, 25)-(135, 50)
   LINE (135, 50)-(135, 130)

   LINE (135, 130)-(180, 130)
   LINE (180, 130)-(205, 145)
   LINE (205, 145)-(220, 175)
   LINE (220, 175)-(220, 200)

   LINE (75, 50)-(75, 150)
   LINE (75, 150)-(90, 175)
   LINE (90, 175)-(120, 190)
   LINE (120, 190)-(150, 190)
   LINE (150, 190)-(150, 200)

   LINE (75, 150)-(60, 175)
   LINE (60, 175)-(30, 190)
   LINE (30, 190)-(0, 190)

   LINE (150, 0)-(150, 50)
   LINE (150, 50)-(240, 175)
   LINE (240, 175)-(270, 190)
   LINE (305, 140)-(320, 140)

   LINE (220, 0)-(220, 20)
   LINE (220, 20)-(250, 50)
   LINE (280, 90)-(305, 140)
   LINE (305, 140)-(320, 140)

   LINE (250, 20)-(250, 50)
   LINE (250, 20)-(270, 0)
   LINE (280, 90)-(305, 65)
   LINE (305, 65)-(319, 40)
   LINE (319, 40)-(319, 0)

   LINE (330, 190)-(318, 200)
   LINE (270, 190)-(270, 200)

   LINE (270, 0)-(320, 3), 5, BF

   LINE (16, 130)-(74, 135), 11, BF
   LINE (16, 129)-(74, 129), 15
END SUB

Kommentit

Qman [06.06.2006 15:41:16]

#

kommentteja,kitoos

BlueByte [06.06.2006 16:31:47]

#

anna binääriiiää :(

Antti Laaksonen [07.06.2006 01:13:03]

#

Autojen vaihto on hauska idea. Auto muuten kääntyy vähän hassusti nokan ympäri, mutta siitä saan syyttää itseäni.

Qman [07.06.2006 17:29:45]

#

jep, eipä tullu korjattua

Qman [07.06.2006 17:30:48]

#

ne turbot on aika turhat, paitsi jos ottaa seinät pois

polsystem [13.07.2006 17:13:15]

#

Tosi hyvä, mutta ohjaus on noin mahdotonta turboilla.

Qman [16.07.2006 14:56:44]

#

IF nopeus > 2 THEN kaantyvyys = 25

suurenna kaantyvyys- arvoa

moptim [21.07.2006 18:20:23]

#

toimiiks qb 4.5:essa?

Codeprofile [24.11.2006 14:20:58]

#

Mulla ainakin tuo toimii versiossa 4.5.

Chaosworm [02.03.2007 10:46:39]

#

Vau! Ihan hyvä.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta