资源简介
五子棋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个文件信息
- 上一篇:C#调用BarTender源码包含SDK可直接使用
- 下一篇:c#邮件发送
相关资源
- C# 调用win32 api函数-user32.dll详细说明
- C# 调用BarTender打印条码DEMO
- 大型比赛竞赛抽签系统 可打印 c# vs
- C#编写的Gerber查看器
- lua C# .Net4.0 vs2010 LuaInterface
- C#十六进制编辑器
- 明华URF-35H读卡器 C#读写源码 为大家
- C#文件流读取CSV文件
- c#读写PDF文件sql
- C# winform Socket大文件传输
- c#车牌识别系统附30张测试图片
- 《C#面向对象程序设计》源代码(CS)
- 金旭亮《C#面向对象程序设计》教案
- 试题库管理系统毕业论文(C#)源程序
- 学校网站原代码(C#.NET)
- C#-数据库操作技术-员工管理系统
- c#web开发入门经典
- C#与Matlab混合编程的几种方式
- c# 开发与 mysql数据库实现的增删改查
- C#异步操作 异步查询数据库 异步处理
- Basler相机通过IO触发源码
- [源代码] 《领域驱动设计 (C# 2008 实
- 松下PLC与C#通讯串口调试入门教程.z
- USB 继电器控制器 LCUS-1 保证能用 c#
- C# AES加密解密小工具
- C#圆形按钮,非常漂亮动态~~
- [精]C#仿QQ右下角弹出提示框()
- C#进程间通信-共享内存代码
- 有史以来最简单的三层(C#)
- vb调用c#编写的串口DLL文件(vb源码
评论
共有 条评论