Jump to content

jenkings

Uživatel
  • Příspěvků

    938
  • Registrován

  • Aktivní

  • Vítězných dnů

    32

Příspěvky posted by jenkings

  1. A nebo ještě jeden tip. Měl jsem rozdělaný projekt, který měl být něco jako Lost Vikings. Co vím, tak nic takového už nevzniklo (když nepočítám "Lost Snowmen", což byla dost odfláknutá konina). Tak nějak to fungovalo, ale kód bude dost peklo, a nebyly tam v podstatě vůbec dodělané ty mechaniky jako klíče, dveře, pohyblivé překážky apod. Je to celé psané v Javě, ale pro PC, takže by se to muselo přeportovat, nebo případně jen použít jako inspirace.

    Git:

    https://github.com/jenkings/AncientTravellers

  2. No, hrál jsem si s myšlenkou udělat v nodejs nějaký univerzální generátor klasických (švédských) křížovek. Ale maximum, čeho jsem vždy dosáhl bylo něco co se úrovní dost podobalo těm dětským křížovkám, které se doplňují jen vodorovně a pak si v jednom ze svislých průniků přečteš tajenku :D

  3. No a je tvá challenge striktně fixovaná na mobilní aplikace? Mám jednu challenge, ke které se vracím zhruba každého půl roku a pokaždé to znovu odložím pro nedostatek dobrých nápadů, jak to vyřešit :D

     

    Případně pokud by ti šlo o mobilní appku a pouze o tvé zlepšování, tak potřebuju pro hryprodva.cz udělat Androidího klienta pro KrisCross, ale vůbec se mi do toho nechce, ale tam by to zase nebylo na publikování kódu, protože 90% logiky jede na serveru a mobil bude v podstatě jen GUI zobrazovač :D

  4. Tak zatím to vypadá všechno OK, ale ještě jsem to nepouštěl na nějaké extra složité srandy. Jediný problém, na který jsem zatím v tvém kódu musel upravovat po funkční stránce bylo to, že to padalo v případě, že hráč nevloží na desku žádné nové slovo (např. když pouze mění písmena).

  5. Duff - něco takového jsem měl na mysli taky, ale přišlo mi to hrozně překombinované, tak jsem si říkal, jestli není nějaké elegantnější řešení, ale nakonec to tak asi dopadne. Testy zatím žádné nemám,ale můžu něco zkusit spíchnout.

    ffredyk - je pravdou, že by mohlo každé z písmen držet referenci na všechny své bonusy a všechny své sousedy. Pak by asi bylo všechno tohle probublávání o dost jednodušší. Tohle řešení má ale trochu nevýhodu v tom, kolik to zabere paměti. A vzhledem k tomu, že to poběží na serveru, kde může běžet N instancí té hry, tak mám trochu obavy, jak by to dopadlo :/

  6. Čaute

    Mám takový intelektuální (ne)problém. Včera jsem přemýšlel nad logikou, jak počítat skóre u scrabble, v případech, že hráč položením kamenů složí více než jedno slovo.
    Ověřování slov proti slovníku teď pomiňme a berme, že pro tento příklad jsou všechna slova validní.
    Při mém brainstormingu o řešení jsem vždy došel až do bodu, kdy jsem byl v pátém zanořeném cyklu, a v nedozírné rekurzi, takže vhazuji rukavici do ringu, s výzvou: Kdo to vymyslí nejlépe?

    Pro případné vymýšlení nebo zkoušení, kdyby se tím chtěl někdo zabývat, jsou tady podklady:

    Funkce pro výpočet skóre za jednotlivá písmena a pole objektů se souřadnicemi bonusů na desce (type 1 je, že se násobí celé složené slovo, type 0, že se násobí pouze písmeno)

        letterValue(letter) {
            var tileScore = {
                0: '?', 1: 'a,e,i,l,n,o,r,s,t,u', 2: 'd,g',
                3: 'b,c,m,p', 4: 'f,h,v,w,y', 5: 'k', 8: 'j,x', 10: 'q,z'
            };
            if (letter.length === 1) {
                for (var v in tileScore) {
                    if (tileScore[v].indexOf(letter.toLowerCase()) >= 0) {
                        return v;
                    }
                }
            }
            return null;
        }
        
        
        
        static bonuses = [ /*První řádek*/ 	{x:0,y:0,multiplier:3,type:1}, 	{x:3,y:0,multiplier:2,type:0}, 	{x:7,y:0,multiplier:3,type:1}, 	{x:11,y:0,multiplier:2,type:0}, 	{x:14,y:0,multiplier:3,type:1}, /*Druhý řádek	*/ 	{x:1,y:1,multiplier:2,type:1}, 	{x:5,y:1,multiplier:3,type:0}, 	{x:9,y:1,multiplier:3,type:0}, 	{x:13,y:1,multiplier:2,type:1}, /*Třetí řádek	*/ 	{x:2,y:2,multiplier:2,type:1}, 	{x:6,y:2,multiplier:2,type:0}, 	{x:8,y:2,multiplier:2,type:0}, 	{x:12,y:2,multiplier:2,type:1}, /*Čtvrtý řádek	*/ 	{x:0,y:3,multiplier:2,type:0}, 	{x:3,y:3,multiplier:2,type:1}, 	{x:7,y:3,multiplier:2,type:0}, 	{x:11,y:3,multiplier:2,type:1}, 	{x:14,y:3,multiplier:2,type:0}, /*Pátý řádek*/ 	{x:4,y:4,multiplier:2,type:1}, 	{x:10,y:4,multiplier:2,type:1}, /*Šestý řádek*/ 	{x:1,y:5,multiplier:3,type:0}, 	{x:5,y:5,multiplier:3,type:0}, 	{x:9,y:5,multiplier:3,type:0}, 	{x:13,y:5,multiplier:3,type:0}, /*Sedmý řádek*/ 	{x:2,y:6,multiplier:2,type:0}, 	{x:6,y:6,multiplier:2,type:0}, 	{x:8,y:6,multiplier:2,type:0}, 	{x:12,y:6,multiplier:2,type:0}, /*Osmý řádek*/ 	{x:0,y:7,multiplier:3,type:1}, 	{x:3,y:7,multiplier:2,type:0}, 	{x:11,y:7,multiplier:2,type:0}, 	{x:14,y:7,multiplier:3,type:1}, /*Devátý řádek*/ 	{x:2,y:8,multiplier:2,type:0}, 	{x:6,y:8,multiplier:2,type:0}, 	{x:8,y:8,multiplier:2,type:0}, 	{x:12,y:8,multiplier:2,type:0}, /*Desátý řádek*/ 	{x:1,y:9,multiplier:3,type:0}, 	{x:5,y:9,multiplier:3,type:0}, 	{x:9,y:9,multiplier:3,type:0}, 	{x:13,y:9,multiplier:3,type:0}, /*Jedenáctý řádek*/ 	{x:4,y:10,multiplier:2,type:1}, 	{x:10,y:10,multiplier:2,type:1}, /*Dvanáctý řádek	*/ 	{x:0,y:11,multiplier:2,type:0}, 	{x:3,y:11,multiplier:2,type:1}, 	{x:7,y:11,multiplier:2,type:0}, 	{x:11,y:11,multiplier:2,type:1}, 	{x:14,y:11,multiplier:2,type:0}, /*Třináctý řádek	*/ 	{x:2,y:12,multiplier:2,type:1}, 	{x:6,y:12,multiplier:2,type:0}, 	{x:8,y:12,multiplier:2,type:0}, 	{x:12,y:12,multiplier:2,type:1}, /*Čtrnáctý řádek	*/ 	{x:1,y:13,multiplier:2,type:1}, 	{x:5,y:13,multiplier:3,type:0}, 	{x:9,y:13,multiplier:3,type:0}, 	{x:13,y:13,multiplier:2,type:1}, /*Patnáctý řádek*/ 	{x:0,y:14,multiplier:3,type:1}, 	{x:3,y:14,multiplier:2,type:0}, 	{x:7,y:14,multiplier:3,type:1}, 	{x:11,y:14,multiplier:2,type:0}, 	{x:14,y:14,multiplier:3,type:1} ];
        


    A pro testování příklad desky před a po tahu, které jsou vstupem funkce pro výpočet skóre v tahu. Je to vždy jen 2D pole představující desku, a položená/nepoložená písmena
     

        static boardOld = [
        ["A","B","O","P","S","","","","","","","","","",""],
        ["","","A","","","","","","","","","","","",""],
        ["","","M","","","","","","","","","","","",""],
        ["","","C","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""]
        ]
        
        
        static boardNew = [
        ["A","B","O","P","S","","","","","","","","","",""],
        ["","","A","C","D","","","","","","","","","",""],
        ["","","M","","","","","","","","","","","",""],
        ["","","C","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""],
        ["","","","","","","","","","","","","","",""]
        ]

     

  7. Nějaké chyby to hází ?
    hádám, že ta podmínka by spíš měla být 
     

    if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 515)
    {
            if(GetVehicleModel(GetVehicleTrailer(GetPlayerVehicleID(playerid))) == 584)
           {
                         //TADY TO PROŠLO ŽE MÁ SPRÁVNÉ AUTO I NÁVĚS
            }
    }

     

  8. Tak ještě pro případ, že by to někdo taky řešil, dodám, že se tohle řešení chová velice nedeterministicky v případech, kdy označeným znakem je mezera. Testoval jsem to i tak, že jsem přesně ten samý string renderoval několikrát po sobě, a vždy z toho vypadlo něco jiného. Řešením je orámované mezery nahradit za jiný UTF neviditelný znak. Já například použil prázdný symbol pro brailovo písmo, ale předpokládám, že jakýkoliv jiný by fungoval taky.

    • Haha! 1
  9. Díky za tip, nicméně se zdá, že problém je ještě v něčem jiném. Když překlopím to tvoje řešení do toho svého, tak dosáhnu velice podobného výsledku Jako předtím:

     

                    TextView sentenceTV = gsa.findViewById(R.id.sentenceTV);
                    SpannableStringBuilder builder = new SpannableStringBuilder();
                    for(int i = 0; i < currentSentence.length();i++){
    
                        try {
                            String letter = currentSentence.getString(i);
                            SpannableString letterSpannable = new SpannableString(letter);
                            SquareBackgroundSpan span = new SquareBackgroundSpan(50, Color.RED);
                            letterSpannable.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                            builder.append(letterSpannable);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    
                    }
                    sentenceTV.setText(builder, TextView.BufferType.SPANNABLE);

    S tím, že když nepoužiji ten setSpan, tak se zase normálně zobrazí plaintext, nicméně když ho použiji, tak se tentokrát nezobrazí vůbec nic :oops:

  10. Čaute, potřebuju nějakého Android Guru, co dělá v Javě a poradí řešení velice zapeklitého problému.

     

    Chci v TextView vykreslit kolem každého jednotlivého znaku čtverec. Po dlouhém bádání jsem došel k následujícímu kódu:
     

    TextView sentenceTV = gsa.findViewById(R.id.sentenceTV);
          SpannableStringBuilder builder = new SpannableStringBuilder();
          for(int i = 0; i < currentSentence.length();i++){
    
              try {
                  String letter = currentSentence.getString(i); //currentSentence js JSONArray (pole znaků)
                  Drawable d = gsa.getResources().getDrawable(R.drawable.letter_square);
                  d.setBounds(0, 10, d.getIntrinsicWidth(), d.getIntrinsicHeight());
                  ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
                  SpannableString letterSpannable = new SpannableString(letter);
                  letterSpannable.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);    //Tady je zakopaný pes
                  letterSpannable.setSpan(new ForegroundColorSpan(Color.RED), 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                  builder.append(letterSpannable);
    
    
              } catch (JSONException e) {
                  e.printStackTrace();
              }
    
          }
          sentenceTV.setText(builder, TextView.BufferType.SPANNABLE);

     

    Což je zatím nejvíc, kam jsem se dostal. Problém je, že mi funguje buď zobrazení textu, nebo jen všech rámečků na jednotlivé znaky, ale chybí v nich text.

    Tzn. když zakomentuju :

    letterSpannable.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

    Tak se zobrazí v TextView obyčejný text. Když to nezakomentuju, zobrazí se místo každého znaku čtvereček, ale jaksi v něm zase chybí ten znak

  11. On 22. 12. 2021 at 15:04, Om3n said:

    Můžeš tam prosím přidat tlačítko HRÁT ZNOVU? 

    Tak konečně se podařilo dostat i k tomuhle restu a na konci hry jde hrát další se stejným soupeřem



    Jinak mezi tím jsem dodal ještě kulečník, takže můžete také vyzkoušet ;)

×
×
  • Create New...