MFC设计五子棋完全代码_第1页
MFC设计五子棋完全代码_第2页
MFC设计五子棋完全代码_第3页
MFC设计五子棋完全代码_第4页
MFC设计五子棋完全代码_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MMM F F F C C C程程程 序序序 设设设计计计 MFC 制作五子棋制作五子棋 目录 1 目的与要求 2 主要功能 3 设计过程中的经验与教训 4 自己收获与不足 5 重要程序清单 6 窗口截图 1 目的与要求目的与要求 利用已有的 C 基础 结合对 MFC 的学习 进行窗口化设计 由于 MFC 提供了 MFCppWizard 自动生成框架 使得简单的编程 更加简单 界面简洁 这次用 MFC 设计了一个简单的五子棋游戏 可以进行简单的 双人对战 目的在于更加熟悉 MFC 的使用来完成游戏的制作 再 此期间 搜集大量信息 以及函数的源代码 不断进行整合 进 行函数构造 2 主要功能主要功能 MFC 的窗口更适合小型游戏的界面 五子棋可以说是再简单 不过的小游戏了 不过其中确包含了大量的函数实现游戏的正常 运转 若要是游戏顺利进行 必须要有程序约束游戏规则 因此本 游戏要解决 棋子所放位置的判断 棋子颜色的区分 以及玩家 的输赢 解决这些问题 玩家便可以进行一场二人大战了 本游戏可以让两个玩家在标准的五子棋盘上进行游戏 最先 连成五子者 游戏可以显示哪一方获胜 最终的结果可以保存入 文件夹 3 设计过程中的经验与教训设计过程中的经验与教训 本次游戏设计 所遇到的阻力比较大 经过多次返工 多次 函数未能定义或实现 整个设计过程所学的东西也很多 以五子 棋游戏为例 首先要知道其基本规则 并设法用不同的函数来解 决规则的限定 设计过程中常常会出现函数已经构造 却未加定 义的情况 做本游戏时 查看了大量资料 在棋盘的画法上有所 纠结 是直接将棋盘背景图直接加入还是调用函数进行棋盘绘制 都是要考虑的 经过多次尝试 不断进行函数的调试和界面图标的设计 最 终完成此次实验 虽然多次返工 虽然有一天从早上做到第二天 凌晨 5 点 但最终的成功 使这些都变成浮云 不断尝试 永不 放弃 最终一定成功 4 自己收获与不足自己收获与不足 此次实验初期 本计划完成一个比较优秀的作品 但最终多 种原因没有达到预期理想的界面 首先谈谈收获 个人认为此次 MFC 课程设计更适合简单游戏的设计 五子棋的界面简单 相对 规则也不多 设计过程中 最大的收获要算程序的扩充 函数的 调试 其实 MFC 已给出框架 所要做的便是填充内容 懂得了以 位图的形式表示棋子 以 cusor 替换当前鼠标 还有鼠标热点的设 置 在BOOL CMainFrame 下构造函数以坐标的形式以改变棋盘大小 同 时构造出一系列画棋盘 判断鼠标 判断输赢等函数 为函数添 加数据成员并使其一一实现 对相应菜单进行属性更改并进行消 息映射 建立响应函数 整个过程都得到了了解及应用 同时 不足也很多 本游戏调用函数进行了棋盘绘制 使得 界面过于简单 由于时间 能力等问题 未能加入人工智能实现 人机对战 而且对于老师所给出的对话框的设计及应用也未能加 入 棋子的位图都是自己绘制 并不十分美观 如果有充足的时 间 我想这些一定会得到完善 5 重要程序清单重要程序清单 构造函数构造函数 两个鼠标 HCURSOR hcursorwhite HCURSOR hcursorblack 棋盘数组 int wzq 19 19 colorwhite TRUE 时白棋下 否则黑棋下 bool colorwhite 棋子位图 CBitmap m bmblack CBitmap m bmwhite 保存文件 void Save 检查是否结束 void over CPoint point 鼠标操作 afx msg void OnLButtonUp UINT nFlags CPoint point 鼠标图形更换 afx msg BOOL OnSetCursor CWnd pWnd UINT nHitTest UINT message 菜单的开始 afx msg void OnStart 菜单的保存 afx msg void OnSave 菜单的打开 afx msg void OnOpen 窗口设计窗口设计 BOOL CMainFrame PreCreateWindow CREATESTRUCT TODO Modify the Window class or styles here by modifying the CREATESTRUCT cs cs dwExStyle cs dwExStyle WS EX TOPMOST cs style WS SYSMENU WS OVERLAPPED WS MINIMIZEBOX 设置窗口大小 400 340 cs cx 450 cs cy 500 return TRUE 棋盘与棋子的绘制棋盘与棋子的绘制 void CMy3 1View OnDraw CDC pDC CMy3 1Doc pDoc GetDocument ASSERT VALID pDoc TODO add draw code for native data here 画背景 CBrush mybrush1 mybrush1 CreateSolidBrush RGB 192 192 192 CRect myrect1 0 0 1200 800 pDC FillRect myrect1 画棋盘框线 CPen mypen CPen myoldPen mypen CreatePen PS SOLID 1 RGB 0 0 0 myoldPen pDC SelectObject for int i 0 iMoveTo 40 40 i 20 pDC LineTo 400 40 i 20 pDC MoveTo 40 i 20 40 pDC LineTo 40 i 20 400 重画时显示存在的棋子 CDC Dc if Dc CreateCompatibleDC pDC FALSE AfxMessageBox Can t create DC for int n 0 n 19 n for int m 0 mBitBlt n 20 32 m 20 32 160 160 else if wzq n m 1 显示黑棋 Dc SelectObject m bmblack pDC BitBlt n 20 32 m 20 32 160 160 设置鼠标 设置鼠标 BOOL CMy3 1View OnSetCursor CWnd pWnd UINT nHitTest UINT message TODO Add your message handler code here and or call default if nHitTest HTCLIENT 白棋下 显示白棋鼠标 if colorwhite 调用主框架里面的状态栏 CMainFrame pFrm CMainFrame AfxGetApp m pMainWnd CStatusBar pStatus if pStatus pStatus GetStatusBarCtrl SetIcon 0 AfxGetApp LoadIcon IDI WHITE pStatus SetPaneText 0 白棋下 SetCursor hcursorwhite 显示黑棋鼠标 else SetCursor hcursorblack CMainFrame pFrm CMainFrame AfxGetApp m pMainWnd CStatusBar pStatus if pStatus 显示图像 pStatus GetStatusBarCtrl SetIcon 0 AfxGetApp LoadIcon IDI BLACK 显示文字 pStatus SetPaneText 0 黑棋下 return 1 return CView OnSetCursor pWnd nHitTest message 判断输赢判断输赢 void CMy3 1View over CPoint point 获取鼠标指向数组位置 即中心位置 int x point x 30 20 int y point y 30 20 计算开始判断的坐标 xx yy int xx yy if x 4 xx 0 else xx x 4 if y 4 yy 0 else yy y 4 int i j a 横向判断 for i xx i 15 i a 0 for j i j i 5 j a a wzq j y 五个都是白棋 if a 5 AfxMessageBox 白棋胜 重新开始 OnStart return 五个都是黑棋 if a 5 AfxMessageBox 黑棋胜 OnStart return 竖向判断 for i yy i 15 i a 0 for j i j i 5 j a a wzq x j if a 5 AfxMessageBox 白棋胜 OnStart return if a 5 AfxMessageBox 黑棋胜 OnStart return 向右下角 判断起点位置 if x y if xx 0 yy y x else if yy 0 xx x y 参数 over 1 时退出循环 int over 0 do a 0 for i 0 i 5 i if xx i 19 yy i 18 x if x 13 yy y 18 x xx 18 else yy y 4 xx x 4 else if y 5 xx x y yy 0 else yy y 4 xx x 4 over 0 do a 0 for i 0 i 0 yy i 19 a a wzq xx i yy i if a 5 AfxMessageBox 白棋胜 OnStart return if a 5 AfxMessageBox 黑棋胜 OnStart return 到了边界 else over 1 xx 1 yy 1 while over 0 文件保存文件保存 void CMy3 1View OnSave TODO Add your command handler code here 设置保存的文件 后缀名 wzq CFileDialog dlg FALSE wzq NULL OFN HIDEREADONLY OFN OVERWRITEPROMPT WZQ wzq All Files this 如果公共类对话框为确定 if dlg DoModal IDOK 获取文件名 dlg GetFileName 否则 退出 else return 字符串变量 CString str int i j CStdioFile file 如果有问题 退出 if file Open dlg GetFileName CFile modeCreate CFile modeWrite CFile typeText 0 AfxMessageBox save error return 循环把棋盘数组的值写进文件 for i 0 i 19 i for j 0 j 19 j if wzq i j 1 file WriteString 1 n if wzq i j 0 file WriteString 0 n if wzq i j 1 file WriteString 1 n 保存当前下棋颜色 if colorwhite true file WriteString 1 n else file WriteString 0 n 关闭文件 file Close 读取文件 读取文件 读文件就是把我们以前保存的文件打开 读取当前打开文件的内容 并给数组赋值使 和文件内容相同 然后可以继续进行游戏 与保存文件相反 void CMy3 1View OnOpen TODO Add your command handler code here CFileDialog dlg TRUE wzq NULL OFN HIDEREADONLY OFN OVERWRITEPROMPT WZQ w zq All Files this if dlg DoModal IDOK dlg GetFileName else return CString str int i j m CStdioFile file if file Open dlg GetFileName CFile modeRead 0 AfxMessag

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论