欢迎来到广州大学 计算科技研究院!
中文  |  English
当前位置: 首页   >   景中班   >   正文

景中班学业报告会第三期 | 不一样的五子棋?景中班的五子棋系统展示

作者:    信息来源:    发布时间: 2019-10-10

10月8日下午,景中班进行学业报告会第三期---设计五子棋系统,同学们对暑期集训的五子棋项目进行优化。

一、 抽签

大家按顺序抽签,决定展示报告的顺序,抽到1-20号的同学于当天进行展示汇报,其余同学于下周进行展示汇报。

二、展示汇报

同学们依次对自己设计的五子棋系统向大家进行展示,大多同学们的创新点主要集中在以下几个方面:

应用下棋范围,提高AI速度:

当前节点的子节点的数量和排列顺序对于搜索的速度起着至关重要的影响。根据五子棋的特点,可以产生一个棋面搜索范围。记录当前棋面所有棋子的最左最右最上最下点构成的矩形,我们认为下一步棋的位置不会脱离这个框3步以上。这样在棋子较少的时候,搜索节点的数量大大减少。可以将AI的速度提高一倍左右。

利用随机化算法,让确定方法不能必胜:

由于AI算法的固定性,所以一但玩家一次获胜,按照相同的走法,必然会再次获胜。但除了必杀招或者必防招,一个局面很多时候没有绝对最好的走法。而是有一些都不错的走法,那么可以把这些评分差不多走法汇集起来,然后随机选择它们中的一种走法,避免AI的走法的固定.这样最简单的方法避免固定方法AI必输。

算杀算法:

一种最简单的克服水平线效应的方式,计算出杀棋,杀棋就是指一方通过连续的活三和冲四进行进攻,一直到赢的一种走法。同样的深度,算杀比实训时老师使用的算法效率高很多。因为算杀的情况下,每个节点只计算活三和冲四的子节点。所以同样是1秒钟的时间,搜索只能进行4层,而算杀很多时候可以进行到12层以上。算杀其实也是一种极大极小值搜索,具体的策略是这样的:MAX层,只搜索己方的活三和冲四节点,只要有一个子节点的能赢即可;MIN 层,搜索所有的己方和对面的活三和冲四节点(进攻也是防守),只要有一个子节点能保持不败即可。

三、针对性采访

有个别同学还做出了自己的特色,如在局域网的机机 对战,将五子棋移植到安卓系统等。对此采访了部分同学

受访者:计科182李沛岳

Q:把五子棋移植到安卓上,这个想法很少有呢,你是怎么想到的呢?

李沛岳:我觉得不能亏待了Java的可移植性

Q:你们还没教安卓方面的知识吧,这个过程对你来说困难吗?(或者查阅了哪些资料)

李沛岳:起步是会有点困难,因为没有系统学过,所以就去查了很多

Q:能说一下你开发这个小项目的的心路历程吗?

李沛岳:一开始因为不懂如何写自定义画板,有想过放弃,但是又想到这也是一种锻炼,就查了很多关于自定义画板类。学会之后觉得难度其实也不大,现在也在庆幸当时坚持下来。

Q:你之前试过写其他的安卓软件吗?

李沛岳:试过,写过一个关于计算不确定度的小软件。

Q:你觉得你还有什么可以做得更好的呢?

李沛岳:我觉得在算法的优化方面做的工作比较少,仅仅是提高了进攻性。还有应该在联机方面也可以拓展一下,毕竟一个人下没意思。

受访人:计科182刘佳合

Q:你是如何实现不同电脑使用同一个WIFI能够实现对弈的?

刘佳合:采用的是socket通信,我大一在图书馆借的c语言网络编程的书,用c语言实现过跟舍友通信,这次相当于把它搬到JAVA。

Q:你在实现的过程中有遇到什么问题吗?

刘佳合:就是可以抢棋,抢棋老师也问我了,就是弄一个myplay来记录自己的棋子,然后对比player就好了,还有一个就是下完之后复选框什么都动不了了,然后用多线程就解决了。

Q:连同一个WIFI是为了获取它的IP地址吗?

刘佳合:对的。

Q:可以连不同WIFI获取IP地址实现通信吗?

刘佳合:不同热点肯定不可以的,像手机开热点,然后不开网络也可以通信,只是不开网络就是没连接因特网。


官方微信公众号