时间:2021-05-19
MFC简介:
MFC(MicrosoftFoundationClasses)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数。 MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但是由于是通用框架,没有最好的针对性,当然也就丧失了一些灵活性和效率。但是MFC的封装很浅,所以效率上损失不大。
开始正文
简述
在学习了C++ MFC编程后,就萌生了编写一个五子棋程序的想法。诚然,用C#来编写的话可能界面会好很多,但是我的主要目标不在界面而是算法,所以利用了VS的MFC来编写程序。
程序特点
程序实现
完整代码可访问我的github: https://github.com/Vaczzy/SimpleGobang
step1:在VS中创建一个MFC对话框程序工程。
(创建好后可以直接将我提供的源码复制到工程中即可运行,如遇问题可以下方留言)
step2:新建一个名为CMainGobang的类,在类中编写主要代码
下面给出了MainGobang.h头文件中的全部代码:
在MainGobang.cpp文件中添加函数实现
限于文章篇幅,这里只给出了绘制棋盘的函数实现以供参考,其他函数实现可访问:https://github.com/Vaczzy/SimpleGobang中MyGobang_DHK文件夹中MainGobang.cpp文件
CMainGobang::CMainGobang(void){}CMainGobang::~CMainGobang(void){ if(pPieces!=NULL) { delete []pPieces; pPieces=NULL; } if(pmyRectangle!=NULL) { delete []pmyRectangle; pmyRectangle=NULL; }}//绘制棋盘函数//后期可添加棋盘大小参数//控件坐标void CMainGobang::DrawMainTable(CDC *pDC,CRect rect,int iTableSize){ iSize=iTableSize; //先覆盖背景 CRect Back; Back.top=rect.top+1; Back.bottom=rect.bottom-1; Back.left=rect.left+1; Back.right=rect.right-1; pDC->FillSolidRect(&Back,RGB(240,240,240));//填充 //计算每格长度 idx=(((rect.right-rect.left)/(iTableSize+1))>((rect.bottom-rect.top)/(iTableSize+1)))? (rect.bottom-rect.top)/(iTableSize+1): (rect.right-rect.left)/(iTableSize+1); CBrush brush(RGB(0,0,0)); CBrush *OldBrush=pDC->SelectObject(&brush); int ixp,iyp;//棋盘星坐标 //绘制天元 ixp=(rect.right-rect.left)/2; iyp=(rect.bottom-rect.top)/2; pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3); //绘制星 ixp-=4*idx; iyp-=4*idx;//左上角 pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3); iyp+=8*idx;//左下角 pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3); ixp+=8*idx;//右下角 pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3); iyp-=8*idx;//右上角 pDC->Ellipse(ixp-3,iyp-3,ixp+3,iyp+3); pDC->SelectObject(OldBrush);//恢复设备环境中原来的画笔 brush.DeleteObject();//释放绘图资源 //计算棋盘大小并放置于窗口中间 ymin=(rect.bottom-rect.top)/2-(iTableSize-1)/2*idx; ymax=ymin+(iTableSize-1)*idx; xmin=(rect.right-rect.left)/2-(iTableSize-1)/2*idx; xmax=xmin+(iTableSize-1)*idx; for(int x=xmin;x<=xmax;x+=idx) { pDC->MoveTo(x,ymin); pDC->LineTo(x,ymax); } for(int y=ymin;y<=ymax;y+=idx) { pDC->MoveTo(xmin,y); pDC->LineTo(xmax,y); }}step3:在xxxx(xxxx为你创建的工程名)Dlg.cpp中编写与界面有关的代码
这一步主要是编写一些与界面有关的代码
本程序的位置反馈主要添加在OnMouseMove函数中,如下:
限于文章篇幅,文件所有代码可访问:https://github.com/Vaczzy/SimpleGobang 中 MyGobang_DHK文件夹中MyGobang_DHKDlg.cpp文件
//鼠标移动函数void CMyGobang_DHKDlg::OnMouseMove(UINT nFlags, CPoint point){ // TODO: 在此添加消息处理程序代码和/或调用默认值 CPoint pt; CRect rect; GetDlgItem(IDC_MainTable)->GetWindowRect(&rect);//获取控件屏幕坐标 GetCursorPos(&pt);//获取鼠标点击坐标(屏幕坐标坐标) pt.x-=rect.left;//转化为控件中坐标 pt.y-=rect.top; CDC *pDC=picMain.GetDC();//获取该控件的画布 if(bIsReady) { gobang.DrawRectangle(pDC,pt); } CDialogEx::OnMouseMove(nFlags, point);}程序界面
打开程序
棋局进行中
棋局结束
最后,如果你对这个程序的算法有任何改进意见可以到我的github地址:https://github.com/Vaczzy/SimpleGobang对代码进行修改和优化。在这个地址中,你将在README.md看到对这个程序更详细的描述,我还在其中贴上了我的邮箱地址,如有任何问题,你可以通过这个地址联系我 :)
总结
以上所述是小编给大家介绍的使用C++ MFC编写一个简单的五子棋游戏程序,希望对大家有所帮助,也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
三子棋、五子棋之类的游戏,非常简单,对于初学者来说是一个不错的练手的小项目,以前用C语言写过三子棋游戏。最近在看C++,所以就想到在三子棋的基础上利用C++语言
本文实例介绍了Android下用SDL2实现一个简单的五子棋游戏,分享给大家供大家参考,具体内容如下1.Five.c//Five.c//SDL2五子棋//gcc
控制台实现五子棋游戏,供大家参考,具体内容如下控制台打印棋盘编写两人对弈的五子棋游戏,游戏规则:黑白双方有一方首先实现五子连续,则获胜,游戏结束。代码:impo
最近学了点kotlin的相关知识,顺手写了一个简单的五子棋单机游戏,分享给大家吧!有兴趣的可以看看五子棋界面packagewjc.kotlintestimpor
本文实例讲述了Android开发实现的简单五子棋游戏。分享给大家供大家参考,具体如下:我刚刚在Android上写的一个五子棋的小程序,在这里跟大家分享一下。写完