Datat hukassa muistista (omasta siis)

Aloittaja vonlaama, elokuu 30, 2016, 08:30

« edellinen - seuraava »

vonlaama

Nyt kun emun sain koneelle, niin pitäisi tekstiseikkailupeli pojalle nakertaa. Viimeksi Basicilla koodannut 30v sitten niin paljon päässyt unohtumaan ja sekin kone Salora Manager millä askartelin.

Muutama noobie kysymys...

Jos on T, T$ arvot, numereeninen ja kirjaimillinen  niin mikä on pointti T% arvolla?
Mites datat saa käyttöön kun kirjoitta esim.

10 Data jalkapallo,kasipallo,pallo

Onko DIM pakollinen alkuun kun alustetaan jotain?

Antti

Ei tuo Basic kovin vahvalla pohjalla mullakaan ole, mutta

Lainaus käyttäjältä: vonlaama - elokuu 30, 2016, 08:30
Jos on T, T$ arvot, numereeninen ja kirjaimillinen  niin mikä on pointti T% arvolla?
T = reaaliluku
T$ = merkkijono
T% = kokonaisluku

Lainaa
Mites datat saa käyttöön kun kirjoitta esim.
10 Data jalkapallo,kasipallo,pallo
Datat luetaan READ-komennolla.
20 READ A$, B$, C$

Lainaa
Onko DIM pakollinen alkuun kun alustetaan jotain?
DIMillä luodaan taulukko.

Ja esim. tuolta voi palautella lisää Basicia mieleen: https://www.c64-wiki.com/index.php/BASIC

virgo

#2
DIM käskyllä määritellää muisti alkioiden koko joka pitää siis ennakkoon tietää lukua ei voi lennossa enään muuttaa
ellei tyhjennä kaikkia muuttujia kerralla (siihen löytyy yksi käsky)

ilman DIM arvoa def määrä on 10 alkiota sitä suurempi antaa aina virheilmoituksen
esim.
10 a$(1)="seinäkello"
20 a$(10)="ovi"

tämä on ihan ok
mutta
10 a$(11)="lukko"

antaa virheen ellei alkioita määrittele suuremmaksi DIM käskyllä
esim.

10 dim a$(11)
20 a$(11)="lukko"

dim määrittelee a$(x) muuttujan suurimman arvon joka on x
esim. edellisen esimerkin jälkeenkään ohjelmassa ei hyväksytä muuttujaa a$(12) koska se olisi liian suuri varatuihin määriin joka olis nyt max 11

monesti näkee texti seikkailuissa tapaa jossa texti on Data lausekeissa
100 data 10,0,0,9,"tämä on huone jossa makaa..."

ensimmäiset luvut ovat mihin huoneisiin kyseisestä huoneesta pääsee
ja sitten kuvaus millainen nykyinen huone on

monesti tämä data luetaan alussa muuttujiin mutta tässä piilee pieni ongelma
kun pelin koodi kasvaa ja huoneita tulee lisää
muuttujiin luetu tavara on pois käytettävästä muistista koska sama tavara on jo Data lauseissa
huonekuvauksiin tarvittava muisti käytetään siis kahteen kertaan

tämä on helppo ymmärtää koska muuttujia on huomattavasti helpompi käsitellä kuin
datana jouduttaisiin aina lukemaan alusta loppuun kunnes oikea huone löytyisi
siksi esim. Aikaetsivässä kaikki kuvaukset on siiretty Relatiivi tietokantaan joka on levykkeellä
ja näin koko koneen muisti on käytettävissä itse peliin

data käskyn voi korvata myös seq tiedostona josta ne luetaan muuttujiin
vastaavasti kuin data käskystäkin ongelmana on ettei kerralla voi editoida kuvauksia ja ohjelmaa :(

Ps. Data käsky vaatii kirjoitetulle textille " " merkit alkuun ja loppuun
muuten data käskyn sisältämä tieto määritellään numeroiksi tai muuttujiksi
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

vonlaama

Kiitoksia molemmille vastauksista ja editoten Virgolle kattavasta kirjoituksesta.
Noita emu tekstareita ladannut ja yrittänyt listauksesta muistella asioita.
Moneen saa listauksen suoraan näkyviin mutta joissain täytyy poistaa eka rivi jotta näkee.
Mimmosia kikkoja noihin listauksien salaamisen purkuun on?
Joskus vaan on yks rivi jossa sys komento.

T% siis on kokanaisluku eikä siinä voi olla vaikka arvoa 1.25?

virgo

>T% siis on kokanaisluku eikä siinä voi olla vaikka arvoa 1.25?

juu ei

suojaus joka estää List komennon käytön
on usein pelkkä rem lauseke jossa sulkeiden sisällä on merkki jono joka huijaa komentotulkkia
käynnistämään jonkin Basic komennon samaa suojausta voi käyttää myös fileiden nimissä levykkeellä ja kassulla
tämä tietenkin poistuu kun poistaa kyseisen rivin

Vicessä voi kokeilla Finalcardridge imagea jossa on sisään rakennettuna tuon suojauksen esto
ja hakemistoja ja Basic listauksia voi katsella kuin suojausta ei olisikaan
varmasti jostain löytyy tähän oma ohjelmansakin joka ladataan ennen varsinaista peli ohjelmaa

jos ohjelma alkaa Sys komennolla se melko varmasti on konekielinen ohjelma joka ei Basic tulkkia tarvitse kuin ohjelman käynnistykseen
eikä siitä listausta Basicin alaisuudessa esille saa

toki voidaan käyttää konekieli ohjemaa siirtämään muistissa oleva Basic ohjelma oikeaan muistiosoitteeseen
jotta sitä voidaan ajaa kuin normaalia Basic ohjelmaa tai määrilellä Basic ohjelman alku osoite uudeleen
eikä ohjelma koodia pääse katsomaan ennen käynnistystä toki tämän jälkeen pitää varmistaa ettei
koneen resetinkään jälkeen pääse Basic koodia näkemään
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

vonlaama

Sen verran muistin että jos sys käsky alussa niin ohjelma tehty muulla kuin basicilla.

Pelin ideaa on että käy koulu loppuun. Jonkin verran sitä jo askarellut, mutta hakusessa on perus moodi etelä,itä yms.
Nythän toi on askarellettu 1-4 valintaan ja satunnais käskyllä tulee eri vaihtoehtoja vastaukseen.
Jotenkin jäårkevämminkin olisi kai saanut, listaus on jo pitkä. Gosubilla saa onneksi input tai get a$ samaan riviin.
Syy pitkään listaukseen on rnd käyttöön, tää ei nyt tulosta sataunnaisgeneraattorin käskyä, mutta tiedätte varmaan mitä tarkoitan. randomin hyvöksy :)

Nyt peli on 1-4 vaihtoehtoa ja jokaisessa randomin tuoma vaikutus. Nyt se keirtää alusta loppuun, jos wilmaan merkintää tai jälkkäriä tai lintsausta yms. niin peli päättyy kun 5 merkintäää.

Tohon etelä, itä yms kun saisi kattavat neuvot niin olisin tyytyväinen. Yrittänyt listauksista katsoa niitä, muttta ei avaudu meikäläiselle. Siellä on jo muuttujia niin paljon että ei pysy mukana.

virgo

#6
näpertelin ulkomuistista äkkiä pienen ohjelman pätkän joka ehkä selventää asiaa hieman

10 Rem "X= huoneiden määrä H=huone jossa ollaan"
20 x=4:h=1:rem aloitetaan huoneesta 1
25 dim i(x),l(x),e(x),p(x),hu$(x)
30 for t=1 to x:read i(t),l(x),e(x),p(x),hu$(x):next
40 rem----------------------------------------------
50 print hu$(h)
55 print "voit kulkea ";
60 if i(h)>0 then print "itään";
65 if l(h)>0 then print "länteen";
70 if e(h)>0 then print "etelään";
75 if p(h)>0 then print "pohjoiseen";
80 print
90 input "mitäs tehdään ";a$
100 if a$="i" then 200
110 if a$="l" then 210
120 if a$="e" then 220
130 if a$="p" then 230
140 print "anteeksi en ymmärrä ?":goto 50
199 .
200 if i(h)>0 then:h=i(h)
205 goto 50
210 if l(h)>0 then:h=l(h)
215 goto 50
220 if e(h)>0 then:h=e(h)
225 goto 50
230 if p(h)>0 then:h=p(h)
235 goto 50

1000 data 2,0,4,0:rem huoneen 1 data
1001 data "olet synkässä 1 huoneessa."
1002 data 0,1,3,0:rem huoneen 2 data
1003 data "olet synkässä 2 huoneessa."
1004 data 0,4,0,2:rem huoneen 3 data
1005 data "olet synkässä 3 huoneessa."
1006 data 3,0,0,1:rem huoneen 4 data
1007 data "olet synkässä 4 huoneessa."
Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

vonlaama

Kiitoksia jälleen,tosta aukeni meikäläisellekkin perusteet :)

virgo

Kuten huomasit niin varasin 0 huonee johonkin spesiaaliin :)
Huone numeron muuttamisella miinus puoleiseksikin saa joitakin asioita helpotettua
mutta se vaatii taas muutoksia tuossa kulku hommassa

muistaakseni itse käytin miinus merkkisiä numeroita merkkaamaan mitkä kulkusuunnat olivat lukossa tms.

mielenkiintoinen rorbleema on myös miten avata ovet niin että ne aukeavat ja menevät kiinni huoneessa jossa olet ja siinä mihin olet menossa :)

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500

vonlaama

Lainaus käyttäjältä: virgo - syyskuu 04, 2016, 19:23
Kuten huomasit niin varasin 0 huonee johonkin spesiaaliin :)
Huone numeron muuttamisella miinus puoleiseksikin saa joitakin asioita helpotettua
mutta se vaatii taas muutoksia tuossa kulku hommassa

muistaakseni itse käytin miinus merkkisiä numeroita merkkaamaan mitkä kulkusuunnat olivat lukossa tms.

mielenkiintoinen rorbleema on myös miten avata ovet niin että ne aukeavat ja menevät kiinni huoneessa jossa olet ja siinä mihin olet menossa :)
No jaa, tossa yritin vkl saada koodia ja lunttailla vastaavista huonepeleistä, mutta vaikeata tuntu olevan. Toi kulun koodaminenkin vielä takkuaa saati sitten että pitäisi jotain tavaroita olla siellä ja ottaa mukaan ne.

Ideahan olisi että 9v jannu ei sitä heti ratkaise ja randomi muuttujia pitäisi olla ainakin jossain vaiheessa. Vai kuinka vaikea se on tommsessa toteuttaa? Esim. menee etelään ja siellä vaihtoehtona vaan luokka. Siteen pitäisi saada joku muuttuja että menikö tunti hyvin, oliko kirjat mukana yms....jos ei niin sitten sanktiota mitkä lasketaan ja peli loppuu jos sanktiot tulleet täyteen.

Varmaan se 0 huone sitten että peli läpäisty?

Tää demo minkä askarellut niin perustuu 2-4 vaihtoehtoon valinnassa, ja jokaisessa valinnassa on yks tai sen päälle satunnaisluvulla tuotettu jatkomahku tai takaisinpäin peliä. Hitosti koodia ja peli ei juurikaan etene. Joku järkevämpi täytyisi keksiä.


virgo

Genetic-PET C64 BBS:
g-point.tunk.org port 1025

Genetic-point Amiga BBS:
g-point.tunk.org port 500