Funny Fruits

Základní informace

  • datum vydání poslední verze na PMD-85: 7. 7. 2018
  • původní kód, inspirovaný hrou z platformy MS-DOS
  • využití RAM: (ve vývoji)
  • podpora modelů: všechny verze PMD-85 (1/2/2A/3)
  • grafika: volitelně ČB, 4-barevný RGBM, ColorAce
  • hudba/zvuky: (ve vývoji)
  • ovládání: (ve vývoji)

Ovládací klávesy

  • myš, později joystick a klávesnice

Popis hry a její vlastnosti

Cílem hry je vydržet co nejdéle a maximalizovat skóre v podobě šťávy, vyrobené z nasbíraného ovoce.

Hráč přesouvá ovoce tak, aby stejný druh ovoce uložil do svislé či šikmé řady. Pokud uloží pět a více stejných kousků do řady, všechny tyto kousky v nepřerušené řadě zmizí, uvolní místo pro další ovoce a samozřejmě se přičte skóre v podobě šťávy ve zkumavce vedle hracího pole. Velikost přírůstku šťávy je přímo úměrná množství seřazeného (a odstraněného) ovoce. Ovšem po každém přesunu jednoho ovoce v hracím poli se objeví tři nové kousky ovoce. Smyslem hry je zřejmě vybudovat strategii řazení ovoce tak, aby rychlost jeho odstraňování byla v rovnováze (nebo větší) než rychlost přírůstku nového ovoce.

Soubory ke stažení

pozn.: ke spuštění hry v simulátoru PMD-85 od RM-TEAMu je nutno zvolit model PMD 85-1, zapnout podporu myši 602 a zapnout režim ColorAce

Galerie obrázků (hra v režimu ColorAce)

Herní plocha

 

 

 

 

 

 

 

9 komentářů u „Funny Fruits

  1. Libor L.A.

    Původně jsem záměr přepsat tuto hru pojal v okamžiku, kdy dcera začala shánět verzi pro DOS. A napadlo mě, že by to byl ideální adept na ovládání myší. Ovšem požadovaná rychlost odezvy CPU na snímání „myších“ signálů je neslučitelná s kmitáním ovoce ve vybrané buňce. Na to nemám řešení. Možná časem indikátor vybraného ovoce budu řešit jinak a tu implementaci myši dodělám. Uvažoval jsem o ovládání myší, kompatibilním s nativní myší PMD-85 a ATARI ST MOUSE (hardwarově a konektorově je kompatibilní se standardními JOYSTICKy) a kdysi (1995?) už jsem driver tohoto typu myši na PMD-85 rozchodil.

    Prozatím je indikátor vybrané buňky řešen „ovíjejícím se pruhem v délce poloviny obvodu vybrané buňky po vnějším obvodě buňky“. Je totiž nutno rozlišit vybranou buňku ve smyslu náhrady „myšího“ kurzoru a vybranou buňku ve smyslu již označeného ovoce (zde, ve shodě s originálem, se jedná o vibrace ovoce v označené buňce). Popis složitý, v praxi doufám intuitivní. Ostatně, brzy budu chtít uvolnit demo s pohybem kurzoru.

  2. Libor L.A.

    Integrace základního grafického jádra a ovladače myši dokončena.

    Započato s modulem detekce buňky, na kterou klikne hráč myší. Prozatím pracuji nad variantou, kdy se s ohledem na adresu myšího kurzoru ve videoram vymezí svislý a vodorovný pruh, v jejichž průsečíku zůstanou 0 až 3 buňky. Tato eliminace probíhá rychle. Na výslednou sadu maximálně tří potenciálně blízkých buněk pak aplikuji Pythagorovu větu, abych určil nejmenší pixelovou vzdálenost středu vybírané buňky od pozice myšího kurzoru. Vypočítat druhé mocniny rozdílů souřadnic v kartézském systému je jednoduché, na to stačí rutina osmibitového násobení. Jak ale na odmocninu? Protože nejrychlejší výpočet odmocniny je ten, který se neprovede, zkusím to právě takto. Vycházím z předpokladu, že porovnávat odmocniny dvou čísel je z hlediska jejich vzájemné velikosti totéž, jako porovnávat jejich přímé hodnoty, tedy druhé mocniny délek přepon. Teď už to jen realizovat. Na tom se právě pracuje a až to odladím i na skutečném železe, uvolním asi první klikací demo.

    1. Libor L.A.

      Modul detekce označené buňky je hotov. Pár testů jsem udělal a zatím to dělá to co má. Ostatně během vývoje se naoznačuji tolika buněk, že se případná chyba dříve či později projeví. Tak jako vždy modul prodělal určitou evoluci. Nakonec to funguje tak, že při stisku levého tlačítka myši procházím všechny relevantní buňky a testuji jejich odchylku od kurzoru myši nezávisle pro obě souřadnice X a Y. Pokud některá z těchto dvou odchylek je větší než 12, jdu na test další buňky, neboť jsem evidentně mimo půdorys buňky. Ale pokud jsou obě odchylky dX i dY pod 13 pixelů, vypočtu pomocí tabulky druhou mocninu. Ta tabulka je pak definována pouze pro druhé mocniny čísel 0 až 12 a je tedy přijatelně krátká. Abych pak definitivně rozhodl, zda jsem kliknul na právě testovanou buňku, porovnám výraz dX^2 + dY^2 s konstantou 144 (ta představuje druhou mocninu poloměru 12 pixelů, což je přijatelná kruhová aproximace šestiúhelníku buňky). Zda to funguje, můžete posoudit v aktuálně uvolněném demu.

      Nyní je na řadě modul RANDOM. Asi není problém generovat (pseudo)náhodná čísla. To, co činí tento modul poněkud složitějším bude mechanismus, který bude statisticky zvýhodňovat hodnoty, které dlouho při losování nepadly. Ať již při výběru ovoce či při výběru buňky, kde se toto ovoce objeví.

  3. Libor L.A.

    Další modul dokončen. Tentokrát to byl modul pro mazání ucelených řad stejného druhu ovoce. Ten byl nad očekávání jednoduchý. Nyní se pokusím udělat animaci buňky, označené myší. Buď se podaří časově skloubit kmitání ovoce s rychlostí ovladače myši (něco mě napadlo) nebo to udělám tím ovíjejícím se hadem kolem označené buňky (již vyzkoušeno a tento druh kurzoru bude stejně použit, pokud hráč přepne ovládání na klávesnici). Po zvládnutí této etapy uvolním další demo, pak to totiž bude mít smysl. A pak zbyde kromě estetických kudrlinek (menu, fonty, zvuk, atd.) už jenom algoritmus pro hledání cesty (bude to Dijkstra).

  4. Libor L.A.

    Dnes jsem tedy uvolnil první funkční demo. Chybí ty zmíněné estetické drobnosti ale hlavně chybí dodělat algoritmus pro nalezení cesty mezi výchozí a koncovou buňkou cesty, po které se pohybuje ovoce. Prozatím to funguje tak, že označené ovoce nepotřebuje spojitou cestu do cílového bodu ale objeví se tam přímo. O to je ta hra drasticky jednodušší. Prozatím.

    Kupodivu se podařilo nalézt řešení souběžného kmitání ovoce a dostatečně rychlého pohybu myši. Ostatně, můžete posoudit sami.

    A ještě jednou upozorňuji, že na emulátoru PMD-85 musíte zapnout verzi 1, zapnout podporu myši 602 a zvolit systém ColorAce. Hra se nahrává z magnetofonu příkazem MGLD 01 a spouští příkazem JUMP 0000.

    1. Libor L.A.

      1. chyba – hned po startu se omylem aktivuje kurzor označené buňky a to způsobí falešné zobrazení čtvrtého ovoce
      2. chyba – po obsazení přesně všech buněk hracího pole se hra neukončila i když už bylo jasné, že nově označenou buňku už nebude kam umístit

      obě chyby odstraněny

  5. RomBor

    Paráda.
    Možno by bolo dobré, po pridaní posledného ovocia v rade, to posledné aj zobraziť a pred odstránením celého radu s ovocím, 2x/3x „zablikať“ celým radom.

    1. Libor L.A.

      OK. Beru na vědomí. Popřemýšlím nad tím, jak by to implementačně vypadalo. Zatím jsem to udělal podle originálu na DOSu.

  6. Libor L.A.

    Doplněno:
    1) probliknutí zkompletované řady ovoce
    2) doplněn ukazatel rekordu
    3) sjednoceny vnitřní procedury kolem kmitacího „kurzoru“ vybraného ovoce
    4) doplněna obsluha klávesy STOP (prozatím jen restart hry)

    Upload této verze proveden. Nyní budou na řadě ty kudrlinky, o kterých jsem mluvil již dříve. Včera jsem dělal nějaké propočty kolem odhadované doby nalezení nejkratší cesty pro cestování ovoce po obrazovce. Floyd-Warshallův algoritmus, který řeší nalezení nejkratší cesty silově, by k nalezení cesty potřeboval odhadem 55 vteřin. Tudy ne. Již zmíněný Dijkstrův algoritmus zase vyžaduje datové struktury, které si s assemblerem moc netykají. Respektive jejich realizace zabere nějaké to úsilí. Takže hru zprovozním bez hledání cesty a až to celé pojede, pak se uvidí, zda bude ovoce hledat a procházet cestu mezi výchozí a cílovou buňkou, či zda to zůstane v současné podobě (hra je jednodušší ale ne zase tak moc, jak jsem čekal).

Napsat komentář

Vaše emailová adresa nebude zveřejněna.