pos表格怎么横着打(C# winform 简单五子棋 200行代码实现人机对战)

快鱼网 29 0

1、功能需求

接上篇博文,本文描述简单人机对战实现过程,只是简单实现考虑走一步策略,如果要想实现走多步策略,可以在本文估值算法的基础上用极大极小值配合剪枝算法,实现考虑多步策略,这样ai会显得更加聪明,后期如果有时间完善,会更新代码。

2、界面设计

参考上一篇博文的界面。

3、算法描述

其实算法非常简单,毕竟ai部分只有200行代码,所以应该只能算是实现估值函数,即当前局面走一步时最好的位置,不考虑走多步。我的思路如下:

(1)枚举当前局面棋子可能的落点,并给不同的局面赋值,越重要的局面分数会越高

(2)遍历每个可落子点

(3)在可落子点落子时,分四个方向去获得落子前后五个位置并转换成序列,然后检测该序列满足(1)中的情况,并获得一定分数累加存到字典中

(4)对字典进行排序

(5)取得分数最高的点即为最优落子点

当然,这只是考虑一步,但也有不错的棋力,如果要考虑多步,请参考前面提到的极大极小值配合剪枝算法,其实本博文的算法可以当作极大极小值配合剪枝算法的估值函数,然后只做迭代就好了。

4、代码实现

对上一博文的代码有一点小的更新,因此全部贴出代码,可能枚举时有考虑不到的情况,可能有些小问题,不过思想是没有问题的,项目代码如下:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsAppAnimalRegonize{ public partial class FormChess : Form { class Pos { public int X { get; set; } public int Y { get; set; } public bool Have_chess { get; set; } public int Type { get; set; } public Pos(int X, int Y, bool Have_chess, int Type) { this.X = X; this.Y = Y; this.Have_chess = Have_chess; this.Type = Type; } } private List null_chess_pos_list; private Stack

标签: chess

抱歉,评论功能暂时关闭!