Jak jsem slíbil minule, přišel čas pro nenáročnou hru - nemám sice za cíl ukázat vám, jak se píší hry, ale v BASICu se dost dobře animovat nedá a hra je ten nejlepší způsob, jak si to ukázat. Připravte si znakovou sadu z kapitoly 1.3.1 a hurá do toho...
Jednoduchá hra v BASICu
2.1 Neotřelý originální námět
Ještě než začnete přepisovat výpis programu do počítače, prozradím vám, o co ve hře půjde. Joe se nachází v místnosti plné lávek a jeho úkolem není nic překvapivějšího, než dostat se z té nejhořejší na tu nejspodnější. Aby to nebylo tak jednoduché, ne po každé lávce se dá bez problémů chodit a padat se smí pouze z omezené výšky. A teď ... hurá do opisování!!!100 LET j$="!""%&#$'()*-.+,/0": LET lives=3: LET level=1 102 GO SUB 1000 104 GO SUB 1100 106 GO SUB 1300 110 IF konec=1 THEN LET lives=lives-1: BEEP 1,-10: IF lives>0 THEN GO TO 102 112 IF konec=0 THEN GO TO 104 120 CLS : PRINT AT 10,11;"GAME OVER" 999 PAUSE 0: INK 0: PAPER 7: BORDER 7: CLS : STOP 1002 INK 7: PAPER 0: BORDER 0: CLS : PRINT AT 10,12;"LEVEL ";level 1004 PAUSE 0: CLS 1006 LET pad=0: LET konce=0: LET time=1000 1018 RESTORE (level-1)*10+9000 1020 READ y,x: LET pos=1 1022 READ lin,col,ink,pap,t$ 1024 IF t$="" THEN GO TO 1200 1026 PRINT AT lin,col; INK ink; PAPER pap;t$: GO TO 1022 1102 IF INKEY$="s" THEN BEEP .1,1: PAUSE 0: PAUSE 0: BEEP .1,10: RETURN 1104 IF INKEY$="a" THEN LET konec=1: RETURN 1106 IF pad>0 THEN GO TO 1180 1108 IF INKEY$="o" THEN GO TO 1150 1110 IF INKEY$<>"p" THEN RETURN 1120 IF x=30 THEN RETURN 1132 GO SUB 1200 1134 IF pos=1 OR pos=13 THEN LET pos=5: GO TO 1200 1136 IF pos=5 OR pos=9 THEN LET pos=1: LETx=x+1: GO TO 1200 1150 IF x=1 THEN RETURN 1162 GO SUB 1200 1164 IF pos=9 OR pos=5 THEN LET pos=13: GO TO 1200 1166 IF pos=13 OR pos=1 THEN LET pos=9: LET x=x-1: GO TO 1200 1180 GO SUB 1200 1182 LET y=y+(y<20) 1200 PRINT OVER 1;AT y,x;j$(pos TO pos+1); AT y+1,x;j$(pos+2 TO pos+3) 1205 RETURN 1300 LET pad2=pad 1302 IF SCREEN$ (y+2,x)=" " THEN IF SCREEN$ (y+2,x+1)=" " THEN LET pad=pad+1 1304 IF y=19 THEN LET konec=1 1306 IF pad=pad2 THEN LET pad=0: IF pad2>4 THEN LET konec=1 1310 RETURN 9000 DATA 2,10,4,5,0,7,"111111111111111" 9001 DATA 8,1,0,7,"111111111111111111111111",8,10,0,0," " 9002 DATA 13,8,0,7,"11111111111" 9009 DATA 0,0,0,0,""
2.2 Komentář výpisu programu
Přece jenom, ne všichni mají náladu zkoumat, co jsem napsal, a tak svůj produkt trochu osvětlím:2.3 Play the game
Po spuštění se na obrazovce objeví 4 plošinky z jedniček a pár znaků představující Joa. S tím se ovšem nesmíříme a konečně udáme tu znakovou sadu z minule. NapišteCLEAR 49999: LOAD ""CODE 50000a nahrajte upavený font. Dále doplňte program následovně:
1000 POKE 23606,0: POKE 23607,60(tj. tiskni sadu z ROM)
1008 POKE 23606, A: POKE 23607,B(kde A, B si musíme spočítat - viz. 1.2.2)
Také je dobré dopsat řádek 118, kde bude to samé co na ř. 1000. Protože jsme si definovali pouze několik prvních znaků, není vrácení původních hodnot tak nutné, ale, obecně vzato, tam patří. (Abych nezapomněl: zaměňte v datech dvojice "0,7" za "7,0".)
Spustíte-li znovu program, bude po obrazovce běhat Joe. Prozatím nevyužité předefinované znaky zneužijeme k následujícímu: !3! použijeme jako zarážku a "4" jako nebezpečnou podlahu, s "2" si naložte dle libosti. Rozšíříme data místností:
9002 DATA 3,5,6,0,"3",8,12,5,0,"44"Pro hru to nebude mít zatím žádné důsledky, ty musíme vyrobit my. Tedy...
1122 IF pos=5 THEN IF SCREEN$(y+1,x+3)="3" THEN RETURN 1152 IF pos=12 THEN IF SCREEN$(y+1,x-1)="3" THEN RETURNa teď již nejde jít tam, kde stojí v cestě "3".
Na závěr mám pro vás úkol: doplňte program tak, aby se Joe zabil i v případě, že vstoupí nohama na "44". Protože vás nechci napínat až do příště, najdete řešení na konci dílu.
2.4 Jak snadno přijít k penězům
Hru můžete ještě vylepšit o následující: když ji Joe stoupne na "22", postupuje do další místnosti, délky smrtelných pádů nemusí být konstantní, po pádu nebo průchodu místností zahraje nějaká znělka, ovládání klávesami by mohlo být předefinovatelné, neškodilo by ani ošetřit kempston joystick. Zatím nevyužitá proměnná time se může zapojit do hry a omezit dobu určenou k průchodu místnostmi, atd. Jsou to všechno samozřejmě nesmysly, které nemají praktický význam, ale pokud to ještě neumíte, můžete se na nich naučit spousy postupů a triků... Nakonec doporučuji ke hře dodělat pěkný obrázek, dobře znějící hudbu, hezké intro, pár zajímavých vizuálních efektů, a všechno to poslat do PROXIMY k distribuci... příjemnou zábavu.Příště nadobro opustíme starý dobrý BASIC a zavítáme do strojového kódu, jehož rychlost nám umožní daleko více. Bohužel už se nesetkáte s celým výpisem, ale pouze s úryvky z nejhrůznějších (pardon, překlep - správně nejrůznějších) rutin...
Řešení (ovšem že ne jediné):
1308 IF SCREEN$(y+2,x)="4" THEN IF SCREEN$(y+2,x+1)="4" THEN LET konec=1
(pokračování příště)