資源簡介
五子棋AIC#代碼 完整工程 帶alpha-beta剪枝、評估函數、界面

代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.Threading.Tasks;
namespace?CHESS5
{
????class?AI:IPlayer
????{
????????public?Referee?referee?{?get;?set;?}
????????public?Chessboard?chessboard;//當前棋盤
????????public?event?EventHandler?PutDownEvent;//下棋事件
????????public?int?Color?{?get;?set;?}//顏色
????????public?int?depth;//搜索深度
????????public?int?first;//是否第一步
????????public?AI(int?color?Chessboard?chessboard)
????????{
????????????this.Color?=?color;
????????????this.chessboard?=?chessboard;
????????????depth?=?5;//默認搜索深度
????????????first?=?0;
????????}
????????public?async?void?MakeMove()//下子流程
????????{
????????????Point?point?=?new?Point(-1?-1);
????????????await?Task.Run(()?=>?(point?=?GetNext(Color)));//耗時函數放在線程池中執行,UI更新
????????????chessboard.PutDown(point?Color);
????????????if?(PutDownEvent?!=?null)?PutDownEvent(null?point);//繪制下棋位置
????????}
????????public?int?AlphabetaFind(int?depth?int?alpha?int?beta?int?player?int?prex?int?prey)//alpha-beta剪枝
????????{
????????????if?(depth?==?this.depth?||?chessboard.IsWin(new?Point(prex?prey)))?//是否到達設置搜索深度或一方獲勝
????????????{
????????????????int?ans?=?chessboard.Evaluation(Color)?-?chessboard.Evaluation(-Color);
????????????????if?(depth?%?2?==?0)
????????????????????ans?=?-ans;
????????????????return?ans;
????????????}
????????????int?minX?maxX?minY?maxY;//以下控制搜索范圍
????????????if?(chessboard.minX?-?2?>=?0)?minX?=?chessboard.minX?-?2;
????????????else?minX?=?0;
????????????if?(chessboard.maxX?+?3?????????????else?maxX?=?Chessboard.N;
????????????if?(chessboard.minY?-?2?>=?0)?minY?=?chessboard.minY?-?2;
????????????else?minY?=?0;
????????????if?(chessboard.maxY?+?3?????????????else?maxY?=?Chessboard.N;
????????????for?(int?x?=?minX;?x?????????????{
????????????????for?(int?y?=?minY;?y?????????????????{
????????????????????if?(!chessboard.CanPutDown(new?Point(x?y)))?continue;//不可下子
????????????????????chessboard.PutDown(new?Point(x?y)?player);//假設下子
????????????????????int?val?=?-AlphabetaFind(depth?+?1?-beta?-alpha?-player?x?y);//遞歸調用
????????????????????chessboard.PickUp(new?Point(x?y));//移子
????????????????????if?(val?>=?beta)//更新值
????????????????????????return?alpha;
????????????????????if?(val?>?alpha)
????????????????????????alpha?=?val;
????????????????}
????????????}
????????????return?alpha;
????????}
????????public?Point?GetNext(int?player)//下一步位置
????????{
????????????Random?random?=?new?Random();
????????????if?(first==0)//第一步隨機下
????????????{
????????????????first?=?1;
????????????????int?x?=?random.Next(5?Chessboard.N?-?5);
????????????????int?y?=?random.Next(5?Chessboard.N?-?5);
????????????????Point?point?=?new?Point(x?y);
????????????????if(chessboard.CanPutDown(point))?return?point;
????????????????else
??????????
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-12-07?19:46??CHESS5\
?????文件????????6148??2017-12-07?20:16??CHESS5\.DS_Store
?????目錄???????????0??2017-12-09?17:12??__MACOSX\
?????目錄???????????0??2017-12-09?17:12??__MACOSX\CHESS5\
?????文件?????????120??2017-12-07?20:16??__MACOSX\CHESS5\._.DS_Store
?????目錄???????????0??2017-12-05?23:31??CHESS5\.vs\
?????目錄???????????0??2017-12-05?23:31??CHESS5\.vs\CHESS5\
?????目錄???????????0??2017-12-07?19:46??CHESS5\.vs\CHESS5\v15\
?????文件??????101376??2017-12-07?17:57??CHESS5\.vs\CHESS5\v15\.suo
?????目錄???????????0??2017-12-09?17:12??__MACOSX\CHESS5\.vs\
?????目錄???????????0??2017-12-09?17:12??__MACOSX\CHESS5\.vs\CHESS5\
?????目錄???????????0??2017-12-09?17:12??__MACOSX\CHESS5\.vs\CHESS5\v15\
?????文件?????????120??2017-12-07?17:57??__MACOSX\CHESS5\.vs\CHESS5\v15\._.suo
?????目錄???????????0??2017-12-07?19:46??CHESS5\.vs\CHESS5\v15\sqlite3\
?????文件??????774144??2017-12-07?17:57??CHESS5\.vs\CHESS5\v15\sqlite3\storage.ide
?????目錄???????????0??2017-12-07?20:16??CHESS5\CHESS5\
?????文件????????6148??2017-12-07?20:16??CHESS5\CHESS5\.DS_Store
?????目錄???????????0??2017-12-09?17:12??__MACOSX\CHESS5\CHESS5\
?????文件?????????120??2017-12-07?20:16??__MACOSX\CHESS5\CHESS5\._.DS_Store
?????文件????????4816??2017-11-12?17:31??CHESS5\CHESS5\AI.cs
?????文件?????????189??2017-10-28?12:13??CHESS5\CHESS5\App.config
?????文件?????????366??2017-10-28?12:13??CHESS5\CHESS5\App.xaml
?????文件?????????342??2017-11-07?00:41??CHESS5\CHESS5\App.xaml.cs
?????目錄???????????0??2017-12-07?20:16??CHESS5\CHESS5\bin\
?????文件????????6148??2017-12-07?20:16??CHESS5\CHESS5\bin\.DS_Store
?????目錄???????????0??2017-12-09?17:12??__MACOSX\CHESS5\CHESS5\bin\
?????文件?????????120??2017-12-07?20:16??__MACOSX\CHESS5\CHESS5\bin\._.DS_Store
?????目錄???????????0??2017-12-07?19:46??CHESS5\CHESS5\bin\Debug\
?????文件???????26624??2017-12-07?17:56??CHESS5\CHESS5\bin\Debug\CHESS5.exe
?????文件?????????189??2017-10-28?12:13??CHESS5\CHESS5\bin\Debug\CHESS5.exe.config
?????文件???????48640??2017-12-07?17:56??CHESS5\CHESS5\bin\Debug\CHESS5.pdb
............此處省略70個文件信息
- 上一篇:C#調用BarTender源碼包含SDK可直接使用
- 下一篇:c#郵件發送
評論
共有 條評論