<HTML>Kdyz se nad tim zamyslime, tak finty jsou vlastne mysleni dopredu nebo take to co nena byt zrejme hned od jejiho uvodu...
Proto misto komplikovaneho zadavani fint pouzijeme vypocitavani tahu dopredu. V tomhle je bohuzel ale asi php dosti pro nas pomale ale nezkousel jsem tak nevim...</HTML>
jo presne.
A co takhle pridat jeste herniho pavouka pro pripadnej turnajek?
No je zřejmé, že kdyby se měly probrat všechny možné tahy počítače a pak všechny možné reakce na ně od člověka, a to na několik tahů dopředu, a zkoumat tak, který tah by mohl být nejlepší, byl by počet kombinací opravdu hodně velký a nevím nakolik je PHP na podobné výpočty rychlé.
Každopádně s algoritmem, který zde je popsán nyní (obranná čísla, útok, preference pro určité situace ...) se počítač chová hodně rozumně a správně, ale nechová se inteligentně - prostě nic nevymyslí. Ale i takový algoritmus dokáže běžného hráče porazit. Už proto, že má proti němu výhodu v tom, že nic nepřehlédne. Teda s vyjímkou vychytralého záměru hráče, který si připravuje možnost útoku z více míst zároveň. Toho by si počítač všiml jen pokud by počítal tahy dopředu.
je to super ;) dobry algoritmums, dost dobre
este skoda ze PC netoci ale len blokuje
ked to bude hotove tak to bude super ;)
myslím, že by stačilo myšlení na jeden tah dopředu, aby se zamezilo ignoraci
* X *
X * X
* X *
apd
Takže by stačilo do všech pozic, které jsou v kontakty s hráčovou značkou dosadit značku a sečíst obranná čísla na koncích všech řad, ve kterých políčko je a toto obranné číslo mu dosadit..
9
* X *
9 X x X 9
* X *
9
tj bude mít obr číslo 36
* X 4
X * X
4 X x 4
4
toto políčko by mělo obr číslo 16
a k těm bonusům za otevřenou řadu, možná by stačilo obr čísla té řady vynásobit dvěma.
ale nemám takovou představivost, abych si odvodil, zda je to správně
teda takhle, samozřejmě
* X 4
X * X
4 X x 4
4
k tomu bonusu, možná by stačilo otevřenou řadu počítat jako normální řadu, ale s jednou značkou navíc.
takže
16 × × × 16
bude totéž, co
0 O × × × × 16
A ještě jednu věc je třeba udělat, nejlépe to zachytí modelová situace:
* * * ! * * *
* * * * * * *
* x * * * x *
x * * * * * x
AI musí své propočty dávat i třeba o políčko dál, jako v tomhle případě. Normálně se totiž drží v těsné blízkosti a tudíž ji tah naznačený vykřičníkem nemůže napadnout. Napadnou ji sice jiné tahy, ale potom křížkový hráč může udělat alespoň jednu volnou trojku, tím pádem je stále O pod tlakem. Je nutné jít i o políčko dál od soupeře ;)
jj, ak je rada < 4 tak o policko dalej a AI ma jeden tah v takom pripade usetreny na utok ;)
este by bolo fajn ukladat vsetky odohrate hry do DB/suboru a AI by sa ucila ;) proste ak najde taky subor s rovnakym zaciatkom a zisti ze vtedy vyhral hrac, tak spravi iny tah ;) tak ako sa ucia sachove programy ;)
>>k tomu bonusu, možná by stačilo otevřenou řadu počítat jako normální řadu, ale s jednou značkou navíc.
Ne, situace:
O X X X X
vyzaduje velkou prioritu... cislo 16 nestaci protoze soucet v poli nejakych mensich hloucku muze dat cislo stejne nebo vyssi
totez plati o:
16 X X X 16
navic ani tady by nemela byt stejna priorita jako u:
O X X X X
protoze do vyteztvi zbyvaji jeste 2 tahy
kdezto u rady O X X X X uz chybi jen jeden tah
to je dulezity faktor do budoucna se zahrnutym utokem....
kdyz bude obrana
100 X X X 100
a nekde jinde utok:
X O O O O 2000
musi se provest utocny vytezny tah....
takze...
ted by jsi pro zkousku mohl stejny algoritmus provadet na pocitani utoku....
nakonci spocitej u kazdeho policka obrane cislo + utocne cislo
a dostanes kam hrat....
jak jsem rikal ze u obrany kdy jsou 4 TP z jedne strany volne dej tomu cislo 1500
4 TP z jedne strany volny dej ale jako utok dej 2000
pri hledani nejvetsiho souctu cisel obrany a utoku na polickach nejprve zkontroluj zda-li neni na nejakem policku utocne cislo > 2000 .. pokud ano dal nic neres a nech tam PC tahnout.. jinak plati soucet nejvetsi obrana+utok=tah
Beru na vědomí, zítra se to pokusím zpracovat.
Ta AI2 má ještě mouchy. Mylsím že obranné číslo by se mělo počítat stejné až tak daleko, kam až je možno udělat 5 koleček. Tedy pokud jsou např. 2 v řadě vedle sebe, tak by ta 4ka neměla být jenom těsně vedle nich, ale i o 3 políčka na každou stranu. POkud by v cestě bylo další kolečko, počítalo by se do výpočtu původního obranného čísla (naopak křížek by měl to číslo snižovat, protože tam je pak nemožné pokračovat s řadou). Tak by mělo OOnO stejný význam jako OOO (n = nic), akorát si teda nedokážu moc představit výpočet :)
Pokud se bude to číslo takhle prodlužovat, tak situace:
nnOO
nnnn
Onnn
Onnn
ohodnotí prázdné místo vlevo nahoře obranným číslem 8. Teď vlastně nevim jestli je to nejšťastnějsí, protože ono je v podstatě stejně výhodné zablokovat jednu z možných trojic, tedy záleží na tom co je okolo.
http://gomocup.wz.cz/ -- tu by sa tiez nieco naslo ;)