• 大小: 355KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-12
  • 语言: C#
  • 标签: C#  

资源简介

五子棋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 < Chessboard.N) maxX = chessboard.maxX + 3;
            else maxX = Chessboard.N;
            if (chessboard.minY - 2 >= 0) minY = chessboard.minY - 2;
            else minY = 0;
            if (chessboard.maxY + 3 < Chessboard.N) maxY = chessboard.maxY + 3;
            else maxY = Chessboard.N;
            for (int x = minX; x < maxX; x++)
            {
                for (int y = minY; y < maxY; 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个文件信息

评论

共有 条评论