Screeps (2017/04/07)

Pokud si stejně jako já chcete rozšířit obzory v JavaScriptu, můžu vám vřele doporučit strategickou online hru Screeps. O co jde přesně? Celá hra se odehrává ve světě složeném z jednotlivých místností, v kterých jsou prťavé potvůrky/robůtci/tentočky které řídíte. Zajímavé je, jak je ovládate. Přímo to nejde a tak si musíte napsat vlastní umělou inteligenci, které je bude posílat těžit, bojovat, stavět a tak dále. No a jako bonus u toho nemusíte sedět, protože vše jede dál i bez vaší přítomnosti. Teda do okamžiku, než se váš soused rozhodne, že by se mu hodila i vaše místnost. Pak dojde na hradby, atomové bomby a tentočky zabijáky. screeps

Čím začít

V začátku jde o to mít dostatek creepů a vylepšovat kontrolér, který vám vyšším levelem otevře další možnosti ke stavbě. Například skladiště, teleporty, možnost produkovat lepší creepy a tak podobně. Pokud vám klesne na 0, tak končíte. Na obojí potřebujete energii, která se těží ze žlutých čtverečků, takže vaši první creepové by měli umět ji natěžit, donést do spawnu a pokud je plný, tak jít upgradovat kontrolér. To zhruba dělá následující kód, který asi řekne víc než další popis.

module.exports.loop = function () {
    // Mazani pameti zemrelych creepu
    for(var name in Memory.creeps){
        if(!Game.creeps[name]) {
            delete Memory.creeps[name];
            console.log('Zemrel creep: ' + name);
        }
    }

    // Spawnovani novych creepu
    if(Object.keys(Game.creeps).length < 3) { // pokud jich je min jak 3
         var name = Game.spawns['Spawn1'].createCreep([WORK, CARRY, MOVE]); // Popis stavby tela
         console.log('Narodil se creep: ' + name );
    }
    for( var name in Game.creeps)  {
        var creep = Game.creeps[name];

        // Pokud je dost mista ve spawnu a jsem plny, tak odvezeme energii tam
        if(_.sum(creep.carry) == creep.carryCapacity 
            && !creep.memory.upgrading
            && (Game.spawns['Spawn1'].energyCapacity - Game.spawns['Spawn1'].energy >= _.sum(creep.carry))) {
            var target = creep.room.find(FIND_STRUCTURES, {filter: {structureType: STRUCTURE_SPAWN}})[0];

            if(creep.transfer(target, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
                creep.moveTo(target);
            }

        // Pokud jsem plny (a spawn uz je taky plnej) jedu upgradovat controller a nebo v upgradovani pokracuju     
        } else if (_.sum(creep.carry) == creep.carryCapacity || creep.memory.upgrading) {
            var target = creep.room.controller;
            creep.memory.upgrading = true;
            if(creep.upgradeController(target) == ERR_NOT_IN_RANGE) {
                creep.moveTo(target);
            }

            // Hotovo. Mazu si z pameti ze mam upgradovat
            if (_.sum(creep.carry) == 0) delete creep.memory.upgrading;

        // Kdyz nic nemam, tak jdu tezit
        } else {
            var source = creep.pos.findClosestByPath(FIND_SOURCES);
            if(creep.harvest(source) == ERR_NOT_IN_RANGE) {
                creep.moveTo(source)
            }
        }
    }
}

Doporučuju ho maximálně na první pokusy, protože z důvodu snadného zobrazení na webu je všechno v jednom souboru a navíc nepočítá s tím, že by každý creep dělal něco jiného. Což je po pár hodinách třeba. Jeden neustále těží, další to odnáší, jiný je brání, někdo staví budovy a opravuje cesty. To všechno musíte navíc rozumně optimalizovat, protože každý hráč má omezenou paměť, kam si můžete ukládat stav mezi jednotlivým spuštěním scriptu a CPU, kdy vám je běh scriptu zaříznut, pokud používáte příliš často náročné operace, jako například pathfinding. Naštěstí si například cesty můžete ukládat do paměti a aktualizovat je jen jednou za čas. Navíc vám hra postupně přidává limit CPU a můžete jet chvíli na sekeru(pokud třeba jednou za 50 herních ticků potřebujete udělat složitější operaci).

Co za to

Hra stojí pár euro na steamu, ale hrát ji pak můžete i v prohlížeči(Pro Safari bohužel není moc optimalizovaná. No dobře, ona v pohodě běží asi jen v Chrome), ale on stejně člověk většinu času tráví v IDE či editoru. Koupí si zároveň předplatíte hraní na oficiálním serveru na měsíc. Pak musíte začít platit a nebo si spustit server vlastní. Zkusit si můžete na screeps.com také zdarma tutoriál.

OCS

Pokud vás Screeps zaujalo a už jste se alespoň trochu rozkoukali, tak se pro inspiraci podívejte na OCS, což je skupina lidí, která na Githubu spojila síly v tvorbě AI a nebo se k nám rovnou přidejte.

iOS 10 a watchOS 3 již dnes (2016/09/08)

Pokud si chcete nainstalovat finální verze IOS 10 a watchOS 3 již dnes, tak to jde i bez placení applího vývojářského programu. Stáhnětě si a rozbalte archiv a pošlete je do iPhone. Já použil AirDrop, ale určitě to půjde bez problému i mailem(ale to Bůh zabije koťátko). Při otevření se vás to zeptá kám profil nainstalovat. Zcela logicky ten pro iOS do telefonu a ten druhej do hodinek. Po zadání kódu od zařízení dojde k restartu a po něm by vám mělo vyskočit, že je k dispozici update(Pokud ne, tak klasicky nastavení -> obecné -> Aktualizace softwaru). No a to je asi tak vše...

Adaptér versus Macbook - 1:0 (2016/06/01)

Co myslíte, že se stane, když se k pravé straně Macbooku Air přiblížíte adaptérem z Apple Watch? Vcelku nečekaně se začne uspávat a to se ho ani nemusíte dotknout. Zkoušel jsem to i s jinejma magnetickejma tentočkama a funguje to taky. Docela vtipné, že jejich vlastní produkt ruší, ehm, jejich vlastní produkt...

P.S.: Toho šílenýho kabelu nalevo si nevšímejte... ;-)

Werc (2016/04/16)

Někdo na blog píše články a někdo tak 2x do roka mění blogovací engine, aniž by napsal jediný blogpost. Ano spádám do té druhé kategorie. Po předchozím statickém Hexo jsem nasadil maximálně punkový werc napsaný v rc. Má to celé pár řádek a hlavně ten krásný defaultní design! No není to nádhera?! Držte hubu, je. Obsahuje to dokonce wiki plugin, který má i s templatem 68 řádek! Má tohle ten PHP bastl Wordpress? Nemá!

Oprava snadno a rychle: The Fuck (2015/07/26)

Nejužitečnějším softwarem, na který jsem za poslední dobu narazil je rozhodně drobná utilita s výmluvným názvem "Fuck". A o co že vlastně jde? Každý se sem tam přepíše a nakonec to odbouche enterem. Obvykle pak následuje sprosté zvolání a oprava příkazu. Fuck nás právě toho posledního ušetří. Jak to funguje? Po chybném příkazu napíšete fuck a vyskočí vám opravená varianta příkazu a pokud jste s jejím zněním spokojeni, stačí znova odenterovat.

Pro lepší představu jak to funguje, se podívejte na následující příklad.

vykook@cipisek ~> brw list
fish: Unknown command 'brw'
vykook@cipisek ~ [127]> fuck
brew list [enter/↑/↓/ctrl+c]
aria2       emacs       lzo     openttd     tig
autoconf    fish        mongodb     parrot      tmux

Správný příkaz měl být "brew list" a já místo toho napsal "brw list". Snadné a rychlé řešení, nemyslíte? Ještě bych dodal, že u některých příkazů doplňuje například zapomenuté sudo atd...

Pokud vás The Fuck zaujal, najdete ho na Githubu

Blogísek strikes back (2015/01/11)

Tak jsem zase po letech zprovoznil svůj úžasnej blogísek. Super co? No ani ne, stejně sem nebudu nic kloudnýho psát, pokud teda budu vůbec něco psát...

Protože jsem línej cokoliv konfigurovat, tak jsem se nakonec vybodnul na Wordpress a použil generátor Hexo. Po prolezení zdrojů na internetu jsem zjistil, že pravděpodobně budu jedinej nečíňan co to používá, ale tak třeba zase dostanu Rudou knížku zdarma.

Teď už jen zbejvá nalézt zálohu starýho blogu a nacpat sem ty články...