找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7447|回复: 4
收起左侧

五子棋c++源程序 功能完整

[复制链接]
ID:208499 发表于 2017-6-6 18:25 | 显示全部楼层 |阅读模式
此类简单游戏的设计最花时间的就是要保证功能完整,让玩家玩得尽可能舒服。
主体架构方面都没有大问题,而在加入人机对战、机器对战及悔棋功能时,一些细微问题需要好好研究,不停测试。
AI等智力问题也要适中。太弱智了玩得没激情,太聪明了玩得没信心。
经过测试,发现再高级的AI也有输的时候,测试的博弈树的深度为2,再深反应会很慢,也就是说能预测两步的AI也会输。
刚开始找到博弈树算法时,以为不管深度为多少都很聪明,后来发现只要找到窍门,那么深度为2的也很容易被打败。        而深度为3的反应需要10秒,后面的深度呈指数型增长,不符合实际需求。
        游戏经过多次测试,反应良好。

PS】因马上就要交课程设计报告,公司也很忙,以下功能等后续版本实现:
1、 据资料显示,博弈树算法还有很大的优化空间
2、 机器对战,需要用到多线程
3、 联网对战,因为传输的数据量小,且要求实时、有序、可靠,因此采用TCP协议
4、 嵌入式,所在公司用的是Wince系统,改天有时间移植上去
5、 多语言界面,如果老外也喜欢五子棋的话


参考文献【见同文件夹目录
1、 五子棋开局指南
2、 维基百科:Alpha-Beta剪枝算法

0.png

c++源程序如下:
  1. // MainFrm.cpp : implementation of the CMainFrame class
  2. //

  3. #include "stdafx.h"
  4. #include "3_1.h"

  5. #include "MainFrm.h"

  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif

  11. /////////////////////////////////////////////////////////////////////////////
  12. // CMainFrame

  13. IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)

  14. BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
  15.         //{{AFX_MSG_MAP(CMainFrame)
  16.         ON_WM_CREATE()
  17.         //}}AFX_MSG_MAP
  18. END_MESSAGE_MAP()

  19. static UINT indicators[] =
  20. {
  21.         ID_SEPARATOR,           // status line indicator
  22.         ID_INDICATOR_CAPS,
  23.         ID_INDICATOR_NUM,
  24.         ID_INDICATOR_SCRL,
  25. };

  26. /////////////////////////////////////////////////////////////////////////////
  27. // CMainFrame construction/destruction

  28. CMainFrame::CMainFrame()
  29. {
  30.         // TODO: add member initialization code here
  31.        
  32. }

  33. CMainFrame::~CMainFrame()
  34. {
  35. }

  36. int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
  37. {
  38.         if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  39.                 return -1;
  40.        
  41.         if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
  42.                 | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
  43.                 !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
  44.         {
  45.                 TRACE0("Failed to create toolbar\n");
  46.                 return -1;      // fail to create
  47.         }

  48.         if (!m_wndStatusBar.Create(this) ||
  49.                 !m_wndStatusBar.SetIndicators(indicators,
  50.                   sizeof(indicators)/sizeof(UINT)))
  51.         {
  52.                 TRACE0("Failed to create status bar\n");
  53.                 return -1;      // fail to create
  54.         }

  55.         // TODO: Delete these three lines if you don't want the toolbar to
  56.         //  be dockable
  57.         m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
  58.         EnableDocking(CBRS_ALIGN_ANY);
  59.         DockControlBar(&m_wndToolBar);
  60.     //添加白棋图像
  61. //        m_wndStatusBar.GetStatusBarCtrl().SetIcon(0,AfxGetApp()->LoadIcon(IDI_WHITE));
  62.         //显示文字
  63. //        m_wndStatusBar.SetPaneText(0,"白棋下");
  64.    
  65.         return 0;
  66. }

  67. BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
  68. {
  69.         if( !CFrameWnd::PreCreateWindow(cs) )
  70.                 return FALSE;
  71.         // TODO: Modify the Window class or styles here by modifying
  72.         //  the CREATESTRUCT cs
  73.         cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;        //
  74.         cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;//;
  75.         //设置窗口大小:400*340
  76.         cs.cx=450;
  77.         cs.cy=500;   
  78.         return TRUE;
  79. }

  80. /////////////////////////////////////////////////////////////////////////////
  81. // CMainFrame diagnostics

  82. #ifdef _DEBUG
  83. void CMainFrame::AssertValid() const
  84. {
  85.         CFrameWnd::AssertValid();
  86. }

  87. void CMainFrame::Dump(CDumpContext& dc) const
  88. {
  89.         CFrameWnd::Dump(dc);
  90. }

  91. #endif //_DEBUG

  92. /////////////////////////////////////////////////////////////////////////////
  93. // CMainFrame message handlers




复制代码

所有资料51hei提供下载:
3_1.zip (108.13 KB, 下载次数: 63)
回复

使用道具 举报

ID:211258 发表于 2017-6-15 16:31 | 显示全部楼层
非常好
回复

使用道具 举报

ID:219792 发表于 2017-7-14 23:58 | 显示全部楼层
非常NICE 的code
回复

使用道具 举报

ID:241026 发表于 2017-10-19 19:03 | 显示全部楼层
想试试这个,作为初学者
回复

使用道具 举报

ID:269927 发表于 2018-1-1 22:43 | 显示全部楼层
赞,这个代码可以学习一下啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表