OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů

ByteFest2022

Právě je 01.10.2022, 07:36

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 
Autor Zpráva
 Předmět příspěvku: Srandičky s BASICem 1Z013B
PříspěvekNapsal: 09.09.2022, 19:25 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 76
Has thanked: 4 times
Been thanked: 13 times
Ahoj,

V rámci prokrastinace si pročítám japonské BASIC Magaziny a zkouším přepisovat některé hry, abych dokázal (sám sobě i některým zdejším členům), že i v BASICu se dá napsat hratelná hra - pravda, v modu MZ-700.

Jak jistě všichni víme, tak GET A$ neumí autorepeat. Nicméně takhle
Kód:
GET A$:A$=CHR$(PEEK(95))
autorepeat už funguje. Ani není potřeba používat stroják, což jsem řešil už kdysi.

A přichází vtípek. Pro logické výrazy v IF se používá * a +. Logický výraz se ovšem vyhodnotí jako 0 při FALSE, ale -1 při TRUE.
Takže
Kód:
(AX=1)*(AY=1)+(TX<>0)
při AX=1,BX=1 a TX=1 vyhodnotí jako (-1)*(-1)+(-1) = 0 - což je blbě

Druhá znaková sada se dá v S-BASICu použít takto:
Kód:
POKE 93,PEEK(93)+128:PRINT[0,1]CHR$(164,150,17,20,20,165,171)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Srandičky s BASICem 1Z013B
PříspěvekNapsal: 16.09.2022, 09:32 
Offline
Kecálek
Uživatelský avatar

Registrován: 06.08.2013, 10:49
Příspěvky: 220
Bydliště: Praha
Has thanked: 215 times
Been thanked: 66 times
Tenhle Basic nemá ani ELSE a složené podmínky se musí řešit přeskakováním řádků.

Naopak docela šikovné je to, že si pamatuje dvě obrazovky textu, přes které lze libovolně skrolovat pomocí Shift + nahoru/dolů.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Srandičky s BASICem 1Z013B
PříspěvekNapsal: 16.09.2022, 10:48 
Offline
Kecálek

Registrován: 04.02.2016, 10:21
Příspěvky: 76
Has thanked: 4 times
Been thanked: 13 times
mop píše:
Tenhle Basic nemá ani ELSE a složené podmínky se musí řešit přeskakováním řádků.

Je to tak, ten BASIC je takový poloviční assembler. Složené podmínky ovšem fungují pomocí * a + jen je potřeba dát pozor na to, že výsledek porovnání je -1. Například, když chceš udělat sekvenci 0,-1,0,-1,..., tak stačí tohle bez IFování:
Kód:
A=(A=0)

V sokobanovi mám třeba takové podmínky a fungují dobře a rychle:
Kód:
240 IF (A$="A")*(PEEK(MEM-40)=$6D)*(PEEK(MEM-80)=$2E) GOTO 370

Víc mi vadí, že to neumí načíst přímo znak z obrazovky, jako např. MZ-80B BASIC má CHARACTER$(X,Y) - musíš použít PEEK a pamatovat na to, že ten znak není v ASCII ale DISPLAY kódu. To je trochu otrava. I tak je ten BASIC rychlý a jsi schopen udělat hratelnou hru.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Srandičky s BASICem 1Z013B
PříspěvekNapsal: 17.09.2022, 19:54 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 09.10.2013, 19:04
Příspěvky: 1217
Has thanked: 120 times
Been thanked: 50 times
vaclavpe píše:
mop píše:
Víc mi vadí, že to neumí načíst přímo znak z obrazovky, jako např. MZ-80B BASIC má CHARACTER$(X,Y) - musíš použít PEEK a pamatovat na to, že ten znak není v ASCII ale DISPLAY kódu. To je trochu otrava. I tak je ten BASIC rychlý a jsi schopen udělat hratelnou hru.

O ničom takom neviem, ale dalo by sa to riešiť takto (MZ-800):
PEEK($2000+40*Y+X), prípadne PEEK($2000+80*Y+X)

_________________
Sharp MZ-821
Milsa MZ-841


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 4 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz