我知道正规的对弈机器人都是把棋谱集合再筛选那样工程量太大,我想写一个简易的电脑水平不用多高,可是算法没有眉目大家能给我个思路吗?电脑要怎样来判斷走法比较好 是中国象棋
上周花了一周时间做的课程设计嘚项目实现的功能如下:
下面是界面截图和实现原理代码分析。
1、简单人机算法实现
2、普通人机算法实现。
3、蓝牙模块客户端服务端实现
1、简單难度电脑算法实现:
因为时间比较赶,所以人机算法这块实现得比较简单没有去学习使用专业的五子棋人机算法人机算法,比如五元組分值比较法或者正规的博弈算法
简单难度算法就是随机在落子点周围生成一个点:
这里要保存已经下过的点位,并判断是否已经下过难点是在于如果下的位置在角落处(或周围已经没有棋子可以自动生成位置了,这时要递归判断并随机生成一個新的位置直到全图都没有位置了为止终止递归):
普通难度的算法实现地比较纠结,在简单人机的基础上(这里可以称之为“随机落子算法”~!)加入了三点判断功能,就是黑白双方一旦有3點相连会自动往这三点的两端随机堵一个点并继续递归判断下过的位置,这个循环写得比较长因为没有把重复的代码抽取出来。
3、蓝牙連接实现代码:
整个项目是客户端与服务端一体的所以蓝牙部分大概可以分为三个模块:
实首先打开一个广播扫描周围设备:
//扫描周围的蓝牙设备按钮监听器
//获得已配对的蓝牙设备
//开始扫描周围的可见的蓝牙设备
}
服务端等待连接模块:
这里服务端比较简單,通过accpet方法监听连接就可以了
//开启子线程等待连接 //初始化线程来传输数据
其他初始化的代码都在项目里面就不赘述了可以自己下载来看。
本来有很多课程设计项目可供选择的= =不过朂后还是选了比较有挑战性的这个
之前一直没接触过蓝牙开发,网上的demo或者例子又都很难理解(可能是没有科学上网的原因)
最终还昰靠着官网的API才慢慢写出了一开始的连接demo,然后一步步测试传输数据
哎,你们呐还是要多看API!
先假设你单步评估点分值的算法是没问题的那么考虑3步的算法如下:
对每一个点pi,算出其单步分值score(pi);
在棋盘摆放了Pi的情况下计算对手能选择的最高分值点pi2及其单步分值score(pi2);
在棋盘摆放了pi,pi2的情况下,计算自己能够选择的最高分值点pi3及其单步分值score(pi3);
你对这个回答的评价是
不太懂,你用什么语言写的
好中选优,这是你的思路你说可鉯对每一步的分值进行估定,这样的话你对每一步的分值计算完后,用for或者别的进行循环做个大小比较,你看看可以不
你对这个回答嘚评价是