Enterprise Forever

:HUN => Játékok => Topic started by: Pgyuri on 2012.December.07. 23:37:53

Title: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.07. 23:37:53
Üdv,

A mai (december 7-i) klubnapon előjött egy téma, amely kicsit megmozgatta a fantáziánk és az lett a vége, hogy ki is írnék egy versenyfelhívást.

Feladat:

1 soros BASIC játékprogram készítés.

Szabályok:

A program kizárólag BASIC program lehet, egyetlen számozott programsorból állhat, gépi kódú programot nem tartalmazhat és nem is hívhat. A gép bekapcsolása és elindulása után semmilyen további előkészület nem végezhető, a program begépelése után azonnal RUN-al kell indítani, bármilyen manipuláció kizáró ok.

Határidő:

Tulajdonképpen az lenne a jó, ha nem lenne, hanem minél több érdekes megoldás készülne, de hogy értelme is legyen a felhívásnak, a bemutatás/elküldés határideje legyen a februári klubnap, vagyis 2013. február 7. csütörtök, 15.00 óra.

Értékelés:

A legszínvonalasabb, legjobb megjelenésű, legötletesebb játékot a klubnapon szavazással választjuk ki.

Nyeremény:

A győztes választhat egy EP64 vagy EP128 ...... feliratú ajándékcsomag közül, melyben meglepetés várja, amely remélhetőleg tetszeni fog neki.


Mivel saját magam is szerenék elindulni a versenyen - bár Enterprise BASIC ismereteim jelenleg egyenlőek a nullával - így a beküldés módjáról még egyeztetek és később írok.

Ennek a programírásnak Spectrumon komoly hagyományai vannak, de lehet, hogy mindez Enterprise-on nem lesz lehetséges, bár a programozók mindig megtalálják a lehetetlen teljesítését. Reméljük lesz megoldás!

Byte-ra fel, Enterprise harcosok!

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Tuby128 on 2012.December.07. 23:52:39
Biztos, hogy EP-nél az egy sorba való besúvasztás teljesen támogatott? Még a GOTO utasítás sem igen használható.
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.08. 09:50:44
Ep ebben a versenyben eléggé esélytelen. Ügye a blokkszervező utasításokat külön sorba kell írni.
Title: Re: Egysoros játék felhívás
Post by: lgb on 2012.December.08. 10:32:36
Na ebben nem vagyok biztos, de mintha pl spectrumon igen hosszu sorokat is lehetne irni, viszont EP-n azert annyira nem ... Szal ha adott egy gep amin erosen limitalva van egy basic sor hossza, akkor nem lesz fair egeszen :)
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.08. 12:07:23
Quote from: lgb
Na ebben nem vagyok biztos, de mintha pl spectrumon igen hosszu sorokat is lehetne irni, viszont EP-n azert annyira nem ... Szal ha adott egy gep amin erosen limitalva van egy basic sor hossza, akkor nem lesz fair egeszen :)
254 karakter lehet nálunk is egy sor, azzal nincs gond. Spectrumon talán 255 karakter?
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 12:30:31
Quote from: Lacika
Spectrumon talán 255 karakter?
Megnézve egy Gyuri által elkövetett ilyen programot, (http://www.worldofspectrum.org/infoseekid.cgi?id=0027767)
az a egy sor az egész képernyőt lefedi. Ha jól gondolom, a Spectrum kulcsszavas rendszer miatt 1 utasítás az 1 bájt, így jóval több fér be, amit EP-n ahol a karakterszám számít.
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.08. 13:07:11
Ahhoz, hogy valami értelmeset is csináljon a program, mindenképpen kell bele IF utasítás, az meg nem nagyon csípi maga mellett egy sorban az egyéb hatékony utasításokat. De ha IF van, akkor GOTO vagy CALL is kéne, szóval reménytelennek tűnik számomra. :D
Hacsak ki nem derül, hogy az EP készítői elrejtettek egy beépített játékot a gépben, ami meghívható basicből pl. valami CALL utasítással. :D
Title: Re: Egysoros játék felhívás
Post by: endi on 2012.December.08. 15:01:29
lehet hogy inkább olyat kéne hogy 1Kb-os basic játék
Title: Re: Egysoros játék felhívás
Post by: lgb on 2012.December.08. 15:37:11
Quote from: Lacika
254 karakter lehet nálunk is egy sor, azzal nincs gond. Spectrumon talán 255 karakter?

Arra celoztam h mintha spectrumon akar tobb ezer karakter is lehet egy sor. Viszont ez csak 1 emlekfoszlany, mintha valahol olvastam volna, de nem biztos.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 16:24:59
Quote from: lgb
Arra celoztam h mintha spectrumon akar tobb ezer karakter is lehet egy sor. Viszont ez csak 1 emlekfoszlany, mintha valahol olvastam volna, de nem biztos.
A sor hossz 2 bájton van tárolva, és 1 utasítás 1 bájt.
Nálunk a már tokenizált sor hossza lehet 254 bájt, ebből 1 a hossz, 2 a sorszám, 1 a bekezdési szint, így marad 250 az utasításokra.
Azonban a sor beírásra is van 255-ös korlát, ez jól látszik azzal az érdekességgel, amit a klubnapon találtunk: ha beírunk egy maximális hosszú string megadást, a kilistázott formáját már nem fogadja el a gép, mivel a LET kulcsszóval, ill. sorszám előtti bevezető szóközökkel együtt már túl hosszú.
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.08. 17:58:33
Üdv,

Mint "versenyző", neki is kezdtem az Enterprise BASIC tanulásának, amely tulajdonképpen elég érthető és átlátható rendszer. Ezzel kapcsolatban módosítani kell a kiírást, mert sajnos egy alapvető probléma felmerült a feladat megoldásához, mégpedig a visszacsatolás lehetősége. Neumann elvei alapján a programnak képesnek kell lennie visszalépésre, amely az IS szigorú elvei szerint BASIC programsoron belül csak GOTO-val oldható meg, ez viszont megoldhatatlanná tesz minden játékprogramot, csak primitív, egyszeri futású programok készítésére nyújt lehetőséget.

Módosítás:

A program lényege marad az "egy sorban megvalósítás", de elé elhelyezhető ciklusszervező utasítás, illetve annak lezáró utasítása zárja a programot.

Reagálva a felmerült kérdésekre:

* Spectrumon a bevitel határa egy képernyő - 2 sornyi karakter (704 karakter), amelyben korlátlan számú utasítás lehet, a határ karakterszámban van. Bevitelkor a határ átlépést búgó hanggal jelzi a rendszer. Enterprise-on a bevitel határa Zozo által leírt korlát, ami nem sok, de talán nem is kevés.

* Program írható IF nélkül, még EP-n is, bár valóban kell trükközni, talán jobban is, mint Spectrumon, ahol szabadabb a feltétel elemzés.

* Az 1K-s BASIC program lett volna a következő felhívás (info esetén 1024-nél nem lehet több a programméret)...

Ez a felhívás nem verseny a Spectrummal szemben, hanem egy kis agytorna.

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.08. 18:32:45
Üdv,

Ajaj csupa olyasmibe sikerül botlani, amelyre a BASIC leírás készítői nem is gondoltak, csupa "mókás" hibaüzenet jelenik meg minden utasítás körül, amint egy sorba akarnak kerülni egymással.

A módosított kiírással még egy probléma van, mégpedig a szükséges első alkalommal történő inicializálás. Ehhez a kikerült ciklus-szervezés miatt kellett volna egy IF, ami szintén nem fogad el több utasítást a THEN után, az ELSE ága pedig még meglepőbb eredményt ad (egy példa, még nem egysoros: 10 LET X=1  20 IF X=1 THEN PRINT "HELLO" ELSE PRINT "JOCO" nekem fura üzenetet ad futtatáskor).

és itt be kell látni, hogy ha még az inicializálást is engedjük az adott soron kívülre kerülni, akkor már értelmét veszti az egész dolog.

Még töprengek, kínál-e kerülő megoldást a rendszer, de ha nem, akkor ez egy rendkívül rövid életű verseny felhívás volt :)

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: endi on 2012.December.08. 18:45:20
Szerintem legyen mondjuk 5 sor a határ. Aztán soron belül amennyi belefér!
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 18:52:00
Quote from: Pgyuri
IF, ami szintén nem fogad el több utasítást a THEN után, az ELSE ága pedig még meglepőbb eredményt ad (egy példa, még nem egysoros: 10 LET X=1  20 IF X=1 THEN PRINT "HELLO" ELSE PRINT "JOCO" nekem fura üzenetet ad futtatáskor).
Az üzenet oka, hogy keres egy ELSE nevű változót, amit szintén ki akarna printelni.
THEN után lehet több utasítás (kettősponttal elválasztva), de ez esetben nincs ELSE.
ELSE akkor használható, ha nincs a THEN után semmi:
20 IF X=1 THEN
30 PRINT "HELLO"
40 ELSE
50 PRINT "JOCO"
60 END IF

Itt erősen a strukturált programozásra szoktatták a népet, nem is volt gondom gondom a suliban a Turbo Pascallal, ellentétben a C64-es osztálytársakkal :-)
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.08. 19:07:18
Üdv,

A PRINT "HELLO" ELSE PRINT "JOCO" esetén azért érdekes, hogy elválasztójel nélkül akarja kiírni az ELSE változó értékét....hmmm....alaposan összekever engem, mint kezdőt :)   A struktúrált programozást valóban jól támogatja, viszont most szomorúan konstatálom, hogy épp e miatt zsákutca a kezdeményezés.

Amennyire spectrumos "egysoros" tapasztalataim átgondolom, itt Enterprise-on mindenképpen 5 sorra lenne minimum szükség:

10 inicializálás
20 ciklus szervezés
30 program
40 ciklus zárás
50 záró eredmények

Itt a fő gond az inicializálás korlátozhatatlansága kiírás szintjén, így viszont már semmi értelme a kihívásnak, mert maga a program semmilyen különlegességet nem mutat fel, ami teljesen egyedivé tehetné magát a gépen.

Nem szégyen belátni, vesztettem az Enterprise-al szemben :)  sok : 1  oda

*** KIÍRÁS TÖRÖLVE ***

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 19:12:45
Azért lehetne még mondjuk a javasolt 5 soros verzió!
Vagy mondjuk nem sorokra menni, hanem mondjuk 1K.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 19:26:56
Közben gondolkodtam, hogy mondjuk valami grafikai effektet lehetne-e csinálni egysorosban, de itt jön az a hátrány, hogy kéne egy GRAPHICS utasítás, ami nem lehetne a magát GOTO-zó sorban.
Spectrum esetén egyből grafikus is a képernyő, ott nincs ilyen probléma.
Title: Re: Egysoros játék felhívás
Post by: endi on 2012.December.08. 19:40:50
szerinte az x soros feladvány ugyanolyan jó ep-n mint specyn az 1 soros

5, 10 sor még elég nagy korlát, de mégis lehetőséget ad elég érdekes dolgokra
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.08. 21:26:25
Végül összedobtam egy egysoros "játékot". Bár tényleg játék, lehet versenyezni, ki ér el nagyobb pontszámot. Esetleg még lehet gondolkodni ötleteken, hogyan lehetne bonyolultabbá, érdekesebb tenni, hogy a pontszámot több tényező is befolyásolja, amikre a "játékos" odafigyelhet.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 21:33:32
Quote from: szipucsu
Végül összedobtam egy egysoros "játékot". Bár tényleg játék, lehet versenyezni, ki ér el nagyobb pontszámot.
Eddig 255 pont a rekordom :-)
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.08. 21:51:37
Quote from: Zozosoft
Eddig 255 pont a rekordom :-)
Megdöntöttem, 267 pontot sikerült elérnem. :D
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.08. 22:18:05
Quote from: szipucsu
Megdöntöttem, 267 pontot sikerült elérnem. :D
342 :-)
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.09. 03:57:36
Quote from: Pgyuri
*** KIÍRÁS TÖRÖLVE ***
Ha netán mégse, akkor van egy baromi primitív Kő-papír-ollóm, ami a játék összes alapvető funkcióját megvalósítja:
-begyűjti a géptől, és a játékostól, hogy mit választottak
-eldönti, hogy a játékos nyert, vesztett vagy döntetlen
-kiírja az eredményt

Mindez egyetlen IS-BASIC programsorban, és mindössze három fajta utasítás van használva. :-D
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.09. 10:50:44
Quote from: Zozosoft
Ha netán mégse, akkor van egy baromi primitív Kő-papír-ollóm, ami a játék összes alapvető funkcióját megvalósítja:
-begyűjti a géptől, és a játékostól, hogy mit választottak
-eldönti, hogy a játékos nyert, vesztett vagy döntetlen
-kiírja az eredményt
Benevezek a "versenybe" ezzel a 951 byte-os szösszenettel. Azért ez is 22 sor. (Azért angol, mert Rosetta Code-ra csináltam, ez ide pont jó, mert tömörebb nyelv.)
Igazából a felsoroltakon kívül még a játék végén kapunk egy statisztikát is, ezt még ki lehetne venni.
GOTO, GOSUB utasításokkal szintén lehetne egy-két sort spórolni, de én ilyen "piszkos" munkára nem vagyok kapható... :oops:
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.09. 11:21:57
Statisztika nélkül csak 757 byte.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.09. 14:13:05
Quote from: Lacika
Statisztika nélkül csak 757 byte.
Az enyém 247 :-)
A kilistázott programsor 220 karakter, de sikerült itt valami IS-BASIC bugot találni, mert ebben a formában már nem fogadja el, azt mondja, hogy Statement not allowed after THEN... (ezt már a klubnapos próbálkozások során is láttuk.)
Beírni csak sorszám előtti szóközök, és a LET kulcsszavak törlésével elért rövidítéssel lehet, ebben a formában 196 karakter a sor.
Ezt a törölgetést minden módosításnál el kellett játszani, amikor már ilyen nagy volt a program...

Magát a programot még nem akarom felfedni, törjétek ti is a fejeteket :-D
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.09. 14:35:26
18 sor és 742 byte az utolsó licitem.
Az interaktivitás nem számít az elbírálásnál? :ds_icon_cheesygrin:
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.09. 15:03:31
Quote from: Lacika
18 sor és 742 byte az utolsó licitem.
Az interaktivitás nem számít az elbírálásnál? :ds_icon_cheesygrin:
A felhasználó felületben tuti vezetsz, de te nem az egysoros kategóriában indultál :-)
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.09. 15:18:40
Quote from: Lacika
18 sor és 742 byte az utolsó licitem.
Az interaktivitás nem számít az elbírálásnál? :ds_icon_cheesygrin:
Ezen lehetne rövidíteni, kettővel kevesebb sor lenne.
A következőt le kéne cserélni:
Code: [Select]
   4 FOR I=1 TO 3
    5   LET S(I)=0
    6 NEXT
Erre:
Code: [Select]
  4 LET S(1),S(2),S(3)=0

Sőt, még ezt is meg lehetne oldani csupán két sorban:
Code: [Select]
   9   DO
   10     LET K$=INKEY$
   11   LOOP UNTIL K$>="1" AND K$<="3" OR K$=CHR$(27)

Ez valami ilyesmi lenne:
Code: [Select]
  9 LET K$=INKEY$
   10 IF ........... THEN GOTO 9
Bár lehet, erre írtad, hogy az ilyen piszkos munkára nem vagy kapható. :D
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.09. 16:26:49
Ok, GOTO-s változat: 13 sor, 702 byte.
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.10. 10:02:39
Üdv,

A versenykiírás már törlésre került, az 1Kb-os kategóriának jobb lenne egy új témát indítani, ahová át kellene helyezni a nevezéseket és a hozzászólásokat.

Igazán nem hagyott nyugodni az egysoros dolog. Hosszú napok "szenvedései", rengeteg verzió, ötletelés után elkészült egy program(ka), amely LANDER-1 névre hallgat.

A feladat nagyon egyszerű, le kell szállni a Hold felszínére űrhajónkkal. A műveletet a "q" billentyűvel tudjuk szabályozni. Sikertelen leszállás esetén csak a STOP és a program újra betöltése segít, sikeres művelet esetén megkapjuk jutalmunkat.

A betöltés után elég egy ENTER-t nyomni. Ha el akarjuk kerülni a többszörös betöltést, akkor az 1 POKE 40000,0: POKE 40001,0:TEXT sor beírása segít ... bár ekkor már nem egysoros :)

A program "szépsége", hogy nem száll el és az egy sorba beírásnak is meg lett a maga rejtélye. Kíváncsi vagyok, sikerül-e valakinek áthelyeznie a leszállópályát egy kicsit balra vagy jobbra ... :)


Tapasztalataim:

Az Enterprise BASIC sok olyasmit nem tartalmaz, amely más BASIC nyelvjárásokban szabad volt - például feltétel kiértékelés (y=13) értékkel ellátása vagy a PRINT jobb összevonás (több AT alkalmazása). Az "egysoros" programozás bebizonyította, hogy az értelmező készítői nem készültek "elvont" programírásra, a "*** Statement not allowed after THEN." téves üzenet rendszeres, és bár elfogadta, de nem volt képes értelmezni a GOTO 5+x utasítást sem. Talán jobb lett volna, ha az 1 sor/1 utasítás elvét követték volna a struktúrált programozás lehetőségéhez.

Egyelőre nagyon szűkösek a keretek az egysoros programkészítésre, szerintem versenyen kívül publikáljunk.

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.10. 10:37:25
Talán jobb lett volna, ha az 1 sor/1 utasítás elvét követték volna a struktúrált programozás lehetőségéhez.

A Turbo Pascal-ban is lehet több utasítást egy sorba írni (hasonló korlátozásokkal), persze pontosvesszővel elválasztva. Jó ez így, ennyi tömörítési lehetőség azért praktikus, és nem szakadunk el teljesen a BASIC-től sem.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.10. 10:40:25
Quote from: Pgyuri

1 POKE 40000,0: POKE 40001,0:
Ez a POKE bumm bele a memória közepébe pont az a dolog amit nagyon nem illik EP-n csinálni :oops:
Konkrétan ezzel a 40000-el egy jobban felszerelt gépen az EXDOS adatait lehet telibe találni.
Én is gondoltam rá, hogy milyen jó lenne így szerezni változót, aminek van kezdőértéke, de elvettem, mert nem illik :-)

De ha mindenáron pókolni akarunk, akkor a nullás lapon kéne, azzal max csak a saját programunkat tesszük tönkre :-) de ilyen rövid programnál pl. 10000 az megfelelő.

Quote
de nem volt képes értelmezni a GOTO 5+x utasítást sem.
Igen GOTO után csak fix sorszám lehet. ON kifejezés GOTO sorszámlista van az ilyen paraméteres Gotozásra kitalálva.

Quote
Egyelőre nagyon szűkösek a keretek az egysoros programkészítésre, szerintem versenyen kívül publikáljunk.
Akkor hiába hajtottam a nyereményre? :twisted:

Akkor itt van kő-papír-olló, csak LET, PRINT és GOTO utasításokkal, egy sorban.
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.10. 10:56:46
Üdv,

Ez a kő/papír/olló nagyon jó !!!   Ezek szerint mégis lehet a feltétel kiértékelés eredményét használni, csak én voltam nagyon kezdő és valószínűleg más hiba miatt vetettem el...pedig akkor még lehet húzni a programon össze :)  Meg is fogom csinálni a Lander-2-t...    A 40000 helyett lehet 10000, majd kicserélem.

Lássuk meg, hogy lesz-e még program egysorosban, lehet publikálni itt, aztán még mindig visszatérhet a nyereményeső :)   Részemről nagyon megkínzott ez a feladat, adott vagy 3 álmatlan éjszakát. Az új elvekkel még lehet, hogy új babérokra török :)


A GOTO 5+x -el az a baj, hogy elfogadja, nem szól érte, de aztán mégse ugrik rendesen.

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.10. 11:41:25
PGyuri és Zozo programja is nagyon tetszik!
Zozoét nem tudtam igazán felfogni, hogyan oldja meg egyetlen sorban a billentyűzetfigyelést, hogy addig nem csinál semmit, amíg le nem nyomjuk a gombot. Bár most talán kezdem sejteni. Végtelenítve fut a program, és csak akkor írja ki az eredményt, ha gombot is nyomunk. Ügyes!
Pgyurinak ez a POKE-os megoldása tetszik nagyon. Ha jól értem, a memóriában megváltoztat valami értéket, és a következő futásnál arra hivatkozik, így halad lefele az "űrhajó". Nagyon cseles. :D
Ezzel én is gondban voltam anno, hogy hol van olyan memóriaterület, amit szabadon meg lehet változtatni. Végülis az lenne a legbiztonságosabb, ha rendszerváltozó értékében tárolná az adott értéket, pl. key delay vagy key rate és innen kérdezné le valahogy, már ha lehet egyetlen sorban. A dolog szépséghibája az lenne, hogy felgyorsulna a delay és rate a program leállításakor. :D Vagy még jobb lenne, ha pl. a 127-es kódú karakter egyik sorát változtatná meg megfelelően (ezt a karaktert úgyse használja soha senki), itt is 0-255 közötti értéket lehet megadni, ezt a SPOKE (esetleg set character 127,...) utasítással lehet írni és a SPEEK-kel lekérdezni.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.10. 12:01:44
Igen a billentyűfigyelés volt az egyik nagy fejtörés, mivel sem a GET sem az INKEY nem vár gombnyomásra, az INPUT meg nem működik több utasítás közé rakva :-(
A POS konvertálja 1,2,3 értékekre az elfogadott gombokat, azonban amikor "" stringre keresne mindig 1-et adna eredményül, ezért lett az INKEY mögé ragasztva még egy szóköz, így ha nincs gombnyomás, olyan mintha szóköz lenne nyomva, így ez esetben is 0 lesz a POS eredménye.
Ha nem volt gombnyomás, akkor a végén az eredménysora 1-0 karakterekig lesz kiírva, azaz nem ír ki semmit.
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.10. 12:12:55
Ez a kő-papír-olló nagyon komoly!
Ahogy elnézem, elég sok időt elvehetett az EXOS 2.4 fejlesztésétől... :-)
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.10. 12:18:32
Üdv,

Megvizsgálva az új szintaktikai lehetőségeket, elkészült a nehezített Lander-2 :)   Új leszállópálya, gravitációs vihar és leszállás-értékelés.

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Lacika on 2012.December.10. 12:21:59
Új leszállópálya, gravitációs vihar és leszállás-értékelés.

Ezt sajnos csak majd otthon tudom megnézni.
Elég érdekesen hangzik, amolyan "IS-BASIC-től elrugaszkodott" megoldást sejtek... (Bár zozoé is az.)
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.10. 12:34:03
Quote from: Pgyuri
Megvizsgálva az új szintaktikai lehetőségeket, elkészült a nehezített Lander-2 :)   Új leszállópálya, gravitációs vihar és leszállás-értékelés.i
Nálam csak egyszer futtatható a program, második futáskor egyből lent van már a zűrhajó. De annyi baj legyen, így is egyedülálló program az EP történelmében.
A Lander-1 is néha ezt csinálta második futásnál, de nem mindig.
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.10. 12:46:29
Üdv,

A játékot csak egyszer lehet futtatni, mint az életben :)  Csak egy esély van leszállni.


Közben rájöttem, miért zavart össze a feltétel kiértékelés. A PRINT  (X=13)   működik, de a PRINT (A$="Q") már nem és persze utóbbival próbálkoztam először és mivel *** Not understood. , így el is vetettem használatát.

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 13:06:38
Azon gondolkozom, hogyan lehetne egyetlen sorban megoldani, hogy a botkormánnyal mozgassunk egy emberkét a képernyőn.
Az emberke koordinátáit le kéne tárolni két (esetleg egy) memóriacímen, és az ehhez tartozó értéket növelni ill. csökkenteni a botkormány mozgatásával. Az emberke kiírása viszont nem tudom, hogyan mehetne. Ugye, a JOY függvény értékei itt 1, 2, 4 vagy 8 lehetne, amire reagálnia kéne a programnak, és eggyel megnövelni vagy csökkenteni az adott memóriacímen lévő értéket, majd kiírni az emberkét az adott pozícióba. Ehhez olyan matematikai műveleteket (függvényeket) kéne kitalálni, ami az 1, 2, 4 és 8 értékekkel a következőképpen bánik:

1: ha a bemenet 1, akkor a kimenet 1; ha a bemenet 2, akkor a kimenet -1, minden más értéknél a kimenet 0
2: ha a bemenet 4, akkor a kimenet 1; ha a bemenet 8, akkor a kimenet -1, minden más értéknél a kimenet 0

Tehát, valami ilyesmi lenne benne:
1 LET A=JOY(0):POKE MEM1,FV1(A):POKE MEM2,FV2(A):PRINT #102,AT PEEK(MEM1),PEEK(MEM2):"O":PRINT #102,AT RND(22)+1,RND(38)+1:"*":PRINT #102,AT PEEK(MEM1),PEEK(MEM2):" " :GOTO 1

Persze ez ronda lenne, villogna az emberke (itt csak O betű, mert a PC-s billentyűzeten nem találtam megfelelő karaktert), és ha kivezetnénk a képernyőből, hibaüzenet lenne. A második PRINT utasítás azért lenne, mert véletlenszerűen csillagokat rajzolna a képernyőre, amiket természetesen össze kéne szedni. :D
A dolog szépséghibája, hogy olyan memóriaterületeket kéne találni, amiknek az értéke alapból olyan szám, ami PRINT AT utasítással a képernyőn belülre esik. És ezeket az értékeket valószínűleg már használná valami. Esetleg memóriacím helyett valami más rendszerváltozót kéne használni, esetleg egy-két karaktert találni, aminek egyik sorában az érték pont megfelelő, és azt olvasni-írni SPEEK és SPOKE utasítással. Ez azért lenne jó, mert CLEAR FONT parancs kiadásával visszaállítható az eredeti startpozíció a játék indítása előtt. Hátránya viszont az lenne, hogy csak a megfelelő karakterkészlet esetén működik. :D
Mindenesetre a legjobban az érdekelne, hogy azok a JOY értékből előállító függvények megoldhatók lennének-e valamilyen matematikai műveletekkel.
Title: Re: Egysoros játék felhívás
Post by: Tuby128 on 2012.December.11. 13:20:11
Egy sorba vajon elférne-e hogy:
100 ALLOCATE 100: CODE B=HEX("A3,02,24,21,fa,66,33,23,12,4,21,21,C9"): CALL USR(b,0)
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 13:31:02
Quote from: Tuby128
Egy sorba vajon elférne-e hogy:
100 ALLOCATE 100: CODE B=HEX("A3,02,24,21,fa,66,33,23,12,4,21,21,C9"): CALL USR(b,0)
Elférni elfér, de mi értelme ennek a kódnak? Azon kívül, hogy jól elszáll :-)

(Plusz az egysoros kiírásban benne volt, hogy gépi kód tilos.)
Title: Re: Egysoros játék felhívás
Post by: endi on 2012.December.11. 13:37:03
Szerintem alapvetően nem ilyen poke-os képernyőírás meg hasonló gányolásokban kéne gondolkodni, ha már EP. Bár én szeretem az ilyeneket, de egy ilyen versenyben pont nem erre kéne menni. Hanem legyen 5 vagy 10 sor, és legyen szépen, kompatibilisan megírva.
Title: Re: Egysoros játék felhívás
Post by: Tuby128 on 2012.December.11. 13:37:39
Ennek a kódnak éppen semmi, csak érdekelne, hogy az IS-BASIC engedi-e?
Egyébként honnan tudtad, hogy nem érvényes utasítások vannak benne?
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 13:40:06
Quote from: Tuby128
Egyébként honnan tudtad, hogy nem érvényes utasítások vannak benne?
Begépeltem, és megnéztem az emulátor debugerében, hogy mi ez :-) mondjuk a sok 21 eleve gyanús volt.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 13:46:32
Quote from: endi
Szerintem alapvetően nem ilyen poke-os képernyőírás meg hasonló gányolásokban kéne gondolkodni, ha már EP. Bár én szeretem az ilyeneket, de egy ilyen versenyben pont nem erre kéne menni. Hanem legyen 5 vagy 10 sor, és legyen szépen, kompatibilisan megírva.
Egyetértek!
Title: Re: Egysoros játék felhívás
Post by: Tuby128 on 2012.December.11. 14:00:49
Begépelted? Te nagyon kíváncsi ember vagy Zozo!
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 14:10:43
Quote from: endi
Szerintem alapvetően nem ilyen poke-os képernyőírás meg hasonló gányolásokban kéne gondolkodni, ha már EP. Bár én szeretem az ilyeneket, de egy ilyen versenyben pont nem erre kéne menni. Hanem legyen 5 vagy 10 sor, és legyen szépen, kompatibilisan megírva.
Hát akkor mutass egy ilyen programot! :D
(Ettől függetlenül nagyon érdekelne, megoldható-e valahogy ez a JOY függvényes probléma, esetleg egyetlen sorban valahogy máshogy fel lehetne-e használni a JOY függvényt. Nem ez a program lenne a TOP 1 EP program, de a megoldás miatt érdekelne. És nem is feltétlen POKE-olással lehetne ezt megoldani, ahogy írtam.)
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.11. 15:42:20
Üdv,

Itt egy emberkét lehet mozgatni a képernyőn a belső joystick segítségével. Sokra nem jó, mert már semmi nem fér mellé, de legalább a képernyőről sem lehet kivinni, vagyis "bolondbiztos", ráadásul még inicializálja is magát. Csak épp nem játék :) bár ha kivesszük a letörlést, akkor rajzoló programot kapunk.

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 15:55:50
Quote from: Pgyuri
Itt egy emberkét lehet mozgatni a képernyőn a belső joystick segítségével.
Ez durva. Nem gondoltam, hogy meg lehet csinálni, hogy még a képernyőről se lehessen kivezetni. Látom, a LET utáni egyenlőségjel után is van még egyenlőségjel vagy >, < jel. Ez nekem új, hogy ilyet is lehet. Akkor az IF utasítást sokszor ki lehet váltani ezzel. Én egy kb. ugyanilyen programot régebben 10-20 sorral oldottam meg, és még csak azt sem figyelte, hogy kimegy-e a képernyőről. Ebből a szempontból is van tanulsága, sok dolgot rövidebben meg lehet oldani, mintsem hogy pl. 10 soron keresztül CASE ágakat vagy IF utasításokat írjunk. Nem is tudom, minek írtam régebben ilyen terjedelmesen:

LET J=JOY(0)
SELECT CASE J
CASE 1
IF X<37 THEN LET X=X+1
CASE 2
....
CASE ELSE
END SELECT
PRINT AT X,Y:"X"

Engem mindig zavart, hogy egy vacak karaktermozgatást ennyi soron keresztül kell programozni. Pl. a Hamikát nem tudom, hogyan oldották meg, de biztos azt is hosszan.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 15:59:15
Kicsit finomítva, és póktalanítva :-)
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 16:01:39
Biztos lehet pl. Asmonból, HEX editorral is szerkeszteni basic programot, ahol a tokenizált utasításokat írjuk be egyből, kódolva. Ott nem tudom, milyen határok vannak, de talán lehet olyan hosszú sort is előállítani, ami az egész képernyőt betölti, és amit nem is lehetne BASIC-ből szerkeszteni egyáltalán. Mivel itt a basic interpreter már "ki van iktatva", sejtésem szerint. Így talán THEN után is becsempészhető olyan utasítás, amit a basic interpreter nem engedne meg. Ez persze csak tokenizált programnál lehetséges, mert ha pl. text fájlból töltjük be, akkor a basic interpreter lefújja az akciót.
Volt egyébként egy könyvben (talán a Tippek és trükkökben?) valami POKE arra, hogy hogyan lehet program üzemmódba becsempészni olyan utasítást, amit egyébként nem lehetne, mert a basic interpreter nem engedi, így pl. olyan program is létezhetne, ami önmagát a NEW-val kitörli. Egyszer próbálgattam abból a könyvből azt a POKE-ot, de nekem nem működött...
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 16:06:34
Quote from: Zozosoft
Kicsit finomítva, és póktalanítva :-)
Ez már nagyon durva! :ds_icon_cheesygrin:
Nem semmi az a csel a villogás kiiktatására sem. :D
A 24-es és 25-ös rendszerváltozó egyébként mit csinál ettől függetlenül? Csinál valamit?
Azt a rendszerváltozót lenne még poén piszkálni, ami a CAPS/SHIFT/ALT üzemmódot tárolja, így játék közben mindig változna a bal felső sarokban az üzemmód. :D
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 16:08:20
Quote from: szipucsu
Látom, a LET utáni egyenlőségjel után is van még egyenlőségjel vagy >, < jel. Ez nekem új, hogy ilyet is lehet.
Ez az, amit a programomból lesett el Gyuri :-)
Az értékekkel végzett logikai műveletnek is érték lesz a vége: nulla, ha hamis, -1 ha igaz. Innentől már csak ügyesen kell számolni.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 16:12:26
Quote from: szipucsu
Egyszer próbálgattam abból a könyvből azt a POKE-ot, de nekem nem működött...
Ez a baj az ilyen pókolgatásokkal, hogy nagyon konfiguráció függő, hogy hol is van az amit át akarunk írni.
Ha mindenáron ilyet akar csinálni az ember, akkor kell keresni egy "kányhát", azaz olyan fix helyen lévő rendszerváltozót, amiből ki lehet számolni az adott hely címét.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 16:16:30
Quote from: szipucsu
A 24-es és 25-ös rendszerváltozó egyébként mit csinál ettől függetlenül?
Video X, Y, amit videólap megnyitása előtt kell beállítani, azaz jelen esetben a 22,23-asokkal együtt büntetlenül felhasználható.
Ráadásul az utoljára megnyitott lap mérete van benne alapból, így került a jobb alsó sarokba az emberke induláskor.
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.11. 16:17:12
Üdv,

Beeee... nem lestem el, csak Spectrumon ugye minden feltétel kiértékelés értelmezett, nekem meg "érthetetlen"-t válaszolt az (a$="Q")-ra. Gondolta a fene, hogy ezt követően a "számos" feltételt hajlandó kiértékelni. Ezt kínlódtam az IP(X/20)-al, ami ugye 1, ha osztható, 0, ha nem.  EP BASIC-ben nem vagyok jártas, így még egy string kiírást is órákig kerestem a kézikönyvben, de meglett végül.

Amúgy pedig nincs semmi cselezés, simán van begépelve az utasítás a sorba. Csak hát a karakterszám korlát miatt ki kell hagyni mindent, amit csak lehet, vagyis nincs LET utasítás, sőt a "10000" memóriacím is beíráskor 1e4 formában gépelődött sokszor, mert az is adott 2 bonusz karaktert. A záró GOTO 5 is helyettesíthető a RUN-al, ami további 3 karakter.

Hiába, az "egysoros"-oknál minden számít :)

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 16:19:53
Quote from: Pgyuri
Beeee... nem lestem el
Úgy értem, hogy azt, hogy hogyan működik EP-n a dolog :-)
Title: Re: Egysoros játék felhívás
Post by: Pgyuri on 2012.December.11. 16:21:55
... és akkor már a <> cseréld ki > jelre és mindjárt még 2 karakter megmaradó. Azaz kb. marad 15 karakter még egyéb dologra, vagyis hmmmm...... mi férne még bele .....


Hát így készül egy egysoros :)     Gratuláció a szépítéshez, nagyon tetszetős lett !

Pgyuri
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.11. 16:26:12
Quote from: szipucsu
 Ott nem tudom, milyen határok vannak, de talán lehet olyan hosszú sort is előállítani, ami az egész képernyőt betölti, és amit nem is lehetne BASIC-ből szerkeszteni egyáltalán.
Ilyet sajnos nem lehet, az elején ki lett tárgyalva, hogy az IS-BASIC egy bájton tárolja a sor hosszát (míg a Spectrum 2 bájton), és ez szab határt a fantáziának.
És az én programom is többet foglalt a memóriában, mint amennyiből begépelni lehet, így nem a begépelésnél van a határ.
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 18:53:13
Már talán nem ide tartozik, de valamilyen trükkel megoldható, hogy pl. THEN után olyan utasítás álljon, ami egyébként nem állhatna, vagy a NEW utasítás bekerülne a programba? Pl. ha Asmonnal megpiszkálnánk a basic programot, vagy ilyesmi.
Title: Re: Egysoros játék felhívás
Post by: endi on 2012.December.11. 20:33:57
irányítást úgy lehetne csinálni kevés sorral hogy egy tömbben letároljunk a joy értékeihez tartozó x és y elmozdulásokat
ezután a joy lekérdezése után csak a tömbből elő kell szedni hogy mennyit adjunk hozzá a koordinátákhoz

ja és ehhez if se kell
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.11. 20:49:44
Quote from: endi
irányítást úgy lehetne csinálni kevés sorral hogy egy tömbben letároljunk a joy értékeihez tartozó x és y elmozdulásokat
ezután a joy lekérdezése után csak a tömbből elő kell szedni hogy mennyit adjunk hozzá a koordinátákhoz
Nagyjából talán értem az elvet, de tudnád ezt példával szemléltetni? Mindig szerettem basicben ilyen karakteres képernyőn futó játékokat próbálni írni, talán még hasznosíthatnám az ötletet.
Lehet, hogy rosszul értem, de szerintem gond lenne, hogy a negatív értéket kéne hozzáadni X-hez vagy Y-hoz, mert az előjel külön karakterhelyet foglal a tömbben. Vagy nem stringre gondolsz?
Title: Re: Egysoros játék felhívás
Post by: IstvanV on 2012.December.12. 18:45:34
A nagyon rövid gépi kódú "játékok" is érdekesek lehetnek, ez például 256 byte fejléccel, bár a játéknak sok értelme nincsen, és ennél bizotosan jobbat is lehet írni:
[attachurl=#]
Title: Re: Egysoros játék felhívás
Post by: endi on 2012.December.12. 19:24:20
nem rossz ez :) a felszedendőket kicsit patternesíteni kéne hogy a 8 irányba mozgással lehessen felszedni őket, persze random azért maradjon benne

de 256 asm-ban nehéz már versenyezni a létező dolgokkal... yutubon érdemes rákeresni milyen demókat, játékokat csináltak
Title: Re: Egysoros játék felhívás
Post by: IstvanV on 2012.December.12. 19:42:17
Quote from: endi
de 256 asm-ban nehéz már versenyezni a létező dolgokkal... yutubon érdemes rákeresni milyen demókat, játékokat csináltak
EP-re talán még nem túl sokat. :) Más gépeken (pl. C64) előnyt jelent, hogy rövidebb a "minimális" program, tehát ami már inicializálta a képernyőt (EP-n létre kell hozni az LPT-t), van működő irányítás, stb.  EP-n a ROM rutinok közvetlen hívása sem túl elegáns megoldás (a fenti egyszerű példában sincs ilyen) az EXOS és IS-BASIC különböző verziói miatt, pedig azzal is lehet helyet megtakarítani.
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.12. 21:47:25
Quote from: IstvanV
EP-n létre kell hozni az LPT-t
A jelen egyszerű esetben egy videólap EXOS LPT-jvel nem lenne használható?
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.12. 22:01:14
Quote from: IstvanV
A nagyon rövid gépi kódú "játékok" is érdekesek lehetnek, ez például 256 byte fejléccel, bár a játéknak sok értelme nincsen, és ennél bizotosan jobbat is lehet írni:
Ezzel eddig 41 pont a rekordom. :D
Ezt a játékot is érdemes lenne továbbfejleszteni. Akkor nem lenne túl rövid, de úgysincs sok eredeti EP-s játék. :)
Title: Re: Egysoros játék felhívás
Post by: IstvanV on 2012.December.12. 23:08:09
Quote from: Zozosoft
A jelen egyszerű esetben egy videólap EXOS LPT-jvel nem lenne használható?
Lehet, hogy érdemes megpróbálni, a jelenlegi megoldás 38 byte méretű, az eredeti EXOS LPT-t írja felül a státuszsortól kezdődően, feltételezi, hogy az LPT első 25 sorában karakteres mód van érvényes LD2 címmel (a margókat a program beállítja), és az EXOS veremben tárolja a képernyőt fix AC00h kezdőcímen. EXOS hívások és VIDEO: csatorna használata elegánsabb megoldás lenne, de nem tudom, elférne-e ugyanakkora helyen, és elveszne a fix képernyő memória cím is.

Code: ZiLOG Z80 Assembler
  1. 009   0100 F3                  di
  2. 010   0101 2A F4 BF            ld      hl, (0bff4h)
  3. 011   0104 11 00 EC            ld      de, scrAddrV
  4. 012   0107 01 0C 00            ld      bc, 12
  5. 013   010A 3E 19               ld      a, 25
  6. 014   010C 09          .l1:    add     hl, bc
  7. 015   010D F9                  ld      sp, hl
  8. 016   010E 01 00 5B            ld      bc, 5b00h
  9. 017   0111 C5                  push    bc
  10. 018   0112 06 26               ld      b, 26h
  11. 019   0114 C5                  push    bc
  12. 020   0115 3B                  dec     sp
  13. 021   0116 3B                  dec     sp
  14. 022   0117 D5                  push    de
  15. 023   0118 01 0B 73            ld      bc, 730bh
  16. 024   011B C5                  push    bc
  17. 025   011C 01 28 00            ld      bc, 40
  18. 026   011F EB                  ex      de, hl
  19. 027   0120 09                  add     hl, bc
  20. 028   0121 EB                  ex      de, hl
  21. 029   0122 0E 10               ld      c, 16
  22. 030   0124 3D                  dec     a
  23. 031   0125 20 E5               jr      nz, .l1
  24. 032   0127 31 00 01            ld      sp, 0100h
Title: Re: Egysoros játék felhívás
Post by: IstvanV on 2012.December.14. 15:19:43
Továbbfejlesztett verzió (EP64 kompatibilitás nélkül lehetne valamivel kisebb is): :)
[attachurl=#]
Title: Re: Egysoros játék felhívás
Post by: Zozosoft on 2012.December.14. 15:54:06
Ügyes!

Ebben 19 eddig a rekordom :-)
Title: Re: Egysoros játék felhívás
Post by: szipucsu on 2012.December.14. 20:41:56
Quote from: IstvanV
Továbbfejlesztett verzió (EP64 kompatibilitás nélkül lehetne valamivel kisebb is): :)
Ez az a játék, hogy ha az összes cuccot összeszedjük, akkor kijön egy húszezres a gépből? :D
Érdemes lenne még tovább fejleszteni, lehetnének benne mozgó ellenségek, stb., esetleg egyszerre két játékos is játszhatná, meg lehetne varázstabletta, ami kis időre megállítja az időt, lebénítja az ellenséges játékost vagy az ellenségeket, stb. Igaz, akkor már nem férne bele 256bájtba, de nem baj.