整理下自己的五子棋实现思想

来源:互联网 发布:手机解压安装软件 编辑:程序博客网 时间:2024/05/11 15:47
参考了别人的C++五子棋后,最大的收获感觉是他写在前面的用面向对象的思想方式思考五子棋。然后使用这些对象去实现下五子棋的整个过程。
因为准备将C++编程windows程序,所以重新整理下自己的思想,我想会对我有帮助。
首先,在对象的层次上,可以分为,点,棋子,棋盘,玩家。在现实世界中,对象便是如此,其中,点理解为放在棋盘上的坐标,棋子加上点,便是摆放好了的棋子,所以棋子中应该包含有点。棋盘上也可用有棋子,所以棋盘对象也会包含棋子对象。玩家,我们所关心的,是玩家的姓名,玩家所执用的颜色。这些都是包含关系的思考。
具体的应该如下:
点,是最基本的对象,表明在棋盘上的一个点;点所有的属性应该有X,Y(二维的棋盘)
棋子,包含点(以便表示棋子所下的位置);棋子的颜色。
棋盘,包含(15*15个)点;棋子。
玩家,我们以姓名区别两位棋手,所以包含姓名;玩家各执的颜色不同,所以颜色;
但要在电脑上显示,显示功能相对独立,所以需要一个显示对象。
两人对战,一般都懂游戏的规则,但游戏软件中,判断功能应该由一个对象去判断玩家的下棋是否合法,所以需要裁判对象。
下棋过程中对对象协调工作,例如,玩家需要取棋子,放在棋盘中,这些还调用了显示对象,裁判对象。在这些对象的工作中,我们需要一个协调各个的工作,以保证工作顺畅,方便管理(如果写在main函数,则很乱,很难管理,我个人觉得),所以需要一个组织者。
我最终是多了一个管理者对象(这没想明白,因为我觉得管理者对象的工作完全可以整合入管理者对象中,起码从自然语言中可以,或者是因为有时组织者需要和别的对象平等工作)
所以,最后的对象有:
点,棋子,棋盘,玩家,裁判,组织者,管理者
至于对象的方法,我觉得更倾向于再对待流程中得出。首先我说下我自己的流程:
首先管理者下命令让组织者者开始游戏,电脑游戏中需要先选择双人对战还是人机对战,就是选择对战模式;选择模式后,决定哪个先行;然后首次显示空棋盘,显示这轮应哪放下的提示信息;每当下一步棋后,首先判断是否合乎规则,如果否,则显示提示信息。如果是,则重新显示棋盘,把下的棋子一起显示下去;然后换过另外一位玩家下;重复以上两条,即显示提示哪方下,一直到换玩家下的这段;直到某一位胜出。提示恭喜信息,以及询问是否再次游戏。然后重复。
由这段过程应该可以得出不少对象中需要的存储过程。不过好像这个过程很复杂。具体分析起来,也不可能一次得出全部需要的方法,在实现中适当的添加,这就是我总结的方法。
当然这只是一家的想法。有错误或不合理的地方,还请各位不吝指导!! 

 

原创粉丝点击