Navigace

Dotazy Kampaně Civilizace Jednotky Ke stažení Tvorba map   - Menu editoru   - Vychytávky   - Spouště   - Kampaňe   - AI script   - RMS script Cheaty Citáty Kniha návštev Ostatní

Odkazy

Aoe.cz Aoe2 by HHPZ AoK Heaven Aoe2 Facebook pocitadlo

Anketa

   

Tvorba AI Část VII.: Doplnění znalostí základů

Tak už umíme vcelku dost .... Ale stále ne natolik, aby jsme se mohli pustit do něčeho velkého. V šesté části si doplníme základní znalosti, aby byl náš postup do feudálu co nehladší. Ještě se stále vyhnem takovým machrovinkám, jako je nastavení útoku či jak se chovat na jaké mapě... Budeme se držet Mongolů, Černého lesa a jednoho standartního protihráče (nastavit !!!)
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Středník:


; Celkem šikovná věcička pro přehlednost (hlavně v editoru)
 
Vše co je v řádce za středníkem program přeskočí,
takže si za něj můžete napsat jakékoli poznámky ...
 
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Čas hry:


(game-time <rel-op> <value>)
     ; Prostě podmínka která počítá čas od spuštění hry (sec)
 
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Nahromaděné suroviny:


(food-amount <rel-op> <value>)    ; Máš-li tolik jídla
(wood-amount <rel-op> <value>)   ; Máš-li tolik dřeva
(gold-amount <rel-op> <value>)     ; ... zlata
(stone-amount <rel-op> <value>)   ; ... kamení
 
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Co značí "total":


Příkladem kde se dá použít TOTAL je třeba:
 
   (building-type-count- house == 1)
   (building-type-count-total house == 1)
 
První říká :

Máš li postaven jeden dům, podmínka je splněna!
 
Druhá říká :

Máš li zakoupen jeden dům, podmínka je splněna!

Pro ty co nechápou, je tu AOE definice slova "zakoupen":
Zakoupeny jsou ty objekty hráče, které jsou buďto již vytvořeny, nebo se staví (trénují).

Total tedy v tomto případě sčítá jak budovy co jsou postavené, tak ty na kterých vesničané teprve pracují.
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

NOT a jeho použití.:


Jedná se o jednoduchou negaci jakékoli podmínky.
 
Příklad:
 
(defrule
   (not (unit-type-count villager == 3) )
   (can-build mill)
=>
   (chat-to-all "build mill")
   (build mill)
)
 
NOT v tomto případě vyneguje podmínku z "==" na "!=".
 
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Poslední co se základu týče jsou upřesňovače podmínek.

Jedná se o tagy OR; NOR; AND a NAND

Logika a AJ napoví k čemu jsou tyto tagy dobré,
Jenže to by nebylo ono, kdyby to bylo primitivní a logické, že?
 
1) AND a NAND jsou jednoúrovňové tagy a OR je dvoj
   a více úrovňový.
2) To ale neznamená, že nemůžete vytvořit AND v dvojúrovňovém OR
3) Po tagu musí vždy následovat nejméně dvě podmínky!
4) Můžete však použít tu samou podmínku ještě jednou... : )
5) Vnořený upřesňovací tag se počítá jako další podmínka.
6) Ve dvojúrovni se první OR nebo NOR používá
   na určení začátku syntaxe.
7) NOR je vpodstatě doplňkem k OR, který může nahradit
   druhou úroveň, ale pak OR funguje jen při třetí.
8) Smutné je, že pravidla pro OR a NOR neplatí vždy...
   A já je zatím neumím obejít...
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

AND


(defrule
   (building-type-count house == 0)
      (and
         (game-time > 30)
      ; Vždy alespoň 2 podmínky
         (game-time > 30)       ; Ale můžete tu samou použít 2x
      )
   (can-build mill)
=>
   (chat-to-all "build mill")
   (build mill)
)

 
Podmínka říká :

Budeš-li mít 0 domů "a" to i po 30 sekundách, postav mlýn!
 
Jednoúrovňový znamená, že stačí pouze jedna syntaxe typu AND.
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

NAND


(defrule
   (building-type-count-total house == 1)
      (nand
         (game-time > 30)
         (game-time > 30)
      )
   (can-build mill)
=>
   (chat-to-all "build mill")
   (build mill)
)

 
Rozbor:

Pokud máš zakoupen jeden dům tak postav mlýn! Ale musí to být do 30 sekund od začátku hry, pak už podmínka neplatí!
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

OR


(defrule
   (true)
      (or
   ; Zde začínají podmínky nebo
         (game-time > 40)
         (or
   ; Zde je jako druhá podmínka použit další OR
            (unit-type-count villager == 4)    ; Vždy nejméně 2 podmínky!
            (unit-type-count villager == 4)
         )
   ; Vždy uzavřete všechny podmínky a úrovně
      )

   (can-build mill)
=>
   (chat-to-all "build mill")
   (build mill)
)

První podmínka TRUE a poslední CAN-BUILD-MILL musí být splněny vždy ! Ty podmínky pro které "NEBO" platí jsou až za prvním OR a končí u zelené zakončovací závorky v úrovni prvního OR.
 
Rozbor :

Jakmile jsou hlavní podmínky splněny, začne se program zabývat dalším. Ke spuštění efektů musí být zárověň splněna alespoň jedna podmínka OR. V našem případě buďto naplnění času 40 sekund "NEBO" počtu vytvořených vesničanů rovným 4.

Dvojúrověň je myslím celkem jasná, protože pokud by za prvním or nenásledovalo další, byla by první podmínka v OR irelevantní.
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

NOR


(defrule
   (true)
      (nor
         (unit-type-count-total villager == 4)
         (or
            (game-time < 30)
            (game-time < 30)
         )
      )
   (can-build mill)
=>
   (chat-to-all "build mill")
   (build mill)
)

 
Rozbor :

NOR neguje podmínku z (unit-type-count-total villager == 4) do tvaru (unit-type-count-total villager != 4) Zároveň však také neguje podmínky v OR! Výsledkem tedy je podmínka : Pokud hráč má víc nebo míň vesničanů než 4, a pokud je čas větší než 30, vše je splněno.

Ještě jsem nepřišel na situaci, kdy bych tohle chtěl použít, ale tak, když to existuje, tak to asi k něčemu dobrý bude. Jestli to zjistíte, dejte mi vědět ;) :D...
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

Rada závěrem:

Nesnažte se dělat více jak tříúrovňové podmínky, čim víc podmínek... tím větší šance že uděláte chybu! A ta se v tomhle "bordelu" fakt hledá blbě.
 

~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~

< ^

Copyright © 2006 - Autoři