Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: FreeBASIC: Matopeli eräälle 16-bittiselle tietokoneelle

peran [25.02.2022 20:01:48]

#

Kyseessä on Ti99/4A-tietokoneelle tehty basic-peli. Tahmeahan tämä on, ja rammiakin siinä on mahtavat 4 kt, joten siksi matopeliin hivenen erikoinen ratkaisu, jossa c(x,y)-taulukkoon on tehty 32x24-matriisi, jottei muisti lopu kesken. Muistin pienen koon vuoksi on muuttujien pituus määritelty yhden merkin mittaiseksi.

(Tässä koneessa oli muistaakseni myös tapa lukea näytöltä merkki, mutta sitä ominaisuutta ei tässä ole käytetty, kun en muistanut kyseistä käskyä, enkä googlannut. Lisäksi en osannut liittää merkkiä merkkijonoon kyseisellä basicillä. Kyllähän ohjekirjasta se löytyisi, mutta kuka niitä dokkareita lukee?)

Tätä pystyy ohjaamaan joko Joystickilla tai näppäimistöllä. Emulaattorissa nämä näppäimet ovat kursorit, mutta en tiedä mitkä ne on varsinaisessa tietokoneessa.

Pahoittelut, että teksti on fingelskaa...
... koittakaa kestää.

rem - rivit eivät ole numeroituna, jottei niihin tuhlattaisi liikaa muistia kuluttamaan.

Joku vois tehdä vastineen Vic 20:lle, jos on liikaa aikaa. Kuusnepalle se on aivan liian yksinkerteista, kun siinä on niin valtavasti muistia.

rem TÄSTÄ ALKAA MATOPELI

rem s= score
rem l=madon pituus
rem i,j = suunta
rem c = screen characters
rem v = tail x
rem w = tail y
rem h = tail suunta
rem t=status key:lle
rem x,y pään kohta

rem z = key-arvo
rem u = suunta
rem 5 call color (15,15,1)
rem 12 call color(5,12,7)
rem call color(set of characters,foreground color, background color)

10 call clear
12 call color(12,9,1)

15 dim i(4),j(4)
17 randomize
20 i(0)=-1
30 i(1)=1
40 j(2)=1
50 j(3)=-1

100 b$="66FFFFFF7E7E3C18"
110 call char(127,b$)
120 b$="183C7EFFFF7E3C18"

125 for k=0 to 4
130 call char(128+k,b$)
135 next k
145 call vchar(1,1,32,758)
150 call vchar(1,1,128,24)
160 call vchar(1,32,128,24)
170 call hchar(1,1,128,32)
180 call hchar(24,1,128,32)
190 dim c(32,24)
200 for k=1 to 32
210 c(k,1)=128
220 c(k,24)=128
230 next k
240 for k=1 to 24
250 c(1,k)=128
260 c(32,k)=128
270 next k
rem suunta 0 eli vasemmalle
280 s=0
310 s=0
320 x=16
330 y=12
340 v=x
350 w=y
360 u=0
370 c(x,y)=128+u

380 m=int(rnd*30)+2
390 n=int(rnd*22)+2
400 c(m,n)=167

410 call hchar(n,m,127)
420 l=int(rnd*5)+1

rem alustus tehtyko ???
500 call key(0,z,t)
510 if z>11 then 550
520 if z<8 then 550
530 u=z-8

540 goto 600
550 call joyst(1,cr,rr)
560 if cr<>-4 then 565
562 u=0
565 if cr<>4 then 570
567 u=1
570 if rr<>-4 then 580
575 u=2

580 if rr<>4 then 600
590 u=3
600 c(x,y)=128+u
605 x=x+i(u)
610 y=y+j(u)
620 call hchar(y,x,128+u)
700 if c(x,y)<>0 then 900
rem lisätty 20220221 ++++++++++++++++++++++++
710 if l=0 then 740
720 l=l-1
730 goto 500
rem tähän laita madon pituuden kasvattaminen +++++++++++
740 h=c(v,w)
750 c(v,w)=0
755 if h>127 then 760
757 print "h=";h;v;w;x;y
758 print "bugisee"
759 end
760 v=v+i(h-128)
780 w=w+j(h-128)
790 call hchar(w,v,32)
890 goto 500

rem Osuma, joko reunaan tai sydämmeen
900 if c(x,y)=167 then 1000
910 print "p:";s
990 end
1000 m=int(rnd*30)+2
1010 n=int(rnd*22)+2
1020 if c(m,n)<>0 then 1000
1030 c(m,n)=167
1040 call hchar(n,m,127)
1050 l=int(rnd*4)+1
1060 s=s+l

rem scoret näkyviin !!!!
1070 s$=str$(s)
1080 for k=1 to len(s$)
1085 call vchar(1,15+k,asc(seg$(s$,k,1)))
1090 next k

1100 call sound(100,880,2)
1110 if s>600 then 1200
1150 goto 500
1200 print "Pelasit pelin maksimipisteeseen!"
1210 print "Onneksi olkoon!!!"
1220 end

rem matopeli loppuu tähän !!!!!!

peran [27.02.2022 17:08:09]

#

No räpelsin itse vic20-version...

5 a=4096+2000
rem i-apumuuttuja madon suunnalle
7dimi(4):i(0)=-1:i(1)=1:i(2)=22:i(3)=-22
rem näyton ja apumuistin tyhjennys
10fori=1to22*23:poke38399+i,160:poke7679+i,32:pokea+i-1,0:nexti
rem reunojen tekeminen pelialueelle

200fork=0to21
210poke(a+k+0*22),128
220poke(a+k+22*22),128
230poke7680+k,160:poke7680+k+22*22,160:poke7680+k*22,160
240poke7680+21+k*22,160
250poke(a+k*22),128
260poke(a+21+k*22),128
270nextk
rem pisteiden alkuarvo 0
310s=0
rem koordinaattien keskelle x,y
320x=10+22*11
rem madon putsaaja-muuttujat v,w
340v=x
350w=y
rem suunta 0 eli vasemmalle
360u=0
370poke(a+x),128+u

rem arvo ensimmäiselle sydämelle paikka näytössä
380m=int(rnd(0)*500)+1
395ifpeek(a+m)<>0then 380

rem 400poke(a+m),167
rem tulosta ensimmäinen sydän näytölle
410poke7680+m,83
415poke38400+m,2+16*0
417pokea+m,167

420l=int(rnd(0)*5)+1
rem volume nollaan
430poke36878,0
rem sopraano
440poke36876,212

rem Joystick:n ohjaus + ääni päälle
500poke36878,1:s1=peek(37151):poke37154,127:t1=peek(37152):poke37154,255
520if (128andt1)=0 then u=1
530if (16ands1)=0 then u=0
540if (8ands1)=0 then u=2
550if (4ands1)=0 then u=3
rem 560 if (32ands1)=0 then print "fire"
600poke (a+x),128+u
605x=x+i(u)
rem ääntä pönttöön
610poke36878,0
rem madon pään tulostaminen näytölle
620poke7680+x,81

rem tutkitaan madon törmääminen esteeseen
700ifpeek(a+x)<>0 then 900

rem madon pituuden lisääminen, mikäli l:ssä on vielä merkkejä
rem vaatimaan pituuden lisäämistä.
710ifl=0then740
720l=l-1
730goto500
rem tähän laita madon pituuden kasvattaminen +++++++++++
740h=peek(a+v)
rem aputaulukkomuuttuja jouduttu vaihtamaan pokeen...
rem 750 c(v,w)=0
750poke(a+v),0
755ifh>127then760
757print "h=";h;v;w;x
758print "bugisee"
759end
760v=v+i(h-128)
rem 790call hchar(w,v,32)
790poke7680+v,32
890goto500

rem Osuma, joko reunaan tai sydämeen
900ifpeek(a+x)=167then990
rem ääntä pelin loppuun
905poke36878,10
907fork=1to1300:next
908poke36878,0
910fork=1to4000:next
920?"p:";s
922 ? "uusi peli ? [k/e]":inputy$
rem 920 print peek(a+x);x
925 print y$
930ify$="k"then10
940end
868
rem osuma sydämeen
rem tähän tulee uusi sydän
rem ääntä peliin
990poke36878,10
rem arvotaan sydämelle uusi paikka
1000m=int(rnd(0)*500)+1
rem arvotaan uudestaan, mikäli paikasta löytyy jo valmiiksi sydän.
1020ifpeek(a+m)<>0then 1000

1025poke38400+x,160
1030pokea+m,167
rem muutetaan sydämen värikin punaiseksi ?
1040poke7680+m,83:poke38400+m,2

1050l=int(rnd(0)*4)+1
1060s=s+l

rem scoret näkyviin !!!!
1070s$=str$(s)
rem 1080?chr$(asc("S")+128)
rem 1090?s
1080fork=1tolen(s$)
1090poke7680+k,asc(mid$(s$,k,1))
1100next
rem ääntä pois päältä
1105poke36878,0
rem 1100 rem sound(100,880,2)
1110ifs>350then1200
1150goto500
1200print"pelasit pelin maksimipisteeseen!"
1210print"onneksi olkoon!!!"
1220end

peran [10.07.2022 09:24:45]

#

Emulaattoreita kyseisille räpellyksille:

Ti 99/4a
https://js99er.net/#/

Vic 20
https://www.mdawson.net/vic20chrome/vic20.php

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta