Enterprise Forever
:HUN => Programozás => BASIC => Topic started by: szipucsu on 2024.January.24. 22:53:37
-
Biztos volt már ilyen ötlet basic nyelvre, mint ez itt, de még nem találkoztam vele. A gond, hogy maga a játéktér a képernyő kb. 5%-át foglalja el, a képernyő többi része érdektelen.
Ez most meglehetősen minimalista próbálkozás még. Talán valamit ki lehetne hozni ebből.
A lyukra rá lehet esni, nem esünk bele, de ha nagyon a széléről akarunk ugrani, akkor beleesünk.
Lehetne kétszer akkora (2x2 karakter) minden, de akkor is csak a képernyő 5-6%-át foglalná el.
Aki megszállott, ezzel is jót játszhat.
Külön érdekes, hogy a véletlenszerű "zenét" játék közben generálja a program.
[attachurl=1]
[attachurl=2]
-
Ez kicsit érdekesebb, elvileg folyamatosan gyorsul a játék, de alig érezni.
Sajnos jelentős gyorsulást a Zzzippel sem lehet elérni. Gondolom azért, mert a DEL billentyűvel (60-as kódú karakter) töröl le a járdából, és így görgeti, és ezért muszáj a 0-ás csatornát használni a 102-es helyett.
[attachurl=1]
[attachurl=2]
-
Azt nem próbáltad, hogy milyen, ha STRINGként tárolod a pályát, és scrollnál az első karaktert levágod, az uccsót hozzáteszed, majd az egészet kiprinteled a #102-es csatornára, az egész soros print tök gyors, azt teszteltem, meg lehet a ZZZIP is hatékonyabb rajta.
-
jópofa!
olyan, mint trex játék, amikor nincs net a chrome-ban
na, azt vajon meg lehetne csinálni BASIC-ben? (vagy Pascal-ban?) karakteres képernyőn, nagyobb sprite-okkal.
Jó kihívásnak tűnik
-
STRINGként tárolod a pályát, és scrollnál az első karaktert levágod, az uccsót hozzáteszed, majd az egészet kiprinteled a #102-es csatornára
Valószínű tegnap éjjel lehetett, amikor eszembe jutott ugyanez, mivel lefekvéskor még nem volt meg az ötlet, de amikor felkeltem, már megvolt, közben nem tudom, mi történt.
Most itt áll a dolog, még folytatás várható:
[attachurl=1]
[attachurl=2]
Érdemes a space-t kicsit hosszabb ideig nyomva tartani, nem csak megpöccinteni! Lassabb sebességnél különben elmaradhat az ugrás.
Most már nincs akadálya, hogy akár gracha videolapra, akár attribútum videolapra kerüljön a pálya, esetleg játék közben váltogassa egymást időnként a kétféle videolap. Ha attribútum videolapra kerül a pálya, akkor célszerű lenne karakterenként színt is változtatni, ami nem tudom, mennyire lassítaná le az egészet. Nem olyan régen valamelyik topikban volt itt szó arról, hogy escape szekvenciával lehet stringen belül színt váltani, a set ink használata nélkül, ez kéne ide, de képtelen vagyok visszakeresni, hol volt erről szó. Valaki be tudná linkelni?
Van egy érzésem, hogy gracha videomódú lesz a pálya, de azért megpróbálom mindkét verziót.
Lehetne 16 vagy 256 színű videolap is, és akkor nagyobbak is lennének az objektumok, viszont a lyukakat így nem lehetne (egykönnyen) kirajzolni, mert a szóköz nem írja felül, ami már ott van, és a string alapján visszakeresni, hol van a luk, az eléggé procizabáló eljárásnak tűnik.
-
Escape szekvencia fejezet az EXOS könyvben. (http://ep128.hu/Ep_Konyv/Exos.htm#108)
-
Azt nem próbáltad, hogy milyen, ha STRINGként tárolod a pályát, és scrollnál az első karaktert levágod, az uccsót hozzáteszed, majd az egészet kiprinteled a #102-es csatornára, az egész soros print tök gyors, azt teszteltem, meg lehet a ZZZIP is hatékonyabb rajta.
Ki próbáltam 19 a 24 hez arányban lassabb BASIC-ban zzzipvel nem próbáltam.
-
Ugyan ez a progi ZZZip -el 13s a 14s hez lassabb. /1000 ciklus/
-
Elkészült a nagy mű! :D
A játék célja: megtenni mindkét pályán 600 lépést.
A játék indítása: Joy fel vagy le, attól függően, melyik pályán akarunk játszani. Ha az egyik pályát már teljesítettük, akkor csak a másik lesz indítható.
Irányítás: csak a tűzgomb kell. Érdemes a tűzgombot nem csak pöccinteni, hanem hosszabban nyomni, amíg valóban ugrik.
Az életek számát jobb oldalon fent a repülők jelzik.
Az összes botkormány használható!
Mindegyik zene saját, kivéve egyet, de azt úgyis mindenki felismeri. (Ha sikerül addig eljutni.)
[attachurl=1]
[attachurl=2]
-
Nagyon tetszik! :-) Ahogy tapasztalom, simán fél órákat is el lehet játszani vele, csak a "tarkabarkaságából kifolyólag" a szem is kifolyólag lesz... :-D
-
Jópofa, kamikaze bombázó elhalálozáskor kifejezetten jó, lehet lehettem volna türelmesebb is, mert mind a kettő terepen 330 környékéig jutottam 1. élettel, utána meg egyből vártam a kamikazét :D
-
Nem futtattam még, csak a forrást néztem.
Olyan mintha a program végig fút persze a megfelelésekkel és "OK"
A 2440 sor egy IF végét jelzi utána már csak DEF... ek vannak.
Semmi vissza térés a program elejére.
Úgy vélem ha valaki végig megy a pályákon vagyis "CONGRATULATION" és "OK"
-
Semmi vissza térés a program elejére.
Mindenképpen visszatér az elejére mindig, csúnya GOTO-k vannak ott, a strukturált programozás rémálmai.
Kicsit pofoztam a programon, most csak az összes fájl betöltése után tünteti el a status sort, így aki magnóról tölt, annak kellemesebb élmény. Néhány nagyon hosszú sort szétszedtem, mert nekem nem tűnt teljesen egyenletesnek a játék sebessége (az utolsó előtti verzió még az volt), és arra gondoltam, ez megoldja a problémát. Szerintem megoldotta. Nem gondoltam volna, hogy ennek ilyen hatása lehet a programra.
[attachurl=1]
[attachurl=2]
kifolyólag
Ez zavaró? Én sokat játszottam vele emulátoron, ott nem volt zavaró a sok szín.
-
Javaslat
A 2160 sort
2160 LET CN(1)=32:LET CN(2)=32:LET CN(3)=32:LET CN(4)=32:LET CN(5)=32:LET CN(6)=32:LET CN(7)=32:LET CN(8)=32:LET CN(9)=32
Módosíthatnád
2160 LET CN(1),CN(2),CN(3),CN(4),CN(5),CN(6),CN(7),CN(8),CN(9)=32
Hely és idő megtakarítás.
-
Javaslat
Köszi! Módosítani fogom. Ha van még javaslat, jöhet, és akkor egyben módosítok többet. Még talán a lenti pálya zenéje lehetne szerintem hosszabb. Nem tudom, nem tűnt-e másoknak túl rövidnek.
Egyébként azért van sok 32 ott, mert eredetileg más számok voltak. A kötél karakterének pixelei vannak ott tárolva. Először a kötél, amivel pacmant kihúzzák az iszapból, végig egyformán csíkos volt, csak ugye a paletta ott más volt, ahol a pacman előfordult, a kötél is más színű lett volna, ami nem mutatott jól, ezért lett ott lazább sodronykötél helyett amolyan damilszerűség. :D
-
1620 sor direkt kisbetűs ?
Javaslat
4470 FOR A=27 TO 35 STEP 4
4520 FOR A=0 TO 23 STEP 8
kicsikét gyorsabb
de megpróbálok valami
-
1620 sor direkt kisbetűs ?
Ennyi van benne: 1620 DO - milyen kisbetűre gondolsz?
Az eddigi javaslataidat megcsináltam, működik rendben minden.
Az utolsó két javaslatod az Enterprise logóra vonatkozott, ez fontos, mert más programoknál is szükség lehet rá, mentem a "fejlesztői eszközök" közé az új logórajzolót.
-
Bocsi
1820 PRINT #6,AT 1,13:"stage completed":LET FINISH2=1
Erre gondoltam
-
Erre gondoltam
A játéktér felső része grafikus karaktereket használ, ezért a normál betűk nem jelennek meg jól rajta. Ezért a kisbetűket definiáltam át grafikus karakterekre.
Érdekesség: Az általam 12 éve módosított, demokazettás karakterdefiniáló tud kimenteni és betölteni karaktereket, karakterkészleteket, ebbe töltögettem be karakterkészleteket, a szimpatikusat benne hagytam, hozzájuk dobtam a grafikus karaktereket, meg a játék által használt egyéb karaktereket, és az egészet kimentettem az általad készített karaktermátrix-kimentő rutinnal, és ezt tölti be a játék. (A Dot Collector Turbo Edition is ezt csinálta.)
A repcsi, ha a lenti játéktérre megy, áthalad a grafikus karakteres videolapokon is, erre külön kellett olyan grafikus repcsikaraktereket definiálni, melyek valamennyire hasonlítanak az eredeti repcsire. Ehhez Endi GraCha editorát használtam. A felső játéktér scrollozó talaja 255 színű karaktereket használ, emellett is elmegy a repcsi, de csak egy pillanatra látszik, hogy egy színkupac van a repcsi helyén ott, mivel a 255 színű karakterek csak 1 pixelnyiek lehetnek. Nem tudom, ez feltűnt-e valakinek.
Amikor a pacman a felső pályán beleesik a lyukba, azért lesz egy színkupac belőle, mert a 255 színű videolapba esik bele a 4 színű pacman. Azon gondolkozom, hogy egy fekete és sötétkék színkupacból álló 255 színű grafikus karakternek kellene lennie a luknak, amibe nem beleesik a pacman, hanem elsüllyed benne, ami látványos is lenne.
-
Ahogy elnézem mindegyik sor külön video csatorna.
A következőbe esetleg csinálhatnád ha grafikus előre feliratozod soronként pl:
PÁLYA TELJESÍTVE
MEGHALTÁL
GRATULÁLOK TELJESÍTETTED
...
utána betöltöd a char.bin -t
majd DISPLAY #x at a kívánt sort megjeleníted még törölnöd majd kiírni sem kell
ez úgy is ZZZip elve lesz?
esetleg használhatnád a CALL CHAR_DEF(33,1,2,3,4,5,6,7,8,9)
Azzal is lehet némi sebességet, időt nyerni.
A játéktér felső része grafikus karaktereket használ, ezért a normál betűk nem jelennek meg jól rajta. Ezért a kisbetűket definiáltam át grafikus karakterekre.
és a 920 as sor ?
920 PRINT #16,AT 1,13:"STAGE COMPLETED":LET FINISH=1
1820 PRINT #6,AT 1,13:"stage completed":LET FINISH2=1
-
és a 920 as sor ?
920 PRINT #16,AT 1,13:"STAGE COMPLETED":LET FINISH=1
1820 PRINT #6,AT 1,13:"stage completed":LET FINISH2=1
A 16-os videolap attribútum videolap, arra mehetnek a normál nagybetűk. A 6-os grafikus-karakteres videolap.
Lehet, nem rossz ötlet előre elkészített videolapokkal dolgozni a feliratokhoz. Lehet, ezt most már nem módosítom, de egy újabb játéknál hasznos lenne így csinálni. (A 4 színű betűk annyiból jobbak, hogy látványosabb, hogy ilyen is kerül a képernyőre.)
Mindegyik sor külön videolap, hogy sok szín lehessen, videolaponként más-más palettát lehet beállítani. Bár sok videolapon ez nem érvényesül, mert ahol nincs pacman vagy pálya, a levegőben csak a háttérnek van színe. Ide lehetne rajzolni csillagokat, napot, holdat, felhőket, hogy a sok szín jól ki legyen használva. De lehet, így is túl sok a szín a képernyőn.
Csak a felső játéktéren a talaj 255 színű grafikus karakteres videolap, a látvány kedvéért. Ezt gyorsabban lehet görgetni, mert nem kell kirajzoláskor minden karakter előtt a színt is megadni.
A CALL CHAR_DEF... mikor kellene? Nem változtatok karaktereket a program futása közben. Kivéve, ahol kihúzzák a pacmant a sárból, de azon is lassítani kellett, mert Zzzippel túl gyors.
-
A CALL CHAR_DEF... mikor kellene? Nem változtatok karaktereket a program futása közben. Kivéve, ahol kihúzzák a pacmant a sárból, de azon is lassítani kellett, mert Zzzippel túl gyors.
Valami effekttel nem lehetne még lassítani?
nem hang hanem video ?
Pl a másik pacman mozog ásít
-
Valami effekttel nem lehetne még lassítani?
Ehhez nincs ihletem. Nem is kellene lassítani már, szerintem pont jó a sebesség, kicsit talán lassú is.
-
Ehhez nincs ihletem. Nem is kellene lassítani már, szerintem pont jó a sebesség, kicsit talán lassú is.
A CALL CHAR_DEF... mikor kellene? Nem változtatok karaktereket a program futása közben. Kivéve, ahol kihúzzák a pacmant a sárból, de azon is lassítani kellett, mert Zzzippel túl gyors.
Akkor most melyik gyors vagy lassú?
Javaslat:
2240 CALL LENTO:CALL LENTO
2240 CALL LENTO(300)
4110 DEF LENTO(N)
4120 FOR VARJ=1 TO N
4130 LET X1=2+4*6
4140 NEXT
4150 END DEF
-
Akkor most melyik gyors vagy lassú?
A játékmenet jó, esetleg kicsit lassú az elején, de ez szubjektív. Én simán tudok játszani a játék elején úgy is, ha a CPU frequency az emulátorban 12Mhz. :D
Életvesztésnél a közjátékot kell lassítani, mert a Zzzip nagyon ledarálná fél másodperc alatt az egészet.
Javaslat:
2240 CALL LENTO(300)
Ez jó ötlet, köszi! Visszatérő probléma, hogy a Zzzip bizonyos részeket nagyon felgyorsít, és azokkal csinálni kell valamit.
-
Valamelyik progiban volt olyasmi ami ellenőrizte miben fút BASIC vagy ZZZip ben.
IF BASIC=1 THEN VARAKOZOSZORZO=1
IF BASIC=0 THEN VARAKOZOSZORZO=100
2240 CALL LENTO(300)
4110 DEF LENTO(N)
4120 FOR VARJ=1 TO N*VARAKOZOSZORZO
4130 LET X1=2+4*6
4140 NEXT
4150 END DEF [code]
-
Valamelyik progiban volt olyasmi ami ellenőrizte miben fút BASIC vagy ZZZip ben.
Ilyet ebbe már nem teszek, mert már (majdnem) készen van a program, ez meg a fejlesztéshez jó.
Az újabb módosításokat beletettem:
[attachurl=1]
[attachurl=2]
-
Egy szépséghiba javítva.
Ha nincs más javaslat, ez lehet a végleges.
[attachurl=1]
[attachurl=2]
-
3120 FOR X=1 TO 24
3130 IF X>4 AND X<11 THEN GOTO 3170
3140 OPEN #X:"video:"
3150 DISPLAY #X:AT X FROM 1 TO 1
3160 SET #X:COLOR 1,255
3170 NEXT
Javaslat
3130 IF X=5 THEN LET X=11
Felesleges ciklusuk kihagyása.
3620 PRINT #21:CHR$(27)&"I"&CHR$(SZIN)&CHR$(142);
3660 PRINT #11:CHR$(27)&"I"&CHR$(SZIN)&CHR$(142);
javaslat
3620 PRINT #21:I$&CHR$(SZIN)&CHR$(142);
3660 PRINT #11:I$&CHR$(SZIN)&CHR$(142);
már az VAR_INI ben meg adtad az I$- t
továbbá
340 LET FLOOR$=FLOOR$&CHR$(27)&"I"&CHR$(RND(15)+1)&A$
1400 PRINT #20,AT 1,4:CHR$(27)&"I"&CHR$(11)&CHR$(147)
1410 LET FLOOR$=FLOOR$(1:12)&CHR$(27)&"I"&CHR$(11)&CHR$(147)&FLOOR$(17:148)
2520 LET FLOOR$=FLOOR$(5:148)&CHR$(27)&"I"&CHR$(COL)&H$
Köszönjük.
-
már az VAR_INI ben meg adtad az I$- t
Majd megnézem frissebb fejjel, amiket írtál.
Kapásból ránézésre, valószínű azért hagytam itt a hosszabb verziókat, mert a rövidebb verzió feltehetőleg lassabb valamivel, és játék közben számít a sebesség is. (Vissza kell kutatnia egy változó tartalmát, ez biztos több idő, mint magát a változó tartalmát adni meg direkt.) Egyébként még egyszerűbben meg lehetne csinálni, hogy az I$(szin) megadásával is működjön, és ne kelljen I$&CHR$(szin).
-
Egyébként még egyszerűbben meg lehetne csinálni, hogy az I$(szin) megadásával is működjön, és ne kelljen I$&CHR$(szin).
Nem rossz ötlet letesztelem melyik a legjobb BASICban és zzzip ben.
-
1. SET INK x BASIC 00:03:21 ZZZiP 00:01:07
2. CHR$(27)&"I"&CHR$(x) BASIC 00:03:24 ZZZiP 00:01:03
3. I$&CHR$(x) BASIC 00:03:07 ZZZiP 00:01:02
4. IS$(x) BASIC 00:03:07 ZZZiP 00:01:02
Én EP128emu-n mértem.
Valódi gépen kilehetne próbálni.
Mellékelem a progikat /Basic és ZZZiP/
-
Én EP128emu-n mértem.
Kicsit meglepő a végeredmény.
Az I$(szin)-t én így gondolnám:
10 GRAPHICS ATTRIBUTE
20 PRINT #101,AT 2,2:I$(1)&"TEXT "&I$(2)&"ENTER"&I$(3)&"PRISE"
30 PRINT #101,AT 4,2:I$(4)&"128"&I$(5)&" kilobytes"
100 DEF I$(X)
110 LET I$=CHR$(27)&"I"&CHR$(X)
120 END DEF
(Tehát csak megadjuk paraméterben a szín kódját, és át is váltja a színt.)
Amit te írtál, az más, ha jól értem.
-
Kicsit meglepő a végeredmény.
Az I$(szin)-t én így gondolnám:
10 GRAPHICS ATTRIBUTE
20 PRINT #101,AT 2,2:I$(1)&"TEXT "&I$(2)&"ENTER"&I$(3)&"PRISE"
30 PRINT #101,AT 4,2:I$(4)&"128"&I$(5)&" kilobytes"
100 DEF I$(X)
110 LET I$=CHR$(27)&"I"&CHR$(X)
120 END DEF
(Tehát csak megadjuk paraméterben a szín kódját, és át is váltja a színt.)
Amit te írtál, az más, ha jól értem.
Nem, rosszul érted
DEF -et CALL al éred el.
-
DEF -et CALL al éred el.
Ezt nem tudom, hogyan érted. Nem csak CALL-lal, hanem PRINT-tel is el lehet érni a DEF-et. PRINT I$(x) kb. meghívja a DEF I$(x) részt és onnan meríti a tennivalóját, ez szerintem több idő, mint ha PRINT után adjuk meg ezt egyből.
-
Részben igazad van.
Bár ha megnézted volna rendesen a programot láthattad volna a hibámat.
mindegy.
Javítottam és bele raktam az 5.-nek variációdat
1. SET INK x BASIC 00:03:21 ZZZiP 00:01:07
2. CHR$(27)&"I"&CHR$(x) BASIC 00:03:24 ZZZiP 00:01:03
3. I$&CHR$(x) BASIC 00:03:07 ZZZiP 00:01:02
4. IS$(x) hibás BASIC 00:03:07 ZZZiP 00:01:02
4. IS$(x) BASIC 00:03:32
5. ISD$(x) def BASIC 00:05:01
Így az elgondolásod a legrosszabb.
-
3120 FOR X=1 TO 24
3130 IF X>4 AND X<11 THEN GOTO 3170
3140 OPEN #X:"video:"
3150 DISPLAY #X:AT X FROM 1 TO 1
3160 SET #X:COLOR 1,255
3170 NEXT
Javaslat
3130 IF X=5 THEN LET X=11
Felesleges ciklusuk kihagyása.
Ez biztosan jó így? A 3130-as sor lecserélésével a 6 és 10 közötti értékekre nem ugrik a 3170-es sorba.
-
Ha jól értettem a rutint akkor csatorna megjelenítés
1,2,3,4, 11,12,13,14,15,16,17,18,19,20,21,22,23,24
Mindenképp jó.
Felesleges lefuttatni az 5,6,7,8,9,10 sorokat.
-
Mindenképp jó.
Ja, hogy magát a ciklusváltozó értékét változtatod meg a cikluson belül! Akkor hiába van a FOR-nál 1 TO 24, az 5-nél átugrasztod 11-re, és akkor kimarad minden 6 és 10 között. Most már leesett.
Szerintem ezt már nem írom át a programban, mert csak induláskor a pálya kirajzolásakor van rá szükség, és csak 1-2 tizedmásodpercet (vagy annyit se) nyernénk vele. (Macerás a working directoryba visszamásolni mindent, átírni, majd Zzzippel lefordítani, majd Zipbe betömöríteni és feltölteni ide. :D ) De ettől még jó ötlet, jó az elv, nekem nem jutott volna eszembe, majd máskor ilyet is be fogok vetni, ha úgy alakul.
Amin még gondolkozom, hogy a felső pályán a lyukak helyére milyen színű iszapot lehetne tenni, amiben a pacman elsüllyed. Kicsit kísérleteztem vele, mire a mostani karakter meglett, de szerintem nem tökéletes. Ez itt 255 színű karakteres módot használ, tehát a 9 karaktersorban soronként bármilyen színű vonalak lehetnek. Ha erre sincs jobb javaslat a jelenleginél, akkor részemről kész a program. Ehhez mondjuk a színkódokat és a hozzájuk való színeket is elő kell szedni, és a jelenlegi programban sem feltétlen egyszerű letesztelni az új karaktert, hogy hogyan néz ki, de ha valaki mégis kísérletezne, és csak ez az akadály, szóljon! Annyi a nehézség, hogy a STOP le van tiltva, azt ki kell venni a programból, és STOP után a nem látható szöveges képernyőn kell a karakterdefinícióval próbálkozni, ami rögtön megjelenik a lyukakon, ez a zzzippeletlen basic programból (source mappában van) is megtehető. Most ez az aktuális:
SET CHARACTER 140,56,56,56,112,112,48,48,32,0
Ha esetleg valaki mégis próbálkozik, akkor a megfelelő ábra megtalálása után DISPLAY TEXT (vagy SHIFT+F5), és láthatóvá válik, amit beírtunk, de snapshotot is örömmel fogadok.
-
Nem vagyok grafikus. Olyasmit lehetne, hogy lefelé hullámozna a szín?
Nem csak a PACMAN karakter változna hanem a mocsár karaktere is.
-
Nem vagyok grafikus. Olyasmit lehetne, hogy lefelé hullámozna a szín?
Nem csak a PACMAN karakter változna hanem a mocsár karaktere is.
Érdekes ötlet, mindenképpen kipróbálom majd. Van egy set charactert gyorsító speek-es megoldásod, azzal biztos gyors lenne, bár nem szeretném, ha a sebesség rovására menne, mert így is túl könnyű a játék. Az is kérdés, a set character értékeit honnan szedje, amivel nem megy el sok idő. Lehetne véletlenszerű is, és 3-4 érték közül választhatna mindegyik sorra vonalszínt.
Egyébként nem a pacman karakter változik, hanem két különböző karaktert használ, egyszer az egyiket írja oda, egyszer a másikat. De még az is lehet, hogy a print helyett a set characteres (speek-es) megoldás gyorsabb lenne. És mondjuk ugrásnál is már ott lenne feljebb is a karakter, csak alapból 000 értékei lennének, és azt írná át.
Talán elkísérletezem ezzel még, de valószínűleg csak húsvét után.
-
Akkor jó munkát örülök, hogy valamivel segíthettem.
Ha látok valamit még majd javaslok, ha lehet még.
Még, még még ennyi nem elég...
-
ha lehet még.
Lehet, minden javaslat érdekel!
-
Egyébként nem a pacman karakter változik, hanem két különböző karaktert használ, egyszer az egyiket írja oda, egyszer a másikat.
Megtaláltam.
Javaslat.
Ha már nem változtatsz a progin akkor vagy a kezdet kezdetén a CHR$(x) helyett próbáld meg a "x" /értelem szerűen/ variációt használni.
Kb. "" 50 / 66 CHR$() lehet az arány.
Ha lassulás lenne a set charactert gyorsítóval kompenzálni tudod a 2610 sor VARJ ciklussal.
Valamint
CHR$(27)&"I"&CHR$(COL)
helyett későbbiekben
... I$&CHR$(COL)
Ha már bele raktad a VAR_INI -be
3810 LET I$=CHR$(27)&"I"
Köszönjük az ötletes progikat.
-
Faragtam a DEF EPI rutinból ami 771 bájt.
Most 663 bájt INFO-val.
-
Faragtam a DEF EPI rutinból ami 771 bájt.
Most 663 bájt INFO-val.
És még ezen is lehet faragni pár bájtot:
4410 SET #98:INK 1:PRINT #98,AT 1,1:"EN SE"
4420 SET #98:INK 2:PRINT #98,AT 1,1:" TE RI"
4430 SET #98:INK 3:PRINT #98,AT 1,1:" RP"
Ha így átírjuk. :D
4410 SET #98:INK 1:PRINT #98,AT 1,1:"EN SE"
4420 SET #98:INK 2:PRINT #98,AT 1,3:"TE RI"
4430 SET #98:INK 3:PRINT #98,AT 1,5:"RP"
Ha így folytatjuk, előbb-utóbb betöltés után nagyobb lesz a szabad hely, mint előtte. :D
-
Ezen is lehet faragni:
4410 SET #98:INK 1:PRINT #98,AT 1,1:"EN SE"
4420 SET #98:INK 2:PRINT #98,AT 1,3:"TE RI"
4430 SET #98:INK 3:PRINT #98,AT 1,5:"RP"
Így. (Bár lehet, te is erre utaltál.)
4410 PRINT #98,AT 1,1:I$(1)&"EN SE"
4420 PRINT #98,AT 1,3:I$(2)&"TE RI"
4430 PRINT #98,AT 1,5:I$(3)&"RP"
Nem ellenőriztem, de gondolom, kisebb helyet foglal az utóbbi verzió, mint az előbbi. Nem tudom, az & és a ; között van-e bármi különbség PRINT-es sztringeknél (működésben, helyfoglalásban). Ebben az esetben talán el is hagyhatók és szóköz is jó (mivel csak vezérlőkarakterekről van szó), de ebben nem vagyok biztos.
-
4410 PRINT #98,AT 1,1:I$(1)&"EN SE"
4420 PRINT #98,AT 1,3:I$(2)&"TE RI"
4430 PRINT #98,AT 1,5:I$(3)&"RP"
Nem rossz, de hibás helyesen
4410 PRINT #98,AT 1,1:I$&CHR$(1)&"EN SE"
4420 PRINT #98,AT 1,3:I$&CHR$(2)&"TE RI"
4430 PRINT #98,AT 1,5:I$&CHR$(3)&"RP"
Mindjárt megnézem.
-
Mindjárt megnézem.
Terjedelemben nincs változás 657 bájt
Viszont rövidebb idő alatt végez.
Ha így folytatjuk, előbb-utóbb betöltés után nagyobb lesz a szabad hely, mint előtte. :D
Tovább faragtam. 611 bájtra a kezdeti 771 bájtról.
-
Nem rossz, de hibás helyesen
Persze deklarálni kell majd úgy az I$()-t, hogy utána egyből csak a színkódot kelljen megadni, ne kelljen külön CHR-ezni. Ezt nemrég ki is kísérleteztem, hogy hogyan, de talán nem ennél a programnál, de valahol tuti megvan.
-
Itt is megtalálod.
Kódban kevesebb de lassabb. /4./
1. SET INK x BASIC 00:03:21 ZZZiP 00:01:07
2. CHR$(27)&"I"&CHR$(x) BASIC 00:03:24 ZZZiP 00:01:03
3. I$&CHR$(x) BASIC 00:03:07 ZZZiP 00:01:02
4. IS$(x) hibás BASIC 00:03:07 ZZZiP 00:01:02
4. IS$(x) BASIC 00:03:32
5. ISD$(x) def BASIC 00:05:01
Az "epi def"-t fel rakhatnád a "Hasznos kis Basic programok"-hoz
-
Tovább faragtam. 611 bájtra a kezdeti 771 bájtról.
Most nézem, a SET VIDEO MODE stb. utasításokat átírtad simán SET 23,x-re és hasonlókra, kisebb helyet foglalnak így. Ez kevésbé felhasználóbarát, de ha belegondolok még talán könnyebb is megjegyezni, hogy egy szám, vagy pedig az X vagy Y utal-e a vízszintes és a függőleges felbontásra. Ez is belekerül az új verzióba.
Nosza, közben a Zzzippes topikban előkerült a téma, hogy a színváltós vezérlőkódos megoldás másképp is kivitelezhető. Leteszteltem, és a rövidebb sorokat eredményező megoldás gyorsabb is, ami talán picit meglepő lehet. A tesztprogram:
5 STRING *3 I$(0 TO 8)
6 FOR I=0 TO 8
7 LET I$(I)=CHR$(27)&"I"&CHR$(I)
8 NEXT
10 GRAPHICS ATTRIBUTE
13 TIME "00:00:00"
15 FOR A=1 TO 1000
20 PRINT #101,AT 2,2:I$(1)&"TEXT "&I$(2)&"ENTER"&I$(3)&"PRISE"
30 PRINT #101,AT 4,2:I$(4)&"128"&I$(5)&" kilobytes"
35 NEXT
36 PRINT TIME$
43 TIME "00:00:00"
45 FOR A=1 TO 1000
50 PRINT #101,AT 2,2:CHR$(27)&"I"&CHR$(1)&"TEXT "&CHR$(27)&"I"&CHR$(2)&"ENTER"&CHR$(27)&"I"&CHR$(3)&"PRISE"
60 PRINT #101,AT 4,2:CHR$(27)&"I"&CHR$(4)&"128"&CHR$(27)&"I"&CHR$(5)&" kilobytes"
75 NEXT
76 PRINT TIME$
Az eredmény:
I$(x): 02:34
CHR$(27)&"I"&CHR$(x): 02:55
A programot Zzzippel lefordítva mindkét módszer 01:02 idő alatt futott le.
Így most már a SET INK utasítást is elfelejthetjük, és könnyebben válthatunk színt szöveg közben is, és mindez még kevesebb helyet is foglal a programban.
Az új dolgokat be is építettem a játékba:
[attachurl=1]
A fenti pályán az elsüllyesztő mocsár színeit/animációit még meg kéne csinálni.
-
Ha a
260 CALL EPI:CALL CHARS:CALL VAR_INI:CALL VIDEO_INI:CALL DEKOR:CALL PALCHANGE
sort felcserélnéd
260 CALL VAR_INI:CALL EPI:CALL CHARS:CALL VIDEO_INI:CALL DEKOR:CALL PALCHANGE
ra akkor már az EPI ben is használhatnád a "I$(x)" változót.
De mivel csak egyszer fút le mindegy, nem olyan hosszú a progi.