Welcome, Guest. Please login or register.


Author Topic: Multetris (TVC) (Read 616 times)

Offline szipucsu

  • EP addict
  • *
  • Posts: 9597
  • Country: hu
    • Támogató Támogató
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 84.0 Firefox 84.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Multetris (TVC)
« on: 2020.December.26. 21:54:27 »
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:
* Multetris 2020 from TVC.ep128s (55.59 kB - downloaded 196 times.)
* Multetris 2020.zip (14.01 kB - downloaded 196 times.)
26028-2

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.
« Last Edit: 2020.December.26. 21:59:54 by szipucsu »
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Offline Ferro73

  • EP lover
  • *
  • Posts: 866
  • Country: hu
  • OS:
  • Linux (Ubuntu) Linux (Ubuntu)
  • Browser:
  • Firefox 84.0 Firefox 84.0
    • View Profile
Re:Multetris (TVC)
« Reply #1 on: 2020.December.27. 22:18:31 »

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.


Esetleg 2 sor:
Code: [Select]
xx    GET A$
      IF A$="" THEN xx
Vagy 1 sor
Code: [Select]
1000 IF INKEY$="" THEN 1000

Offline szipucsu

  • EP addict
  • *
  • Posts: 9597
  • Country: hu
    • Támogató Támogató
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 84.0 Firefox 84.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re:Multetris (TVC)
« Reply #2 on: 2020.December.28. 08:44:27 »
Vagy 1 sor
Code: [Select]
1000 IF INKEY$="" THEN 1000
Ezzel az a baj, nem jegyzi meg, melyik billentyűt ütöttük le. De ha csak az a cél, hogy billentyűleütésre továbbengedjen, arra jó.
Biztos van még PEEK-es lekérdezős módszer arra, milyen billentyű van lenyomva, de egy sorban talán azt sem lehet megjegyeztetni.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos

Online Tomato77

  • EP user
  • *
  • Posts: 392
  • Country: hu
    • Támogató Támogató
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Chrome 87.0.4280.88 Chrome 87.0.4280.88
    • View Profile
Re:Multetris (TVC)
« Reply #3 on: 2020.December.28. 12:18:47 »
DO
  GET A$
LOOP UNTIL A$=""
Ez így nem fog billentyű lenyomásra várni. Az UNTIL-nál kilépési feltételt kell megadni, ami teljesül is, ha nincs lenyomott billentyű. Vagy WHILE-lal fog működni, vagy a feltételt kell módosítani, pl. A$<>"". Ferro73 két sorosa jó, és az tűnik a legrövidebbnek.
Kotasoft

Offline szipucsu

  • EP addict
  • *
  • Posts: 9597
  • Country: hu
    • Támogató Támogató
  • OS:
  • Windows 7/Server 2008 R2 Windows 7/Server 2008 R2
  • Browser:
  • Firefox 84.0 Firefox 84.0
    • View Profile
    • Webnyelv.hu - Tanuljunk nyelveket!
Re:Multetris (TVC)
« Reply #4 on: 2020.December.28. 13:33:13 »
a feltételt kell módosítani, pl. A$<>""
Ja, igen, a programba így írtam, csak ide a fórumra már nem gondolkoztam, mit írok.
Az eredeti TVC-s program működik amúgy az EP-s TVC emulátorral is, és az ráadásul gyorsabb is, mint az átírt basic program. Fura, hogy a basic lassúsága így visszahozható. Szóval ennek az átírásnak csak akkor lesz értelme, ha valami extrát viszünk bele. (Bár a Zzzip is már extra valamennyire.) Már van egy pár ötletem. De a soronként változó palettát sajnos nem lehet megcsinálni, legalábbis én nem tudnám, mert nem feltétlen karaktersoronként vannak a rácsok.
100 SOUND SOURCE 2,STYLE 128,PITCH 25.2,SYNC 1
110 SOUND PITCH 25,SYNC 1
120 ! Videos