




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MFC程序设计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 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);/菜单的开始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_TOPMOST;/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); 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.CreateCompatibleDC(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, UINT 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_WHITE);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,黑棋下);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;/五个都是白棋 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;/参数over=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=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;/字符串变量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(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,(*.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!);retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- CPU利用率提升-洞察及研究
- 餐厅员工的入职合同6篇
- 金属材料冶炼技术发展与文化传承的协同发展-洞察及研究
- 期末测试(基础卷)-2025-2026学年译林版(三起)英语六年级上册(含答案含听力原文无听力音频)
- 教育咨询策划服务方案
- 手托臀上楼图文课件
- 手工覆膜安全培训课件
- 学生托管班饮食安全培训课件
- 注册木土工程师岩土专业知识题库备考题库及答案
- 所有者权益的课件
- 苏教版一年级数学上册月考测试卷(一)(范围:游戏分享至第一单元)(含答案)
- 2025至2030中国电镀工业园区行业发展趋势分析与未来投资战略咨询研究报告
- 2025-2026学年度武汉市部分学校高三年级九月调研考试 英语试卷(含答案)
- 2025秋大象版(2024)小学科学三年级上册《测量风向》教学设计
- 建筑装修工程质量监督管理制度
- 不锈钢栏杆施工全流程方案
- 国企人力资源岗笔试模拟试题及参考答案
- 遵守规则课件-2025-2026学年统编版道德与法治八年级上册
- 全科医学(副高)高级职称考试题库及答案
- 2025年社区工作者招聘考试(公共基础知识)试题及答案
- 河北省琢名小渔名校联考2025-2026学年高三上学期开学调研检测英语试题(含答案)
评论
0/150
提交评论