.[ ČeskéHry.cz ].
Piškvorky Qt

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Johnn195



Založen: 13. 10. 2013
Příspěvky: 6

PříspěvekZaslal: 11. únor 2016, 22:33:57    Předmět: Piškvorky Qt Odpovědět s citátem

Zdravím,
nedávno jsem oprášil jeden školní projekt.
Jedná se o základní piškvorky s možnostmi přizpůsobení hry. Nápsány v C++ s využitím Qt. Nabízí i trochu jednoduší AI.
Jestli někdo vyzkouší, rozhodně dejte vědět. Každou odezvu ocením Cool

img https://db.tt/oNp0yqoV

Zdrojové soubory na githubu https://github.com/johnn195/piskvorky
Binárka pro Linux https://db.tt/QoRRaPd7 (Vyžaduje zákadní knihovny/balíčky pro qt5)
Binárka pro Windows https://db.tt/ttd1jKKR
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 12. únor 2016, 11:08:22    Předmět: Odpovědět s citátem

Neber si to osobne, ale ty zdrojaky jsou nepochopitelne, necitelne, nikdy v zivote jsem jeste nevidel takovouhle duplicitu kodu, abstrakce je nulova (konkretne mluvim o Arrays::aiNormal(), Arrays::aiEasy(), Arrays::winX(), Arrays::winO(), zbytek programu jsem nevidel). Takovyhle program se neda vubec pochopit a udrzovat. To je typicka ukazak brute-force, copy-paste programovani.

Jinak standardni pristup pro AI u tohoto typu problemu je minimax a alpha-beta pruning, ale v tomto pripade je to spis vedlejsi detail Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
mar



Založen: 16. 06. 2012
Příspěvky: 610

PříspěvekZaslal: 12. únor 2016, 13:49:57    Předmět: Odpovědět s citátem

Radis napsal:
Jinak standardni pristup pro AI u tohoto typu problemu je minimax a alpha-beta pruning, ale v tomto pripade je to spis vedlejsi detail Smile

ano, alphabeta funguje dobre pro damu nebo sachy, ale jsou hry, kde se alphabeta nepouziva (napr. go)
tam se pouziva MCTS - mimochodem AlphaGO od Google DeepMind zaznamenalo velice nedavno fenomenalni uspech, kdy se podarilo porazit profesionala
(2p =2. dan pro) a nekdy v breznu se chteji utkat s Lee Sedolem (9p), coz je v posledni dekade nejuspesnejsi hrac go na svete

pro zajimavost, moderni sachove enginy maji BF ~2 nebo min (=2x tolik uzlu pro vyssi hloubku, tedy pultah dopredu), tzn. provadi se velmi agresivni pruning a redukce; minimax ma pro sachy BF ~35

a ještě mimochodem, v praxi se nepouziva minimax, ale negamax transformace, tj. kazdy hrac maximalizuje ze sveho pohledu => tedy vyrazna redukce logiky v kodu (velmi casta chyba zacatecniku, kde pisou zvlast logiku pro min [cerneho] a max [bileho] hrace),
samozrejme se bavim o negamax transformaci alphabety,
klasicky minimax je sam o sobe nepouzitelny tak jako tak, protoze nedosahne nikdy zajimavou hloubku (i kdyz na me by asi stacil), alphabeta je pouze zlepseni nad naivnim minimaxem
a velmi zavisi na poradi prohledavanych tahu (v nejhorsim pripade degeneruje alphabeta na minimax)

ale to jen tak bokem; zpatky on topic: se strednim levelem jsem jednou vyhral a jednou prohral, takze spokojenost
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Reniezs



Založen: 29. 07. 2007
Příspěvky: 273

PříspěvekZaslal: 13. únor 2016, 13:07:36    Předmět: Odpovědět s citátem

Snaha se cení Smile Můj první kód vypadal podstatně hůře. Hlavní je na sobě pracovat a brát zřetel na rady od zkušenějších. Věřím že příští projekt bude po stránce kódu propracovanější. Držím palce.
_________________
https://szeiner.com - Nezávislé vývojářské studio SZEINER s.r.o.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Johnn195



Založen: 13. 10. 2013
Příspěvky: 6

PříspěvekZaslal: 18. únor 2016, 16:40:40    Předmět: Odpovědět s citátem

Radis: Osobně si to neberu, zvlášť když jsi viděl jen 4 metody Very Happy
Ale uvědomuji si nedostatky, které jsi napsal. Uvědomuji si, že současný algorytmus, který používám pro AI (jedná se o jednoduší minmax) není zcela ideální. V metodě aiEasy() se nachází jednoduší, v metodě aiNormal() už o něco vyladěnější. V budoucnu snad najdu čas a energii něco s tím udělat.
Co se týče metod winX() a winO(), ty jsem vzal už z jednoho svého staršího projektu a implementace to není nejvhodnější, ale už jsem to přepsal do jedné metody win(QString), která jako argument přebírá řetězec s vítěznou řadou.
Zdrojové soubory na githubu už jsou updateovány.
Jinak všem děkuji za odezvu Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Radis



Založen: 29. 03. 2014
Příspěvky: 235

PříspěvekZaslal: 18. únor 2016, 23:17:33    Předmět: Odpovědět s citátem

Johnn195 napsal:
zvlášť když jsi viděl jen 4 metody Very Happy

...do kterych se ti podarilo vmestnat kompletne celou hru krome UI.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Johnn195



Založen: 13. 10. 2013
Příspěvky: 6

PříspěvekZaslal: 18. únor 2016, 23:29:01    Předmět: Odpovědět s citátem

Radis napsal:

...do kterych se ti podarilo vmestnat kompletne celou hru krome UI.

Metody na které jsi se díval, měly a mají stále stejnou funkčnost, což je vrácení hodnoty bool u metody win(). aiEasy() a aiNormal() vrací index pole tahu pro AI. Takže se se nejedná o celou hru kromě UI. Ikdyž se samozřejmě jedná o dost důležitý základ
edit: pro doplnění metoda win() kontroluje zda nedošlo ke konci hry
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna