Nemrég írt valaki TVC-re egy logikai játékot basicben. Gondoltam, átírom EP-re. Kicsit lassú lett, de a Zzzip simán lefordította.
A játék célja, a képernyő alsó részén lévő elemeket elhelyezni a felső rácsos részen. Ha egy sort teljesen kitöltenek az elemek, akkor az a sor eltűnik, mint az igazi Tetrisben. Minden sor eltüntetéséért kapunk egy pontot. Összesen 86 pontot kell összegyűjteni, mert 86-ban jelent meg a TVC.
Meg kell adni, melyik alsó boxból vesszük ki az elemet, és hogy a felső rácsos részen hova tesszük, ezeket számokkal kell bepötyögni. Először az alsó box számát (1-3) kell megadni, utána a felső rácsos részen azt a koordinátát, ahol az elem kezdődjön, először a függőleges, utána a vízszintes koordinátát kell megadni, mint a torpedós játéknál.
Ha minden kötél szakad, az "m" billentyűvel segítséget lehet kérni, 3 segítség van összesen.
Ha már semmiképpen nincs tovább, a "q"-val ki lehet lépni a programból.
Snapshotban a Zzzippel fordított változat:
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
[ Guests cannot view attachments ]
Ez most (egyelőre) a TVC-s játék egy az egyben átírt változata, semmi extra nincs benne, de még lehetne rajta fejleszteni, színesíteni, stb.
Az átírás menetéről néhány érdekesség, hátha valakit érdekel:
A TVC képernyője (4 színű módban) 32 karakter széles (az EP-é 42), ezért 32 széles videolapot nyitottam. A függőleges méretet 27-re állítottam be, így talán kicsit túl lent van a kép. Azért adtam meg 27-et, mert a grafikus képernyő koordinátái így esnek egybe a legjobban az EP-s koordinátákkal, a grafikus képernyő így lesz a két gépen szinte ugyanakkora függőlegesen. TVC-n egyszerre szöveges és grafikus a képernyő, szövegesen 24 karakter fér el rajta, mint EP-n alapból, grafikusan viszont nagyobb, mint az EP-s 24 karakter magas képernyő. Ez azért van, mert a TVC-s karakterek egy pixellel magasabbak, így több hely kell nekik. A játék vegyesen használ PRINT és PLOT parancsokat is, ezért állítottam akkorára a képernyőt, mint TVC-n, 27 karakter magasra (ami a grafikus képernyő magasságának felel meg.)
Először attribútum módban akartam megcsinálni, hogy több szín lehessen majd, de ott szembesültem a ténnyel, amit karácsonykor írtam, hogy külön kezeli a PRINT-tel és a PLOT-tal rajzolást, "két ceruzát használ". Így 4 színes mód maradt. Itt a probléma az volt, hogy ha felülírunk valamit, akkor azt szóközzel nem lehet letörölni, TVC-n meg igen, így papírszínnel felül kellett írni előbb azt a helyet.
A legnagyobb gond az volt, hogy TVC-n rengeteg utasítást bezsúfolnak egyetlen sorba. Ezt szétszedni nem lenne olyan nehéz, de a sorszámozás igen sűrű volt. TVC-n egy renumber segített volna, de sajnos rosszul működik a TVC 64+-ban a renumber. A program tele volt gosub-return utasításokkal. Először ezeket átírtam mind call-def rutinokká, közben a gotóknál bejelöltem, melyik hova ugrik. Az egészet txt fájlban szerkesztettem. Szerkesztés közben a sok utasítást szétszedtem több sorba, közben a sorszámokat úgy módosítottam, ahogy kell. A DEF-ek miatt keletkezett egy rakat belső változó, ezeket külön kellett deklarálni a program elején NUMERIC után. Ráadásul ha nem adunk értéket a változóknak, akkor TVC-n (és sok más gépen) alapból 0 a numerikus változók értéke, EP-n meg hibaüzenet van, ezért néhány változónak 0 értéket kellett adni az elején.
Gyakorlatilag alig volt más eltérés. Ha egy utasítás lett volna egy sorban, szinte át se kellett volna írni a programot, futott volna, ahogy van.
Egyéb eltérés: CLS helyett CLEAR SCREEN vagy CLEAR #x kell.
Eltérés még, hogy ha PLOT-tal adjuk meg a PRINT-elendő szöveg koordinátáit, TVC-n nem kell vessző a PLOT végére, EP-n igen, mert EP-n akkor a pontot is odateszi, ami nem szép, pl.
TVC: PLOT 300,300:PRINT "text"
EP: PLOT 300,300,:PRINT "text"
Másik eltérés a GET használata, TVC-n a GET A$ önmagában billentyűleütésre vár és nem is megy tovább, amíg nem ütünk le billentyűt. Ehhez EP-n 3 utasítás kell (ha nem akarjuk a GOTO-t használni):
DO
GET A$
LOOP UNTIL A$=""
TVC-n erre egyetlen GET A$ elég.
Volt még egy helyen eltérés, ott TVC-n IF NOT A$="3" THEN volt, amit az EP vagy nem ért, vagy máshogy értelmez, ezt kellett átírni IF A$<>"3"-ra.