Oznámení

Sbalit
Aktuálně žádná oznámení.

engine pro textovou hru v AmigaPythonu

Sbalit
X
 
  • Filtr
  • Čas
  • Zobrazit
Vymazat vše
new posts

    engine pro textovou hru v AmigaPythonu

    Prvních 8 příspěvků je věnováno staré verzi enginu .

    pracovní podnázev: Jak jsem na Amigu kladivem šel

    Tak jsem se rozhodl zveřejnit video, jak pracuje můj nedokončený engine pro textovou hru. Je na něm ještě hodně práce.

    1. spuštění je při výkonu A1200, v 2. spuštění Python zahlásil chybu, tak jsem to restartnul a 3. spuštěmí je u výkonu A3000, co je Amiga s turbokartou. Pamět je cca na 2 MB po startu systému co je u Pythonu minimum.



    Použil jsem proporcionální font (různá šířka písma), líbí se mi. To zavádí pár problémů. Vozík, nebo kurzor se po obrazovce posouvá tak, jako by používal font s pevně danou šířkou. To znamená, že nám od zobrazeného písma "utíká", protože u proporcionálního fontu ma celkový text menší šířku než má font s pevně danou šířkou. Typickým příkladem je třeba písmeno "I". V současné době jsou vidět v zobrazení textu mezery. Je to dané tím, že tabulka, která nese informace o tom, kolik má které písmeno pixelů neni zcela hotova (takové vyplňování mne děsně nebaví). Předpokladám, že po její kompletizaci budu moci text napasovat na sebe přesně. Další problém je v jednotlivém zadávaní příkazů. Jak je na videu vidět, pokud zobrazuji větší úsek textu příkazu "POM" jako pomoc (když text vytánu z paměti a nezadávám ho jednotlivým stiskem kláves "P", "O" a "M"), je zobrazen v pořádku, ale u jednotlivého stisku kláves je již problém. Zde nedokážu kurzor vracet, na to musím předat aktivitu samotnému programu a ta vzniká až po zmačknutí klávesy Enter. Nastavit šířku o kterou se má vozík posunout umím, je to ale parametr společný pro všechny písmena. Tohle chci řešit nějakým kompromisem pro malá písmena s tím, že je doporučím používat pro psaní textu.

    Teď něco málo o asi největším problému samotného enginu. Krom toho, že je napsaný v Pythonu, samotná pomalost Pythonu mne donutila udělat jistý kompromis. Tím, že používam pro text proporcionální font, musím, jak jsem již psal vracet kurzor zpět, aby jsem mohl psát po celé šířce obrazovky, jinak se mi v cca polovine sámotný text automaticky zalomil (přešel na 2. řádku).

    Vracení vozíku o konkrétní pixely jsou ale výpočty navíc... .

    Nejdříve jsem měl vracení vozíku po každém slovu. Rychlost vypisování textu na holé A1200 se pro mne stala neúnosná. Rozhodl jsem se tedy zvýšit rychlost vypisování textu na úkor komfortu zadávaní textu pro místnost v samotném programu. Jednoduše řečeno vypisuji text po větších částech, než je 1 slovo. Pokud ale tahle část je větší, než by měla, zalomí se mi text třeba v polovině obrazovky a pokračuje se ve vypisování textu na dalším řádku. V tomhle případe je již pozdě vracet kurzor, když už je samotný text napsán. Musí se tedy odzkoušet úsek textu, který ještě dokáže Workbench zobrazit na 1 řádku a to je opruz. Tímhle jsem ale docílil zkrácení již tak pomalého vypisování textu na polovinu.

    zde uvedu jak to v současné chvíly funguje v jedné místnosti:
    Code:
                 "3_3_3_3_3_3_03Ocitl jste se ve;strědověkuv hustém;lese.;_2Jako statečný princ Jasoň;hrdě vyrážíte;osvodit;_1princeznu Zlatovlásku ze;zakletí zlého;_1obra Koloděje.;_203...mnoho štěstí!0 0_pom201Zbývá jen vyrazit;_ 2první řádek;2....;3....;_  smažu text pro pomoc;0 0 papír;",
    - prvních 6 trojek říká, že po zadání Severu (1.trojka), Jihu (2.trojka) a ostatních smerů (i nahoru a dolů) se skočí na místnost č.3. U Prince Jasoňe to tak u výchozí místnosti je.
    - 03 - text začne vypisovat na 3. znaku
    - mezi "; ;" je úsek textu pro zobrazení (pak posun vozíku zpět)
    - "_" zalomení textu, "2" - přeskoč 1 řádek
    - "....Koloděje.;"_203 - "_" - zalom řádek, "2" - přeskoč 1 řádek, "03" - začni text na 3. znaku.
    - "0 0" - konec textu místnosti.
    - "_pom" - text pro příkaz "pom" jako pomoc, "201" - z toho první číslo "2" - pomoc má 3 části (0,1,2), pak "0" - po 1. zadání "pom" se vypíše 1. část (0), pak se přejde na část 2. (1)....
    .... _ 2první řádek .... (2. část příkazu "pom"), ";" další řádek 2. části, ";" 3. řádek 2. části. .....
    .... pokud místo čísla 0-9 dám cokoliv jiného, ja tam mám mezeru (3....;_ (mezera) smažu... ) , ale je jedno co tam bude, říkám programu aby všechen text pro příkaz "pom" z místnosti smazal, mohl by jsem ho ale nasměrovat na kteroukoliv část příkazu "pom". Můžu klidně začít od posledí části "pom", přecházet k 1. části a pak pořád cyklovat pouze 1. část "pom" dokola. Pokud bude "pom" smazán, bude použita univerzální věta pro všechny místnosti.
    - za dalším "0 0" jsou věci, které místnost obsahuje. V tomhle případě je to papír.

    Vše co zatím engine umí je na videu, ostatní je třeba dodělat.

    programování zdar .
    Naposledy upravil Lisiak; 11.11.2014, 11:10:32.
    Amiga - PMD 85

    #2
    O: engine pro textovou hru v AmigaPythonu

    Líbí se mi to! Ale vyjma toho, že bych ti vnutil svůj design document na engine pro gamebooky, ti bohužel více asi nepomohu .
    Amiga 1200 + Blizzard 1260 + 64 MB RAM + CF2IDE + Indivision AGA Mk1 + PCMCIA2CF + WHDLoad registered + GOTEK

    Komentovat


      #3
      O: engine pro textovou hru v AmigaPythonu

      Si jako myslim ze se tim fakt zbytecne trapis. To bych to radeji napsal v GFA basicu a nebo v Blitzu. Tam se taky muzes trapit, treba s oteviranim oken. Amos ti nedoporucim, ten ty rad nemas.

      Komentovat


        #4
        O: engine pro textovou hru v AmigaPythonu

        To je úplně šílený! S něčím vylezu a po chvilce začínám uvažovat, že s tím prásknu. Nějak mne začalo štvát, že se pod Amigou dostatečně nemůžu hrát s animacemi. Proto začínám uvažovat o tom, že se začnu zaměřovat na jiný multiplatformní programovací jazyk. S Pythonem zatím nehodlám skončit, ale ta nemožnost hrát si s animacemi mne začína celkem žrát.

        Dá mi C dostatečný výkon?

        davesade: Díky, jsem rád, že se Ti to líbí .
        holyna: když tak multiplatformní jazyk
        Amiga - PMD 85

        Komentovat


          #5
          O: engine pro textovou hru v AmigaPythonu

          ja jsem to tu nechtel psat, protoze jsem uz jednou neco podobneho udelal a nedopadlo to dobre, nicmene kdyz uz se ptas konkretne
          C bude stacit bez problemu, nebo by se dalo pouzit treba PortableE (Windows, AOS3/4, AROS, MOS), dale pak take FreePascal

          Komentovat


            #6
            O: engine pro textovou hru v AmigaPythonu

            OK, pokud budu pokračovat v programovaní, tak v C. S AmigaPythonem nekončím, jen mu budu věnovat méně času. Uvidím jak co bude.
            Amiga - PMD 85

            Komentovat


              #7
              O: engine pro textovou hru v AmigaPythonu

              Autorem citovaného textu je Lisiak4 Přejít na původní příspěvek
              To je úplně šílený! S něčím vylezu a po chvilce začínám uvažovat, že s tím prásknu. Nějak mne začalo štvát, že se pod Amigou dostatečně nemůžu hrát s animacemi. Proto začínám uvažovat o tom, že se začnu zaměřovat na jiný multiplatformní programovací jazyk. S Pythonem zatím nehodlám skončit, ale ta nemožnost hrát si s animacemi mne začína celkem žrát.

              Dá mi C dostatečný výkon?

              davesade: Díky, jsem rád, že se Ti to líbí .
              holyna: když tak multiplatformní jazyk
              Takze BlitzMax

              Komentovat


                #8
                O: engine pro textovou hru v AmigaPythonu

                Autorem citovaného textu je holyna Přejít na původní příspěvek
                Takze BlitzMax
                Jistě BlitzMax . Když ze sebe omylem vypotím nějaké exe, múžeš si představovat, že to bylo udělané v BlitzMax. Já speciálně jen pro Tebe napíšu potvrzující email, že verze co máš je napsaná právě v něm chceš? )
                Amiga - PMD 85

                Komentovat


                  #9
                  O: engine pro textovou hru v AmigaPythonu

                  Tak a uděláme tlustou čáru - začínám psát engine odznova .

                  Aby jsem se dál procvičoval v programování, co mi práce na grafické hře v současné době neumožní (potřebuji si pár věcí nastudovat), vracím se zpět k myšlence naprogramovat nějakou tu textovku. Potřebuji zjednodušit kód aby se pak možná dal snadněji přepsat do jazyka C. Snad se mi to povedlo tím, že jsem vyhodil z logiky příkaz split(), který rozděluje text na víc částí. V současné době mám napsanou jen logiku na průchod místnostmi a dokončil jsem takovou na "papíře" napsanou logiku, jak by mohla fungovat jedna z částí samotného programu. Jedná se o řešení skoro všech a možná všech situací co se dějou v místnosti. Text v událostech je smyšlený. Za "#" je ona logika napsaná na "papíře" a pod ní je jednoduchá logika průchodu místnostma.

                  Code:
                  #-*- coding: Latin2 -*-
                  
                  import sys
                  
                  #textovka 2
                  
                  #v jednom radku bude:
                  
                  #2015052mince02med05citron250mlustrc1030Zkusil jsi promluvit na straz.025Bez jakekoliv reakce... .228Opět jsi promluvil na straz.jas1minstr0med
                  #44Straznikovi si dal 2 zlatky a on Ti dal med.1024Straz: co tu pohledáváš!07Odchod!
                  
                  #rozepsano:
                  
                  #2015052mince02med05citron - 0 = v mistnosti nebude osoba, co neco sebou bude mit, nebo bude moci ve hre neco dostat. (situace neni uvedena)
                  #                          - v mistnosti budou 2 osoby co neco se sebou budou mit, nebo budou moci ve hre neco dostat.
                  #                          - 1. bude mít 1 vec (0), 2. bude mit 2 veci (1).
                  #                          - 1. osoba bude mít 2 mince co je slovo ze 6 znaku (05), 2.osoba bude mít med a citron (3 (02)a 6 znaku (05))
                  #25 - pocet souvisejicich udalosti z celkovych 9 (2,5 = 3+6 = 2 vazane udalosti)
                  #popisuji cislo 2 (1. vazanou udalost)
                  #c/p/s - cykluj/postupuj a pak opakuj poslední/postupuj a pak smaz (poprve pouzito o 2 radky nize)
                  #0mlustr - mluv se strazi 0 - nasledujici ma navaznost, kdyz promluvis se strazi (muzes mluvit i s dalsi osobou a stejnym vysledkem)
                  #c1030Zkusil jsi promluvit na straz. - cykluj, 2 vazane udalosti,0 - menici se promenna o stavu udalosti jestli 0 mebo 1,
                  #                                    - pri 1. promluveni na straz se vypise 1. text, pri 2. a dalsim promluveni 2.text, 30 znaku na 1. text
                  #025Bez jakekoliv reakce... . - prvni 0 - zadna podminka = vypise se vzdy pri prvnim mluveni na straz, text ma 25 znaku
                  #228Opět jsi promluvil na straz. - 2 = 2 podminky, 28 znaku ma text
                  #jas1minstr0med - 1.podminka - jason musi mit 2 mince (1), 2.podminka - straz musi mit 1 med
                  #44Straznikovi si dal 2 zlatky a on Ti dal med. - text ma 44 znaku
                  #1024Straz: co tu pohledáváš!07Odchod! - 1 - budou se opakovat 2 udalosti, 0 - menici se promenna o stavu udalosti jestli 0 mebo 1,
                  
                  mistnosti = ("01010101010100TextMistnost0",
                               "00020304050600TextMistnost1",
                               "01070809101100TextMistnost2",
                               "--08--01----00TextMistnost3",
                               "--0901------00TextMistnost4",
                               "----------0100TextMistnost5",
                               "--------01--00TextMistnost6",
                               "02----------00TextMistnost8",
                               "03----02----00TextMistnost9",
                               "04--02------00TextMistnost10",
                               "----------0200TextMistnost11",
                               "--------02--00TextMistnost12")
                  
                  v = 0
                  
                  while 1:
                      sys.stdout.write(mistnosti[v][int(mistnosti[v][12:14]) +14:])
                      v = v, raw_input()
                      if v[1] == "s" and mistnosti[v[0]][0:2] != "--": v = int(mistnosti[v[0]][0:2])
                      elif v[1] == "j" and mistnosti[v[0]][2:4] != "--": v = int(mistnosti[v[0]][2:4])
                      elif v[1] == "z" and mistnosti[v[0]][4:6] != "--": v = int(mistnosti[v[0]][4:6])
                      elif v[1] == "v" and mistnosti[v[0]][6:8] != "--": v = int(mistnosti[v[0]][6:8])
                      elif v[1] == "n" and mistnosti[v[0]][8:10] != "--": v = int(mistnosti[v[0]][8:10])
                      elif v[1] == "d" and mistnosti[v[0]][10:12] != "--": v = int(mistnosti[v[0]][10:12])
                      else: v = v[0]
                  
                      if mistnosti[v][12:14] != "00": pass
                  Amiga - PMD 85

                  Komentovat

                  Zpracovávám...
                  X