WPF五子棋对战

  最近用WPF写了五子棋人机对战的程序。程序的设计思路是看了网上的一些帖子,借鉴了别人的思想,再经过自己的加工和总结。司令员是有借鉴,程序全部独立完成。这次分两次讨论,今天只讨论解决问题的思路。下次再介绍程序的设计。

  首先讲讲我用的算法,看了网上别人的思路,得到启发,再结合数据结构里面的知识在理解一下。其实五子棋的棋盘就是一个矩阵,机器怎么来判断将棋子放在哪个位置呢?我们可以借鉴数据结构里边的加权图。给图的每个单元格加权,权值最大的格子就是机器放置棋子的地方。好了,我们用加权图构成机器需要的数据(即优势最大的点,或者劣势最大的点)。这个是机器洛子最核心的部分,至于其他的暂时省略。

  我们怎么样来给每个格子赋权值呢?假如我放了一个子在一个点,这个子周围的所有方向上都有连成五个子的可能。首先我们得奖所有获胜的情况(5连的情况)用长度为5的数组来存每个获胜情况,在用一个2维的数组来存所有获胜情况。当放了一个子,根据落点的坐标来查找获胜表,表里有这个点的话,再将每种获胜情况的点加上一个数值。如果是敌人落一个点在任一地方,就在获胜表里把有这个点的所有获胜情况删掉。再判断3连,4连的情况,根据情况不通加上不同的权。

  电脑先分析人的棋盘的权值,在分子电脑棋盘的权值。如果人的权值比较大,就放在权值大的点,这就是防守,反之就是进攻。

   当然下棋的人都知道,下棋就是看谁遇见的步数多谁就赢。如果想让电脑更聪明,那可以在上边加权值的方法的基础上用递归的方法来“预见”未来几步。我只是用加权的方法来实现了电脑简单的与人对战。以后会在这个基础上来使程序更加聪明的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值