MFC设计五子棋完全代码.doc

上传人:小** 文档编号:3007810 上传时间:2020-06-21 格式:DOC 页数:15 大小:354.52KB
返回 下载 相关 举报
MFC设计五子棋完全代码.doc_第1页
第1页 / 共15页
MFC设计五子棋完全代码.doc_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《MFC设计五子棋完全代码.doc》由会员分享,可在线阅读,更多相关《MFC设计五子棋完全代码.doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-/MFC程序设计MFC制作五子棋目录:1. 目的与要求.2. 主要功能.3. 设计过程中的经验与教训.4. 自己收获与不足.5. 重要程序清单.6. 窗口截图.1.目的与要求利用已有的C+基础,结合对MFC的学习,进行窗口化设计。由于MFC提供了MFCppWizard自动生成框架。使得简单的编程更加简单,界面简洁。这次用MFC设计了一个简单的五子棋游戏。可以进行简单的双人对战。目的在于更加熟悉MFC的使用来完成游戏的制作。再此期间,搜集大量信息,以及函数的源代码。不断进行整合,进行函数构造。2主要功能MFC的窗口更适合小型游戏的界面。五子棋可以说是再简单不过的小游戏了,不过其中确包含了大量的

2、函数实现游戏的正常运转。若要是游戏顺利进行,必须要有程序约束游戏规则。因此本游戏要解决,棋子所放位置的判断,棋子颜色的区分,以及玩家的输赢。解决这些问题,玩家便可以进行一场二人大战了。本游戏可以让两个玩家在标准的五子棋盘上进行游戏,最先连成五子者,游戏可以显示哪一方获胜。最终的结果可以保存入文件夹。3. 设计过程中的经验与教训本次游戏设计,所遇到的阻力比较大。经过多次返工。多次函数未能定义或实现。整个设计过程所学的东西也很多。以五子棋游戏为例。首先要知道其基本规则,并设法用不同的函数来解决规则的限定。设计过程中常常会出现函数已经构造,却未加定义的情况。做本游戏时,查看了大量资料。在棋盘的画法上

3、有所纠结。是直接将棋盘背景图直接加入还是调用函数进行棋盘绘制都是要考虑的。经过多次尝试,不断进行函数的调试和界面图标的设计。最终完成此次实验。虽然多次返工,虽然有一天从早上做到第二天凌晨5点,但最终的成功,使这些都变成浮云。不断尝试,永不放弃,最终一定成功。4. 自己收获与不足此次实验初期,本计划完成一个比较优秀的作品,但最终多种原因没有达到预期理想的界面。首先谈谈收获,个人认为此次MFC课程设计更适合简单游戏的设计。五子棋的界面简单,相对规则也不多。设计过程中,最大的收获要算程序的扩充,函数的调试。其实MFC已给出框架,所要做的便是填充内容。懂得了以位图的形式表示棋子,以cusor替换当前鼠

4、标。还有鼠标热点的设置。在BOOL CMainFrame下构造函数以坐标的形式以改变棋盘大小。同时构造出一系列画棋盘,判断鼠标,判断输赢等函数。为函数添加数据成员并使其一一实现。对相应菜单进行属性更改并进行消息映射,建立响应函数。整个过程都得到了了解及应用。同时,不足也很多,本游戏调用函数进行了棋盘绘制,使得界面过于简单。由于时间,能力等问题,未能加入人工智能实现人机对战。而且对于老师所给出的对话框的设计及应用也未能加入。棋子的位图都是自己绘制,并不十分美观。如果有充足的时间,我想这些一定会得到完善。5. 重要程序清单构造函数/两个鼠标 HCURSOR hcursorwhite;HCURSOR

5、 hcursorblack; /棋盘数组int wzq1919; / 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);/菜单的

6、开始afx_msg void OnStart();/菜单的保存afx_msg void OnSave();/菜单的打开afx_msg void OnOpen();窗口设计BOOL CMainFrame:PreCreateWindow(CREATESTRUCT& cs)if( !CFrameWnd:PreCreateWindow(cs) )return FALSE;/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT cscs.dwExStyle=cs.dwExStyle|WS_EX_TOPMO

7、ST;/cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;/; /设置窗口大小:400*340cs.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

8、); CRect myrect1(0,0,1200,800); pDC-FillRect(myrect1,&mybrush1);/画棋盘框线CPen mypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,1,RGB(0,0,0); myoldPen=pDC-SelectObject(&mypen); 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.Cre

9、ateCompatibleDC(pDC)=FALSE) AfxMessageBox(Cant create DC);for(int n=0;n19;n+)for(int m=0;mBitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);else if(wzqnm=-1)/显示黑棋Dc.SelectObject(m_bmblack);pDC-BitBlt(n*20+32,m*20+32,160,160,&Dc,0,0,SRCCOPY);设置鼠标:BOOL CMy3_1View:OnSetCursor(CWnd* pWnd, UINT nHitTest, U

10、INT message) / TODO: Add your message handler code here and/or call defaultif(nHitTest=HTCLIENT)/白棋下,显示白棋鼠标if(colorwhite) /调用主框架里面的状态栏CMainFrame*pFrm=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStatusBar*pStatus=&pFrm-m_wndStatusBar;if(pStatus)pStatus-GetStatusBarCtrl().SetIcon(0,AfxGetApp()-LoadIcon(IDI_W

11、HITE);pStatus-SetPaneText(0,白棋下);SetCursor(hcursorwhite);/显示黑棋鼠标elseSetCursor(hcursorblack);CMainFrame*pFrm=(CMainFrame*)AfxGetApp()-m_pMainWnd;CStatusBar*pStatus=&pFrm-m_wndStatusBar;if(pStatus)/显示图像pStatus-GetStatusBarCtrl().SetIcon(0,AfxGetApp()-LoadIcon(IDI_BLACK);/显示文字pStatus-SetPaneText(0,黑棋下)

12、;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,yyint xx,yy; if(x4)xx=0;elsexx=x-4;if(y4)yy=0;elseyy=y-4;int i,j,a;/横向判断for(i=xx;i15;i+) a=0;for(j=i;ji+5;j+)a=a+wzqjy;/五个都是白棋

13、if(a=5)AfxMessageBox(白棋胜!);/重新开始OnStart();return;/五个都是黑棋if(a=-5)AfxMessageBox(黑棋胜!);OnStart();return;/竖向判断for(i=yy;i15;i+) a=0;for(j=i;ji+5;j+)a=a+wzqxj; if(a=5)AfxMessageBox(白棋胜!);OnStart();return;if(a=-5)AfxMessageBox(黑棋胜!);OnStart();return;/向右下角/判断起点位置if(xy)if(xx=0)yy=y-x;elseif(yy=0)xx=x-y;/参数ov

14、er=1时退出循环int over=0;doa=0;for(i=0;i5;i+)if(xx+i)19|(yy+i)(18-x)if(x13)yy=y-(18-x);xx=18;elseyy=y-4;xx=x+4;elseif(y5)xx=x+y;yy=0;elseyy=y-4;xx=x+4; over=0;doa=0;for(i=0;i=0|(yy+i)19)a=a+wzqxx-iyy+i;if(a=5)AfxMessageBox(白棋胜!);OnStart();return;if(a=-5)AfxMessageBox(黑棋胜!);OnStart();return;/到了边界elseover=

15、1; xx-=1;yy+=1;while(over=0); 文件保存void CMy3_1View:OnSave() / TODO: Add your command handler code here/设置保存的文件,后缀名wzqCFileDialog dlg(FALSE,wzq,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(*.WZQ)|*.wzq|All Files|*.*|,this);/如果公共类对话框为确定if(dlg.DoModal()=IDOK) /获取文件名dlg.GetFileName();/否则,退出elsereturn;/字符串变

16、量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;i19;i+)for(j=0;j19;j+)if(wzqij=-1)file.WriteString(-1n);if(wzqij=0)file.WriteString(0n);if(wzqij=1)file.WriteString

17、(1n);/保存当前下棋颜色if(colorwhite=true)file.WriteString(1n);elsefile.WriteString(0n);/关闭文件 file.Close();读取文件:读文件就是把我们以前保存的文件打开,读取当前打开文件的内容,并给数组赋值使和文件内容相同,然后可以继续进行游戏。/与保存文件相反void CMy3_1View:OnOpen() / TODO: Add your command handler code hereCFileDialog dlg(TRUE,wzq,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT

18、,(*.WZQ)|*.wzq|All Files|*.*|,this);if(dlg.DoModal()=IDOK) dlg.GetFileName();elsereturn;CString str;int i,j,m;CStdioFile file;if(file.Open(dlg.GetFileName(),CFile:modeRead)=0)AfxMessageBox(save error!);return;CArchive ar(&file,CArchive:load);for(i=0;i19;i+)for(j=0;j19;j+)ar.ReadString(str);sscanf(str,%d,&m);if(m=-1)wzqij=-1;if(m=0)wzqij=0;if(m=1)wzqij=1;ar.ReadString(str);sscanf(str,%d,&m);if(m=1)colorwhite=true;elsecolorwhite=false;file.Close();ar.Close();Invalidate(false);6. 窗口截图

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁