今天开始,我们来山寨一把“中国象棋”这款经典游戏,基于.NET的C#开发。说起中国象棋,很多朋友又该说了,“这有什么难的?一张棋盘、几个棋子而已!”。然后,程序猿之间有句很有名的谚语,“Talk is cheap,Show me the code!”。当你真正自己动手来实现这款小程序的时候,你会发现并不像你当初想象的那么简单,中国象棋的程序逻辑相当复杂,每一种棋子都有他自己的移动规则和吃子规则,各种棋局又是千变万化,如果没有一个清晰的思路和合理的架构,你的开发将会陷入一场逻辑混乱的噩梦。
闲言少叙、废话少说、言归正传(废话还是不少,呵呵!)
首先让大家看一眼我们的程序运行效果(图1),怎么样?虽然谈不上漂亮,但至少还顺眼吧?呵呵!开个玩笑。其实,本项目的界面十分简单,根本用不上什么高级的知识或技巧,项目的重心在于程序的逻辑部分。
除了中国象棋最基本的一些规则逻辑之外,本项目还扩展了一些实用的辅助功能,如:对方每走一步棋,系统都会给出你下一步可以走的有哪些棋子;当你用鼠标按住某个棋子的时候,会出现一系列绿色的圆圈,以提示你该棋子可以走到哪些位置(图2)。
需要说明的是,我们的这款中国象棋没有考虑人机对战功能及算法的实现,这涉及到人机博弈理论,属于一个比较独立且系统的领域,为了突出重点,不让人机博弈的那些晦涩的算法理论分散大家的注意力,我们只实现象棋的规则逻辑,而没有设计电脑的AI。如果大家对人机博弈的理论及算法感兴趣,可以自行百度一下,网上有很多相关资料,也欢迎大家把自己所领会的人机博弈算法应用到我们的这个项目中来。
本项目目前只实现了单机功能,至于局域网联机对战功能,其实并不复杂,无非就是通过相关的网络协议(TCP、UDP等),发送相关的数据包,并进行解析而已。大家可以参考本人的网络课程“支持联机对战的俄罗斯方块游戏开发实战”,网址为:http://edu.csdn.net/course/detail/3041。当然了,如果大家对联机对战部分的功能实现比较感兴趣,可以加我微信dabuliuhaike垂询。