Kirjautuminen

Haku

Tehtävät

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

Sivun loppuun

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

peran [23.04.2023 14:31:35]

#

Commodore Pet-tietokoneelle viritetty matopeli.

rem matopeli pet:lle pokeamalla ...

rem s=score
rem l=madon pituus
rem ii,jj = suunta
rem xy=screen characters
rem v = tail x
rem w=tail y
rem h=tail suunta
rem t=status key:lle
rem x,y=paan kohta

rem z=key-arvo
rem u=suunta

5 dim xy(40,25),ii(4),jj(4)
6 for i=0 to 3
7 jj(i)=0
8 ii(i)=0
9 next i
rem naytto alkaa osoitteesta 32768:sta
10 addr=32768:ii(0)=-1:ii(1)=1:jj(2)=1:jj(3)=-1
15 wall=160:print chr$(19);:s=0
20 for y=0 to 24
30 for x=0 to 39
40 c=32:if x=0 then c=wall
45 if x=39 then c=wall
50 if y=0 then c=wall
55 if y<>24 goto 70
60 c=wall
70 poke addr+x+y*40,c
75 xy(x,y)=c
80 next x
85 next y
100 x=19:y=12:xy(x,y)=3+20
rem print chr$(209);chr$(157);
130 poke addr+x+y*40,81

200 for i=1 to 10:get c$:nexti
210 get c$:if c$="" goto 210
213 a=rnd(-ti)

215 l=1+int(5*rnd(1))
217 s=s+l
220 x=19:v=x

230 y=12:w=y:u=3
232 xy(x,y)=20+3
236 print chr$(19);s
240 sx=int(rnd(1)*38)+1
245 sy=int(rnd(1)*23)+1
250 if xy(sx,sy)<>32 then 240
255 poke addr+sx+40*sy,83
rem print chr$(211);:sydan
265 poke addr+x+y*40,81

rem sydan on 200, wall on 160
400 xy(sx,sy)=200
420 l=int(rnd(1)*5)+1

rem alustus tehty
500 get c$
510 if c$="a" then u=0
520 if c$="d" then u=1
530 if c$="s" then u=2
540 if c$="w" then u=3
550 xx=x:yy=y
rem 550 xy(x,y)=u+20
610 x=x+ii(u)
620 y=y+jj(u)
630 poke addr+x+y*40,81
rem 650 for k=0 to 100:next k
700 if xy(x,y)<>32 then 900
705 xy(xx,yy)=20+u
710 if l=0 then 740
720 l=l-1
730 goto 500
rem tahan laita madon pituuden kasvattaminen
740 h=xy(v,w)-20
rem tutkitaan bugiseeko madon historia
750 if h>3 then print h:poke addr+v+w*40,0:end
755 if h<0 then print h:poke addr+v+w*40,128:end
rem koska ohjelma ei loppunut, niin ei siis bugissut
757 xy(v,w)=32:poke addr+v+w*40,32

760 v=v+ii(h)
780 w=w+jj(h)
rem poke addr+v+w*40,32:rem xy(v,w)=32
890 goto 500

rem osuma: matoon, reunaan tai sydameen
900 if xy(x,y)=200 then 1000
910 print "score:";s
990 end
1000 xy(xx,yy)=u+20
1005 m=int(rnd(1)*38)+1
1010 n=int(rnd(1)*23)+1

1020 if xy(m,n)<>32 then 1005
rem sydan on pokena 83
1030 xy(m,n)=200:poke m+40*n+addr,83
1050 l=int(rnd(1)*4)+1
1060 s=s+l

rem scoret nakyviin !!!!!
1100 print chr$(19);s;
1110 if s>1400 then 1200
1150 goto 500
1200 print "pelasit pelin maksimipisteeseen!!!"
1210 print "onneksi olkoon !!!"
1220 end
run
rem edit aanen lisaaminen matopeliin.
1002 poke 59467,16:poke 59466,85:poke 59464,125:poke 59464,0

Emulaattorissa voi testata, mikäli ei ole käytettävissä alkuperäista Pet-tietokonetta.

https://www.masswerk.at/pet/

jalski [24.04.2023 08:35:30]

#

Vanhoista retro tietokoneista oma suosikkini on 8-bittinen SAM Coupé. Itse omistan tämmöisen kovalevyllä piristettynä. Kovalevyllä suurin osa koneelle tehdyistä softista mukaan lukien useamman kaupallisen pelin lähdekoodit kuten esimerkiksi Lemmings. Koneen Basic-tulkki on syntaksiltaan jo melko moderni.

Löysin nopealla Googlettamisella pienen matopelin.

peran [24.04.2023 20:33:33]

#

jalski kirjoitti:

Vanhoista retro tietokoneista oma suosikkini on 8-bittinen SAM Coupé. Itse omistan tämmöisen kovalevyllä piristettynä. Kovalevyllä suurin osa koneelle tehdyistä softista mukaan lukien useamman kaupallisen pelin lähdekoodit kuten esimerkiksi Lemmings. Koneen Basic-tulkki on syntaksiltaan jo melko moderni.

Joo, ja kone itsessäänkin on melko moderni, mikäli wikipediaa on uskominen...
https://en.wikipedia.org/wiki/SAM_Coupé

Itselleni tämä oli "uusi" tuttavuus. Itse puhun vanhoista tietokoneista vintage-tietokoneina, mutta tämä SAM Coupé voinee olla myös retroa, kun on jonkinlaista yhteensopivuutta ZX-Specktrumin kanssa, mikäli oikein tavasin wikipedian artikkelista.

Grez [24.04.2023 20:48:12]

#

Saahan nykykoneisiinkin yhteensopivuustilan ZX-spectrumin kanssa :p

Mut joo itselle tuli vähän MSX2, MSX2+ fibat tuosta (Z80 ja isompaa muistia ja parempaa grafiikkaa kuin yleisimmissaä Z80-koneissa). Joillakin kavereilla oli tuollaisiakin, mutta itsellä oli siinä vaiheessa jo Amiga.

peran [25.04.2023 11:16:33]

#

Grez kirjoitti:

Saahan nykykoneisiinkin yhteensopivuustilan ZX-spectrumin kanssa :p

Sellaisen käyttäminen on tietenkin retroilua.

Grez kirjoitti:

Mut joo itselle tuli vähän MSX2, MSX2+ fibat tuosta (Z80 ja isompaa muistia ja parempaa grafiikkaa kuin yleisimmissaä Z80-koneissa). Joillakin kavereilla oli tuollaisiakin, mutta itsellä oli siinä vaiheessa jo Amiga.

Joo Amiga oli kova. Itse siirryin MS-DOS-aikaan n. 90-vuonna tai ainakin 90-luvulla. Toki tuolloin Amiga oli kovempi kone kuin MS-DOS, mutta jo silloin näki, että pidemmässä juoksussa PC ohittaa Amigan.

walkout_ [04.05.2023 01:36:10]

#

Meillä oli lapsena Specktravideo, joka oli joku vähän tuntemattomampi kuten C64 taas ei ollut. https://fi.wikipedia.org/wiki/Spectravideo

HannuTapio [04.05.2023 22:09:34]

#

Retroa,

Spectravideo pelit olivat laadukkaampia, ja enemmän iloa tuottavia mitä c64 pelit, eteenkin kaksinpeleinä, muistan Konami moduulit.

Konami Hyper Sports 3, oli paras moduuli, mitä omistin.
Konami Boxing, oli superia kaksinpelinä.
Konami Golf ja Tennis.
Yie ar Kung-fu.
Yksinpeleinä, Knightmare ja Nemesis I ja King's Valley.

Kaksinpeleinä Spectravideo MSX oli värikkäämpi, iloisempi, mitä c64 ja pelit olivat paremman musiikin ja muun ääni efektin kanssa, mitä c64.

Minä pidän MSX kaksinpeleistä, enemmän, mitä jopa Amiga peleistäni, mitä olikaan, vain Amiga International Karate+ ja Sensible Soccer kilpailevat MSX kanssa pelaamisen tasossa, ilon tuottamisessa, myös Amigan Defender of the Crown oli kova peli.

:) :) :)

--

_Pete_ [24.05.2023 10:45:31]

#

HannuTapio kirjoitti:

Minä pidän MSX kaksinpeleistä, enemmän, mitä jopa Amiga peleistäni, mitä olikaan, vain Amiga International Karate+ ja Sensible Soccer kilpailevat MSX kanssa pelaamisen tasossa, ilon tuottamisessa, myös Amigan Defender of the Crown oli kova peli.

:) :) :)

--

Onko odotettavissa lauta peli kaksin pelejä MSX:lle tulevaisuudessa?

HannuTapio [24.05.2023 17:45:24]

#

Jatkoja,

Olen miettinyt Amiga emulaattorilla, tehdä jotain, mutta, juuri nyt on kaikki niin kiireistä, että, ei ehdi ihan lähi vuosina, aion tehdä nämä jo ilmoitetut lauta- ja laatta- ja bonuspelit nyt seuraavana.

Mahdollisesti joskus vuosien kuluttua, voi tulla Amiga retroja lautoina.

:) :) :)

Minulle on annettu lupa myös pyytää kaupalliselle sektorille kaupallisia lautapelejä, minä olen rakentana ensimmäiset versiot sellaisista kaupallisista lautapeleistä kuin Carcassonne, Ticket to Ride ja Flamme Rouge, 70 ja 80 lukujen aikana nuoruudessani, minulla on lupa pyytää vielä lisääkin kaupallisia pelejä, ne kehittyneet, sitten tekee ne pyytämäni.

Aika hienoa, mutta, tämä oli jonkun toisen ketju taas, jutellaan minun aiheitani, minun ketjuissa, sitten näin.

:) :) :)

--

_Pete_ [30.05.2023 08:11:24]

#

HannuTapio kirjoitti:

(24.05.2023 17:45:24): Jatkoja, Olen miettinyt Amiga...

Aika omistuista että jonkin pyytämiseen pitää saada lupa? Mistä näitä pyytämislupia voi hakea?

HannuTapio [30.05.2023 10:06:39]

#

Toisen juttu ketjua,

Tämä on nimimerkki 'peran' retro juttelu ketjua ..

:)

--


Sivun alkuun

Vastaus

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

Tietoa sivustosta