OldComp.cz

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


Právě je 28.03.2024, 20:27

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




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 35 ]  Přejít na stránku 1, 2, 3  Další
Autor Zpráva
 Předmět příspěvku: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 10:36 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Zdravím všechny příznivce PMD 85-3 (!), vznikla nám pro něj nová hra - Miny. Hra je momentálně v pozdní beta fázi před finalizací, chci ještě doupravit jednu melodii ale to je jen drobnost. Tak prosím všechny aby ji vyzkoušeli a případně mi napsali své postřehy, nebo chyby co byste našli. Na nižších verzích PMD pravděpodobně nebude běhat, používá volání vstupů pouze verze 3. Ale nebude příliš složité to případně změnit, jen by se musela přepsat HEX adresa rutiny čtoucí klávesnici.

Hra je napsaná v Basicu, takže se spouští přes LOAD 00 + RUN s tím, že pro každé spuštění musíte znovu nahrát obrázky. Když hned po prvním nahrání program spustíte, kazeťák vám hezky bude pokračovat na obrázky.

Je k dispozici v české a anglické mutaci (MINYCZE a MINYENG), natvrdo kvůli obrázkům používá Colorace tak nebude vypadat na fyzickém, Colorace nevybaveném PMD 85-3 tak hezky ale je samozřejmě hratelná.


Přílohy:
Miny pro PMD 85-3.7z [17.75 KiB]
486 krát
Miny pro PMD 85-3.zip [20.96 KiB]
482 krát
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 14:29 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
A nechtěl bys to raději rovnou napsat v assembleru? Ušetřil by sis tím mnoho problémů (psaní zdrojového kódu na PMD-85), vyzkoušel by sis rychlou platformu. Nakonec by to ještě frčelo na všech verzích PMD-85. Na psaní mohu doporučit PSPad. Ten mi kdysi doporučili někteří místní členové a já si ho nemohu vynachválit. Pokud bys chtěl poslat nějaký vzorový jednoduchý projekt, aby ses kouknul na nějaký Hello World, rád pošlu. S tím BASICem to bude trápení, to mi věř. A z pedagogického hlediska bych možná nakonec spíše vyzdvihnul spíše ten assembler, ovšem ve spojení s kulturním vývojovým prostředím, víz výše.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 15:00 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Třeba chtěl ale to bych nic nenapsal protože assembler neznám a na rozdíl od něj v basicu tu hru splichtím :-). Ono upravit to pro verzi 2A by bylo jednoduché - stačí změnit adresu odkud se čte kód zmáčknuté klávesy nebo udělat nějakou podmínku v závislosti na tom jaká verze PMD to je. Za Hello World v Assembleru samozřejmě budu rád, chci se s ním stejně naučit pracovat protože basic je pomalý a hlavně užraný na paměť, kterou si navíc sám spravuje pěkně blbě.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 15:23 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
Alespoň si vyzkouším podvěšování souborů. Tak první pokus:

HelloWorld projekt v PSPadu a assembleru i8080 pro PMD-85.


Přílohy:
HelloWorld.zip [93.35 KiB]
499 krát
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 16:13 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Každý tutoriálek na assembler PMD 85 se mi hodí, díky moc :-). I když je to zatím jen ekvivalent PRINT a INPUT ve smyčce :-).

Ještě ochutnávka vizuálna ze hry pro nešťastné majitele jiné verze než PMD 85-3 co jim hrdost nedovolí si to v emulátoru přepnout :P.


Přílohy:
Miny screen 3.png
Miny screen 3.png [ 1.81 KiB | Zobrazeno 9637 krát ]
Miny screen1.png
Miny screen1.png [ 26.77 KiB | Zobrazeno 9637 krát ]
Miny screen.png
Miny screen.png [ 49.79 KiB | Zobrazeno 9637 krát ]
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 17:47 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Hm tak chybička co se stává maximálně jednou za 10 let se vloudila - nahrál jsem špatnou verzi pásky... :roll: Opravená verze je v tomto přízpěvku. Netuším jak se to stalo ale holt stalo se, asi ten Němec co schovává věci mi zaměnil soubory když jsem to kopíroval. Tu první pásku můžete smazat, obsahuje jen nefunkční verze hry a pomocné soubory a prográmky pokud je nebudete chtít použít pro vzdělávací účely...

A je to ještě ne úplně hotová hra, to je třeba znovu zmínit.

Edit: Zrovna jsem našel chybičku když se zamkne pole s minou tlačítkem W, tak ta už je opravená. Vše co objevíte mi prosím napište, já už mám provozní slepotu.


Naposledy upravil Czech Human dne 24.10.2019, 20:33, celkově upraveno 1

Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 19:26 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
Jo, kde jsou ty časy.. Kdybys chtěl tuhle pecku udělat v assembleru s celou parádou a podporou myši a všech barevných režimů a v plné kompatibilitě se všemi modely PMD-85, rád poskytnu jakékoliv informace a součinnost. Tohle je pro myš jako dělané. Nevyžaduje to žádný veliký paralelní výkon procesoru. Ideální projekt na začátek..

Pokud tu BASICovskou verzi budeš ještě dotahovat, zkus zapracovat na tom, aby se ty obrázky nemusely opakovaně dohrávat. Dost to zdržuje. Taky bych zrychlil "losování" min do pole. To by myslím nemuselo tak dlouho trvat. Nebo to má nějaký důvod?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 19:49 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Důvod to samozřejmě má - po vygenerování min, tedy kdy to klesne na 1 se provede ještě výpočet všech políček, kde se nachází miny a tato hodnota se uloží do herního pole. Jsou to všechny ty čísla, zobrazené v poli.Prochází se nutně všechny pole s tím, že mina = ušetřených 9 kroků takže čím víc min, tím rychleji to proběhne a naopak. Je to proto aby odkrývání pole posléze probíhalo instantně, hra samotná pak běží velmi rychle. Proto je tam taky ten hráč - čekatel, pořádně si počká... Druhá varianta řešení (kterou jsem paradoxně uvažoval nejdříve) by byla provádět výpočet při kliknutí na pole. Z hlediska spolehlivosti běhu programu a jednoduššího řešení když se nemusí v poli ošetřit tolik věcí, zejména poloha (příklad - zamkneš neodhalené políčka kolem miny i na mině otazníkem či vlaječkou a algoritmus by na to musel myslet včetně toho kde v poli to je) je to řešené prvním způsobem.


Myš by byla fajn, jen zase herní políčko má rozměr 6*8 pixelů. Je to jako klikat na písmeno vedle písmena. Šance, že se netrefíš o pixel je dost vysoká a přitom to snadno znamená konec hry. Taky by se její ovladač musel buď přepsat do basicu nebo ho alespoň upravit do té míry, aby se v basicu dal spustit ve strojáku (basic naráz spustí strojový program v délce do 80 znaků...) a muselo by se vyřešit překreslování scény pod kurzorem, to má PMD taky docela na Renaulta. Úplně jsem tu myšlenku neopustil a začal jsem studovat jak s myší a obecně periferiemi pracovat ale momentálně je to nad moje síly, je to totiž můj první program pro PMD. V assembleru bych ji nyní 100% nebyl schopný napsat a neznám přesně hardware PMD, jen díky romborovi jsem to rozběhal s obrázky protože mi poradil jaké páčky se na to dají použít.

To nahrávání obrázků je děsný opruz, bohužel BASIC je tak "chytrý" (nebo já blbý :lol: ) že když si jednou vydefinuješ pole, tak pokud ho změníš bez příkazu CLEAR, dojde k havárii programu a když použiješ CLEAR, dojde zase k vymazání dat obrázků, nebo odkazů v paměti na ně tak si můžeš vybrat... Já to nejdřív udělal tak že se to cyklovalo krásně bez přerušení - ale nemůžeš změnit pole. Pak jsem zkusil udělat pole v největším rozsahu vždy (teď se dynamicky mění) ale stejně to i tak nefungovalo. Jediné spolehlivě funkční řešení mi tak zůstalo tohle prudicí nahrávání obrázků. Pokud někdo ví jak tuto "feature" obejít tak to moc rád opravím, je to největší problém hry co neumím momentálně odstranit.

Edit: Tak jsem to procházel, procházel a poslední 2 drobné chyby co se vyskytovaly až po druhém zmáčknutí tlačítek apod. takže jsem je napoprvé přehlédl, jsem odstranil. Už jen hudba a bude hotovo. Program jako takový už běží bez chyb.


Přílohy:
Miny semifinal.7z [12.81 KiB]
467 krát
Miny semifinal.zip [14.54 KiB]
457 krát
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 22:18 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Basic mě začíná bavit, změna na variantu 2 mi trvala asi 5 minut a z toho většina času najít správné řádky s odkazy GOTO :mrgreen:. Když to srovnám s dobou výroby varianty 1, mám chuť tvářit se samolibě :lol:. Pole se vytvoří rychle hned jak se narandomizují miny, už se nemusí čekat tak dlouho ale odezva na kliknutí se prodloužila z 0 na asi 4 sekundy... Možná vhodným poskládáním podmínek se to stáhne ještě dolů, třetí ještě dále modifikovaná varianta se dostala na reakční dou něco pod 2 sekundy ale spolehlivost už byla v kopru díky chybějícím podmínkám. Ošetřit přeskakování již odkrytých políček by možná byla cesta aby hra naběhla rychle a fungovala přijatelně rychle.


Přílohy:
Miny 2.0 Final.zip [14.54 KiB]
476 krát
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 23:01 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 24.05.2018, 22:32
Příspěvky: 1972
Bydliště: Most, Praha
Has thanked: 864 times
Been thanked: 697 times
S počítáním min - nebyla by rychlejší integrální mapa? ( https://en.wikipedia.org/wiki/Summed-area_table ). Při inicializaci se sčítá součet min na řádku (od začátku po aktuální políčko), přičte se počet min z předešlého řádku a to se uloží do mapy (číslo odpovídá součtu min v obdélníku od začátku pole po aktuální políčko), namísto čísla počtu min v okolí. Součet počtu min v jakékoliv oblasti se pak získá jen prostým rozdílem hodnot ve 4 rozích oblasti: n = A - B - C + D. Pro oblast 3x3 to není sice tak velké zrychlení, ale přece jen, jsou to pak jen 4 čtení místo 8, tak by to mohlo zrychlit i na dvojnásobek, případně to počítat až ve chvíli kliknutí. (samotná inicializace integrální mapy je poměrně rychlá operace, jen se pole 1x projde a průběžně se ukládají čísla).

miny:
1 0 0 1 0
0 0 1 0 1
1 0 0 0 1
0 1 0 1 0
1 0 0 0 0

integrální mapa (součty v X a Y směru, použije se střadač min na 1 řádku + přičte se předešlý řádek):
1 1 1 2 2
1 1 2 3 4
2 2 3 4 6
2 3 4 6 8
3 4 5 7 9

počty min v oblasti 3x3:
(roh vlevo od mapy a nad mapou má hodnotu 0, roh napravo a dole se omezí okrajem)
A 1 1 B 2
1 1 2 3 4
2 2 ? 4 6 ... ? = A - B - C + D = 1 - 2 - 2 + 6 = 3
C 3 4 D 8
3 4 5 7 9

1 2 2 3 2
2 3 2 3 3
2 3 3 4 3
3 3 2 2 2
2 2 2 1 1

_________________
i++ (INC) increment
i-- (DEC) decrement
i@@ (EXC) excrement


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 24.10.2019, 23:57 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Zajímavá idea. Ovšem pořád je to přístup hrubou silou. Po dalším lehkém vypilování hledacího algoritmu jsem se dostal na reakční čas cca 1,1 sekundy po zmáčknutí tlačítka odkrytí pole a ušetřil jsem si celou dobu zpracovávání pole od dokončení generování min až po začátek vykreslování pole, tedy reálně až několik minut pokud se budeme bavit o velkém poli >300 políček a skutečném PMD 85. Nyní je hra výrazně rychleji startující a pocitově to běží ještě obstojně, sekunda lag se dá v tomto případě vydržet. Teď už jen ošetřím podle druhu akce návrat zpět smyčkou GOSUB - RETURN aby fungovalo korektně každé akční tlačítko a bude to myslím už rozumně fungovat, protože se výpočty rozloží v čase a bude jich vždy jen menší množství naráz. Ale to až zítra :sleep:

Ještě vyřešit to resetování pole aby se nemusely obrázky pořád jak u blbečků na dvorečku dokola nahrávat a už by to byla prima hra, nevěděl byste někdo jak ty pole zkrotit?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 25.10.2019, 06:58 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
Já bych v první řadě zrevidoval myšlenkové postupy realizované od řádku 782 dále. Nějak mám pocit, že ty podmínky (buňka pole=20 nebo 21 a vnořené IF za příkazem IF) nepokrývají všechny možné stavy. Navíc ta konstrukce, kdy se proměnná z zvedá o jedničku, vypadá spíše jako kompenzace následujícího zmenšení z o jedničku. Pak bych zvolil takové řazení příkazů, aby se dělalo jen to, co není třeba o chvíli později "zpětně odečíst".

Pro zrychlení bych pak možná zkusil nealokovat pole příkazem DIM ale přistupovat volně do RAM příkazy PEEK/POKE jako do virtuálního pole. Vybral bych si nějakou vyšší adresu, kde už Tvůj program nezasahuje. Jednak BASIC nemusí počítat indexy v poli PO(x,y) a jednak ty jednoduché poloviční integer hodnoty nemusí přepočítávat do floating point formátu. Dále pro testování okolí buňky bych nezaváděl další dvě vnořené smyčky (celkem 4 vnořené smyčky - to je masakr!), jakkoliv ty dvě vnitřní pracují v rozsahu -1 až +1. Prostě bych to rozepsal do "vzorce" s osmi členy. Ano, osmi. Ty dvě vnitřní "počítací" smyčky zbytečně přičítají k počtu min i vlastní testované pole.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 25.10.2019, 08:51 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
No proč ne, já se rád alokace pole zbavím, vyřešilo by to ty obrázky... RAM by mělo být dost, hlavně to pole definované přes DIM sežere 4 kB což by se uvolnilo. PEEK/POKE je pro mě novinka, tak jsem to nepoužil od začátku - jsem vážně začátečník. Pole má přesah o 2 na každou stranu z důvodu dříve použitého algoritmu počítání min aby to hezky fungovalo i na okrajích. Za 782 je pěkný čurbes a předělával jsem to tam, takže už to nemusí platit. V té oblasti byla taky uložená smyčka co mi vytiskla pole na obrazovku abych viděl kde jsou miny během vývoje tak jestli to není ono, něco jsem dával pryč ale pak jsem to zase kvůli testům vracel. První, na cca 2s zrychlená verze mi skutečně nepočítala korektně miny v okolí ale to už je vyřešené. Ta pomalá 4s verze ale počítá okolní políčka správně, jen jí to holt trvá.

Proměnná "z" slouží jako pomocná proměnná pro ukládání min do pole a řeší situaci když se ti setkají 2 miny na jednom políčku - algoritmus běží políčko za políčkem dokolečka a randomizuje zda tam dát minu. Když mu to vyjde, tak minu zapíše a odečte z-1. Jenže časem může nastat situace, kdy by odečetl 1 protože RND vyhodilo minu, ale na políčku už mina je. Ta by byla přepsaná novou a měl bys o 1 menší celkový počet min na ploše. Takže když se to setká, nová vyrandomizovaná mina se zahodí, z se zase zvýší o 1 a běží to do dalšího cyklu. A v okamžiku kdy z bude nula se jede dál v programu. Možná trochu kostrbaté ale rozhodně funkční. Jinak to poskládat ale můžu, pokud to ušetří čas. Těch podmínek se nezbavím ale třeba by se z-1 dalo umístit až na čas "když je mina v rukávu." Mě přišlo že nemá cenu do toho šťourat když to funguje a běhá vcelku rychle a bota mě tlačí jinde.

Ty čtyři smyčky už nejsou pravda, to jsem ještě včera v noci přepsal na jednu takže ze 4 sekund to spadlo na 1,1 sekundy. S takovou odezvou jsem už skoro spokojený když zároveň odpadlo to šílené čekání na začátku. A ač mi to pokrývá zatím jen stisknutí klávesy E, myslím že to vyřeší volání podprogramu a příkaz RETURN, který to vrátí do správné části programu při stisknutí dalších kláves. Přepsat to ručně na 8 kroků by teď už šlo, dokud se jednalo o celé pole, byla smyčka jediné snadno použitelné řešení.

Jinak ten zdroják už chce trochu pročistit, jsou tam i relikty minulosti - už nevyužívané části.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 26.10.2019, 16:59 
Offline
Óm Nejvyšší
Uživatelský avatar

Registrován: 07.07.2019, 22:14
Příspěvky: 3766
Has thanked: 269 times
Been thanked: 452 times
Tak se mi podařilo odstranit obě hlavní potíže první verze Min - zaprvé nahrávání obrázků pořád dokola je už minulostí, stačí je už nahrát jen jednou, což samo o sobě přidalo 300% k hernímu prožitku když nemusíte z fullscreenu. A dlouhé čekání v průběhu tvorby pole je také minulostí, hra umístí miny a můžete hned hrát. U velkého pole se jedná o urychlení o několik minut času, takže dalších 300% když máte smůlu šlapat na miny hned na prvním políčku. Cenou za to je drobné zpoždění cca 1s při odhalování herních políček, protože hra musí provádět výpočty až po jeho výběru.

Úpravy ve stylu spustitelnosti na všech verzích PMD, centrování pole a změny velikosti herních destiček jsem nedělal, na to budu muset mít náladu a zejména více znalostí protože už se jedná o výrazné zásahy do programu :-).

Tak sosejte a testujte zda hra dělá co má, už jsem se poučil že autor sám na rozdíl od hráče chyby moc dobře nenachází...


Přílohy:
Miny 2.0 Semifinal.zip [14.56 KiB]
475 krát
Miny 2.0 Semifinal.7z [12.82 KiB]
473 krát
Nahoru
 Profil  
 
 Předmět příspěvku: Re: Miny pro PMD 85-3
PříspěvekNapsal: 26.10.2019, 17:18 
Offline
Profík

Registrován: 28.07.2018, 14:37
Příspěvky: 918
Has thanked: 43 times
Been thanked: 411 times
Je to super retro hra. Teď už to fakt jde hrát. Ale popřemýšlej nad tím, jestli bys to přeci jen nezkonvertoval celé do assembleru. Přiznám se, že mi to nedalo, a ten první večer jsem spíchnul takové demo mínus druhé generace, kde myš jezdí nad polem a po kliknutí animuje stisk buňky v levém horním rohu pole. To myšoidní rozhraní by to posunulo zase o level výše. Prostě přichází zima, budou dlouhé večery, a tak, kdyby ses nudil, můžeš se na tom vydovádět. A možná Tě to přitáhne k dalším projektům pro PMD-85.


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ů: 35 ]  Přejít na stránku 1, 2, 3  Další

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 8 návštevní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:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz