C/C++ week Anniversary - BF
80 % bodů zdarma na online výuku díky naší Narozeninové akci!
Pouze tento týden sleva až 80 % na e-learning týkající se C/C++

Šachy ve WPF

Známá desková hra pro dva hráče, ve které se hráči snaží logickým umem a strategií přehrát soupeře. Možnost trénovat proti počítači se třemi úrovněmi obtížnosti.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Hra je určena pro Windows 10, 8.1, 8, a 7; 32-bit i 64-bit (je nutné mít nainstalovaný NET Framework 4.6.1).

Grafické uživatelské rozhraní jsem se snažil vytvořit co nejvíce intuitivní a přehledné. Nastavení hry je dynamické, zobrazuje se tedy pouze nastavení, které je užitečné pro daný mód hry (módy = hráč vs hráč, hráč vs ai, ai vs ai).

Aplikace umí dále
ukládat a nahrávat šachové hry
pohybovat se zpět a vpřed v historii provedených tahů
nastavit oběma stranám, zda za figurky bude hrát hráč nebo ai
nastavit, aby ai hrálo samo proti sobě a to s odlišnou obtížností ("inteligencí")
nastavit minimální délku tahu, protože některé ai tahy mohou být velmi rychlé
přenastavit i právě probíhající hru
využívat moderní hardware neboli potenciálu vícejádrových procesorů

Algoritmus pro vyhledávání nejlepších tahů (ai) je minimax. Snažil jsem se ho vylepšit na algoritmus "alfa-beta ořezávání", bohužel neúspěšně. Pokud má někdo s tímto algoritmem zkušenosti, rozhodně ocením každou radu nebo typ, jak ho implementovat. Prostředí by na to mělo být plně připravené.


Galerie

Hra byla vytvořena v roce 2016.

 

Stáhnout

Staženo 265x (460.21 kB)
Aplikace je včetně zdrojových kódů v jazyce C#

 

 

Článek pro vás napsal Lukáš Fusek
Avatar
Jak se ti líbí článek?
4 hlasů
Autor se věnuje převážně vývoji aplikací na platformě .NET.
Všechny články v sekci
Zdrojákoviště C# .NET - Okenní aplikace WPF
Aktivity (9)

 

 

Komentáře
Zobrazit starší komentáře (16)

Avatar
coells
Redaktor
Avatar
coells:16.3.2016 15:27

Tvůj kód jsem neviděl, ale několik tipů:

  1. zapni si release mode kompilátoru, rozdíl s/bez properties nebude žádný
  2. neřeš foreach nebo for, použij prioritní frontu s greedy heuristikou výběru tahů k analýze
  3. použij hashování na detekci už zpracovaných tahů
 
Odpovědět
16.3.2016 15:27
Avatar
lastp
Redaktor
Avatar
lastp:17.3.2016 22:16

Když člověk nějaký složitý program vytváří několik měsíců a často ho potřebuje ladit, mohou se hodit i takové optimalizace, které se projeví pouze v Debug módu. Když mám nápad na optimalizaci, která mi teď zabere minutu a později mi ušetří mnohem více času, tak se to vyplatí.

 
Odpovědět
17.3.2016 22:16
Avatar
lastp
Redaktor
Avatar
lastp:17.3.2016 22:27

Na anglické wikipedii je článek Negamax, kde je popsán algoritmus, který se často používá u logických her. Zajímavý je hlavně odstavec "Negamax with alpha beta pruning and transposition tables". Vypadá to komplikovaně, ale v podstatě je to podobné algoritmu, který je v souboru AI.cs. Jsou tam navíc hodnoty alfa, beta a hashovací tabulka. Místo fukcí Transposition­TableLookup a Transposition­TableStore lze v C# použít třídu Dictionary. Musí se k tomu ale napsat metoda GetHashCode, která z hrací plochy vypočte hash. Věta "node is a terminal node" znamená mat nebo remíza. Věta "the heuristic value of node" je ohodnocení pozice (součet hodnot sebraných figurek). Funkce GenerateMoves jsou možné tahy. Funkce OrderMoves je heuristika výběru výhodných tahů a k tomu lze použít existující funkci OhodnotUtok.

 
Odpovědět
17.3.2016 22:27
Avatar
Lukáš Hypša:24.3.2016 18:58

Odlišit to jde ale je pravda že věž bývá menší a širší než dáma.

Odpovědět
24.3.2016 18:58
Jsem lama co se roky snaží naučit napsat aspoň pár řádků a furt mu to nejde...
Avatar
Jan Řehák
Člen
Avatar
Jan Řehák:5.4.2016 18:27

na páána :)

 
Odpovědět
5.4.2016 18:27
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Martin Bruna
Člen
Avatar
Martin Bruna:20.6.2016 11:43

Pokud by ses někdy pouštěl do další optimalize douporučuji se podívat na stockfish jde o jeden z nej šachových enginů a je opensource (https://github.com/…sh/Stockfish)

 
Odpovědět
20.6.2016 11:43
Avatar
Vasek Mares
Člen
Avatar
Vasek Mares:29.5.2018 19:32

Zdravím, povedlo se mi vyhodit krále. Hráno na nejlehčí obtížnost. Střelec měl v jedné diagonále dámu a krále no a AI obětovala raději krále :D tím že ustoupila s dámou.

 
Odpovědět
29.5.2018 19:32
Avatar
Lukáš Fusek
Redaktor
Avatar
Odpovídá na Vasek Mares
Lukáš Fusek:19.3.2019 6:03

Nahraná verze šachů je zastaralá. Pokud si přečteš popis aplikace, tak si můžeš všimnout, že popsané vlastnosti nesplňuje. Snažil jsem se nahrát aktuální verzi 2x, ale ani jednou mi editaci tohoto příspěvku neschválili. :-S Pokusím se to nahrát ještě jednou. Třeba mi to teď po 2 letech schválí. :D

Editováno 19.3.2019 6:05
 
Odpovědět
19.3.2019 6:03
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Lukáš Fusek
David Čápka:19.3.2019 10:15

A nedal jsi místo Publikovat jen Uložit jako rozepsaný? Nevzpomínám si, že bychom v redakci něco takového měli. Už to máš schválené.

Odpovědět
19.3.2019 10:15
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Lukáš Fusek
Redaktor
Avatar
Odpovídá na David Čápka
Lukáš Fusek:20.3.2019 22:41

To už si nevzpomínám. Asi bych se ani nedivil, kdybych to předtím někde spackal. Díky.

 
Odpovědět
20.3.2019 22:41
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 26. Zobrazit vše