Za jídlo, šaty a vzduch otročíme na programech z temných světů

Programujeme v BASICu: Dialogové hry (2)

Je načase pokročit v našich programovacích lekcích a ukázat si další konverzační hru. Nebude to nic menšího než přistání na Měsíci.

Skutečné přistání na Měsíci byl počin plný složité fyziky a lidského umu podpořený nepříliš výkonným hardwarem. Hra inspirovaná tímto astronautickým počinem je sice touto fyzikou inspirována, ale v podstatě jde o jedno velké zjednodušení.

Hráč sleduje čtyři tři základní veličiny: výšku modulu nad povrchem Měsíce, rychlost modulu (kladná = modul letí vzhůru, záporná = modul padá) a zbývající palivo a zadává, kolik kilogramů paliva chce v dalším kole spotřebovat.
Fyzikální model pak používá už jen dva další údaje: gravitační zrychlení Měsíce (konstanta) a aktuální zrychlení modulu. Každé kolo uplynejedna sekunda. Největší zjednodušení výpočtů spočívá v tom, že se předpokládá, že maximální možná hodnota spáleného paliva (zde 16kg) způsobí takový tah motoru, který udělí lodi zrychlení rovné gravitačnímu, jen s opačným směrem. Pokud nespálíte palivo žádné, padá loď s gravitačním zrychlením směrem k povrchu, hodnota uprostřed škály (zde 8kg) pak se rychlost modulu nijak nemění.
Cílem je pak samozřejmě přistát s určitou maximální rychlostí a dosáhnout toho vhodně zvolenou spotřebou paliva. Pokud vám palivo dojde, spadnete, pokud přistanete s příliš velkou rychlostí, je to prakticky totéž. Počáteční hodnoty výšky nad povrchem, zásoby paliva nebo maximální přistávací rychlosti je možné v programu nastavit.

Následující zdrojový kód byl napsán a odzkoušen na počítači ZX Spectrum (a z emulátoru následně pomocí LLIST vytištěn do txt souboru). Kromě klíčových slov pro nastavování barvy pozadí se v něm ale v zásadě nepoužívají žádně spectristické speciality, takže by s drobnými modifikacemi měl běžet jinde. Zkuste si upravovat počáteční hodnoty na řádcích 20 až 50 tak, aby to byla větší či menší zábava, námaha atd.

  10 CLS
  20 LET v=-20
  30 LET f=400
  40 LET g=-2
  50 LET h=500
  60 LET i=1
  70 PRINT "Pristavas na Mesici. V kazdem   kroku lze spalit 0-16kg paliva. Pristavaci rychlost
       musi byt nizsi nez 4m/s, jina k rozbijes  modul a uz neodletis.": PRINT "Hodne stesti!": PRINT
  80 PRINT PAPER 3;i;".kolo  ";PAPER 4;"Rychlost: ";v;"m/s", PAPER 5;"Vyska: ";h;"m",
       PAPER 6;"Palivo: ";f;"kg",: PRINT
  90 PRINT
 100 INPUT "Kolik paliva chces spalit? ";burn
 110 IF burn > 16 OR burn < 0 OR burn > f THEN GO TO 100
 120 LET actg=g-(g/8)*burn
 130 LET v= v+actg
 140 LET h=h+v
 150 LET f=f-burn
 160 LET i=i+1
 170 IF h<=0 AND v>-4 THEN PRINT PAPER 4;"Uspesne jsi pristal, gratuluji!",: PAUSE 0: GO TO 10
 180 IF h<=0 AND v<=-4 THEN PRINT PAPER 2;"Rychlost je prilis vysoka!","Havaroval jsi.",, :
       PAUSE 0: GO TO 10
 190 GO TO 80

Pokud jste opravdu, ale opravdu líní (nebo se vám nechce korigovat převodem do ASCII zmršené formátování textu), můžete si stáhnout Přistání na Měsící jako tap soubor a do Spectra si ho pomocí utilitky dle vlastního výběru přepískat.

Na závěr malá ukázka fungování uvedeného zdrojového kódu:

Přistání na Měsíci

Příště se naposledy podíváme na dialogové hry. Ještě zatím nevím, kterou si vyberu, a proto pokud máte nějakou oblíbenou směle s ní do komentářů, stejně jako se zážitky a dojmy z osmibitové astronautiky. BASICu zdar!