MFC课程设计扫雷界面游戏.docx
《MFC课程设计扫雷界面游戏.docx》由会员分享,可在线阅读,更多相关《MFC课程设计扫雷界面游戏.docx(48页珍藏版)》请在冰点文库上搜索。
MFC课程设计扫雷界面游戏
Windows程序设计
课程考核报告
班级:
学号:
姓名:
得分:
1.设计目的及要求
1.1设计目的及问题描述
利用VC++程序编写扫雷游戏,以检测自己一个学期对MFC学习的情况,以及了解自己在MFC学习中的不足,巩固和提高自己对MFC的理解和掌握。
掌握C++编程和调试的基本技能,进一步提高自己的动手能力,和运用C++解决实际问题的能力。
本次我做的是一个简单的扫雷的游戏,包括计算雷数、时间和扫雷的规则制定。
1.2设计要求
找出所有的非地雷的地方。
如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。
游戏规则:
首先按右键开始,可以通过界面快捷键(如图笑脸)
,也可以通过菜单重新开始。
接着左键按下的数字周围一圈八格中雷的个数。
当确定小方框里面是一个雷,则用右键按下有一个小旗出现。
当发现此处不是一个雷时,就可以再次按下。
结束时只需要按标题栏的关闭键或菜单中的文件下的退出。
当踩到一个雷时,程序结束。
1.3软件、硬件环境
软件:
Windows7操作系统,MicrosoftVisualC++6.0
硬件:
Inter(R)Core(TM)i3-2330MCPU@2.20GHz
2.课程设计步骤
(1)添加位图
前十二幅是在雷区的,后四幅是按钮。
位图的ID号:
按扭位图:
30*30IDB_ANNIU1、IDB_ANNIU2、IDB_ANNIU3、IDB_ANNIU4
雷区位图:
14*14ID号按下图依次为:
IDB_BITMAP14。
。
IDB_BITMAP25
(2)添加全局变量
public:
intleftnum;//剩下雷数
intleinum;//雷数
intjieshu;//结束
shortsecond;//计时
intsecondstart;//开始计时
CBitmapm_Bitmap[12];
CBitmapm_anniu[4];
intm_RowCount;//行
intm_ColCount;//列
wkhwkh[50][50];//最大雷区
voidleizero();
virtual~CWkhView();
(3)画初始界面
(4)添加函数
1)voidCWkhView:
:
leizero()//扫描,如果是已经被按下且雷数为0,显示它周围的八个格,并重
voidCWkhView:
leizero()
{
for(inti=0;ifor(intj=0;jif(wkh[i][j].shumu==0&&wkh[i][j].weitu==1){for(intn=i-1;nfor(intm=j-1;mif(n>=0&&n<25&&m>=0&&mif(wkh[n][m].shumu!=-1&&wkh[n][m].weitu==0){wkh[n][m].weitu=1;CRectrect;rect.left=n*15+10;rect.right=n*15+25;rect.top=m*15+50;rect.bottom=m*15+65;InvalidateRect(&rect);}}}2)voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint)//鼠标左键按下函数voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault//获取指针pdcCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按下按钮if(point.x>180&&point.x<210&&point.y>10&&point.y<40){Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){if(jieshu==1)return;//显示窗口按钮Dc.SelectObject(m_anniu[1]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);secondstart=1;inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){if(wkh[a][b].shumu==-1){jieshu=1;KillTimer(1);Invalidate();MessageBox("你失败了");}else{wkh[a][b].weitu=1;CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}}}CView::OnLButtonDown(nFlags,point);}3)voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint)//鼠标左键松开voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);if(jieshu==1){Dc.SelectObject(m_anniu[2]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if(point.x>180&&point.x<210&&point.y>10&&point.y<40)OnStart();CView::OnLButtonUp(nFlags,point);} 4)voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint)//鼠标右键按下voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(jieshu==1)return;if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){wkh[a][b].weitu=2;leftnum--;}elseif(wkh[a][b].weitu==2){wkh[a][b].weitu=3;leftnum++;}//重画剩下雷数CRectrect2;rect2.left=20;rect2.right=70;rect2.top=10;rect2.bottom=40;InvalidateRect(&rect2);//重画打击格子CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}CView::OnRButtonDown(nFlags,point);}5)voidCWkhView::OnStart()//计时函数voidCWkhView::OnStart(){SetTimer(1,50,NULL);//TODO:Addyourcommandhandlercodeheresecond=0;//计时secondstart=0;//1时开始计时//num=0;leftnum=leinum;//剩余雷数jieshu=0;//jieshu=1时停止intaa=0;//初始化0for(inti=0;i{for(intj=0;j{wkh[i][j].shumu=0;wkh[i][j].weitu=0;}}//设置40个雷do{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(wkh[k][l].shumu!=-1){wkh[k][l].shumu=-1;aa++;}}while(aa!=leinum);//给方格赋值for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intj=0;jif(wkh[i][j].shumu==0&&wkh[i][j].weitu==1){for(intn=i-1;nfor(intm=j-1;mif(n>=0&&n<25&&m>=0&&mif(wkh[n][m].shumu!=-1&&wkh[n][m].weitu==0){wkh[n][m].weitu=1;CRectrect;rect.left=n*15+10;rect.right=n*15+25;rect.top=m*15+50;rect.bottom=m*15+65;InvalidateRect(&rect);}}}2)voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint)//鼠标左键按下函数voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault//获取指针pdcCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按下按钮if(point.x>180&&point.x<210&&point.y>10&&point.y<40){Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){if(jieshu==1)return;//显示窗口按钮Dc.SelectObject(m_anniu[1]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);secondstart=1;inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){if(wkh[a][b].shumu==-1){jieshu=1;KillTimer(1);Invalidate();MessageBox("你失败了");}else{wkh[a][b].weitu=1;CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}}}CView::OnLButtonDown(nFlags,point);}3)voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint)//鼠标左键松开voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);if(jieshu==1){Dc.SelectObject(m_anniu[2]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if(point.x>180&&point.x<210&&point.y>10&&point.y<40)OnStart();CView::OnLButtonUp(nFlags,point);} 4)voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint)//鼠标右键按下voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(jieshu==1)return;if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){wkh[a][b].weitu=2;leftnum--;}elseif(wkh[a][b].weitu==2){wkh[a][b].weitu=3;leftnum++;}//重画剩下雷数CRectrect2;rect2.left=20;rect2.right=70;rect2.top=10;rect2.bottom=40;InvalidateRect(&rect2);//重画打击格子CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}CView::OnRButtonDown(nFlags,point);}5)voidCWkhView::OnStart()//计时函数voidCWkhView::OnStart(){SetTimer(1,50,NULL);//TODO:Addyourcommandhandlercodeheresecond=0;//计时secondstart=0;//1时开始计时//num=0;leftnum=leinum;//剩余雷数jieshu=0;//jieshu=1时停止intaa=0;//初始化0for(inti=0;i{for(intj=0;j{wkh[i][j].shumu=0;wkh[i][j].weitu=0;}}//设置40个雷do{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(wkh[k][l].shumu!=-1){wkh[k][l].shumu=-1;aa++;}}while(aa!=leinum);//给方格赋值for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
if(wkh[i][j].shumu==0&&wkh[i][j].weitu==1)
for(intn=i-1;n
for(intm=j-1;mif(n>=0&&n<25&&m>=0&&mif(wkh[n][m].shumu!=-1&&wkh[n][m].weitu==0){wkh[n][m].weitu=1;CRectrect;rect.left=n*15+10;rect.right=n*15+25;rect.top=m*15+50;rect.bottom=m*15+65;InvalidateRect(&rect);}}}2)voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint)//鼠标左键按下函数voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault//获取指针pdcCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按下按钮if(point.x>180&&point.x<210&&point.y>10&&point.y<40){Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){if(jieshu==1)return;//显示窗口按钮Dc.SelectObject(m_anniu[1]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);secondstart=1;inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){if(wkh[a][b].shumu==-1){jieshu=1;KillTimer(1);Invalidate();MessageBox("你失败了");}else{wkh[a][b].weitu=1;CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}}}CView::OnLButtonDown(nFlags,point);}3)voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint)//鼠标左键松开voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);if(jieshu==1){Dc.SelectObject(m_anniu[2]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if(point.x>180&&point.x<210&&point.y>10&&point.y<40)OnStart();CView::OnLButtonUp(nFlags,point);} 4)voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint)//鼠标右键按下voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(jieshu==1)return;if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){wkh[a][b].weitu=2;leftnum--;}elseif(wkh[a][b].weitu==2){wkh[a][b].weitu=3;leftnum++;}//重画剩下雷数CRectrect2;rect2.left=20;rect2.right=70;rect2.top=10;rect2.bottom=40;InvalidateRect(&rect2);//重画打击格子CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}CView::OnRButtonDown(nFlags,point);}5)voidCWkhView::OnStart()//计时函数voidCWkhView::OnStart(){SetTimer(1,50,NULL);//TODO:Addyourcommandhandlercodeheresecond=0;//计时secondstart=0;//1时开始计时//num=0;leftnum=leinum;//剩余雷数jieshu=0;//jieshu=1时停止intaa=0;//初始化0for(inti=0;i{for(intj=0;j{wkh[i][j].shumu=0;wkh[i][j].weitu=0;}}//设置40个雷do{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(wkh[k][l].shumu!=-1){wkh[k][l].shumu=-1;aa++;}}while(aa!=leinum);//给方格赋值for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
if(n>=0&&n<25&&m>=0&&mif(wkh[n][m].shumu!=-1&&wkh[n][m].weitu==0){wkh[n][m].weitu=1;CRectrect;rect.left=n*15+10;rect.right=n*15+25;rect.top=m*15+50;rect.bottom=m*15+65;InvalidateRect(&rect);}}}2)voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint)//鼠标左键按下函数voidCWkhView::OnLButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefault//获取指针pdcCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按下按钮if(point.x>180&&point.x<210&&point.y>10&&point.y<40){Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){if(jieshu==1)return;//显示窗口按钮Dc.SelectObject(m_anniu[1]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);secondstart=1;inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){if(wkh[a][b].shumu==-1){jieshu=1;KillTimer(1);Invalidate();MessageBox("你失败了");}else{wkh[a][b].weitu=1;CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}}}CView::OnLButtonDown(nFlags,point);}3)voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint)//鼠标左键松开voidCWkhView::OnLButtonUp(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultCDC*pDC=GetDC();CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);if(jieshu==1){Dc.SelectObject(m_anniu[2]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}if(point.x>180&&point.x<210&&point.y>10&&point.y<40)OnStart();CView::OnLButtonUp(nFlags,point);} 4)voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint)//鼠标右键按下voidCWkhView::OnRButtonDown(UINTnFlags,CPointpoint){//TODO:Addyourmessagehandlercodehereand/orcalldefaultif(jieshu==1)return;if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290)){inta=(point.x-10)/15;intb=(point.y-50)/15;if(wkh[a][b].weitu==0||wkh[a][b].weitu==3){wkh[a][b].weitu=2;leftnum--;}elseif(wkh[a][b].weitu==2){wkh[a][b].weitu=3;leftnum++;}//重画剩下雷数CRectrect2;rect2.left=20;rect2.right=70;rect2.top=10;rect2.bottom=40;InvalidateRect(&rect2);//重画打击格子CRectrect;rect.left=a*15+10;rect.right=a*15+25;rect.top=b*15+50;rect.bottom=b*15+65;InvalidateRect(&rect);}CView::OnRButtonDown(nFlags,point);}5)voidCWkhView::OnStart()//计时函数voidCWkhView::OnStart(){SetTimer(1,50,NULL);//TODO:Addyourcommandhandlercodeheresecond=0;//计时secondstart=0;//1时开始计时//num=0;leftnum=leinum;//剩余雷数jieshu=0;//jieshu=1时停止intaa=0;//初始化0for(inti=0;i{for(intj=0;j{wkh[i][j].shumu=0;wkh[i][j].weitu=0;}}//设置40个雷do{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(wkh[k][l].shumu!=-1){wkh[k][l].shumu=-1;aa++;}}while(aa!=leinum);//给方格赋值for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
if(wkh[n][m].shumu!
=-1&&wkh[n][m].weitu==0)
wkh[n][m].weitu=1;
CRectrect;
rect.left=n*15+10;
rect.right=n*15+25;
rect.top=m*15+50;
rect.bottom=m*15+65;
InvalidateRect(&rect);
}
2)voidCWkhView:
OnLButtonDown(UINTnFlags,CPointpoint)//鼠标左键按下函数
OnLButtonDown(UINTnFlags,CPointpoint)
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
//获取指针pdc
CDC*pDC=GetDC();
CDCDc;
if(Dc.CreateCompatibleDC(pDC)==FALSE)
AfxMessageBox("Can'tcreateDC");
//显示按下按钮
if(point.x>180&&point.x<210&&point.y>10&&point.y<40)
Dc.SelectObject(m_anniu[3]);
pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);
if((point.x>=10)&&(point.x<=385)&&(point.y>=50)&&(point.y<=290))
if(jieshu==1)
return;
//显示窗口按钮
Dc.SelectObject(m_anniu[1]);
secondstart=1;
inta=(point.x-10)/15;
intb=(point.y-50)/15;
if(wkh[a][b].weitu==0||wkh[a][b].weitu==3)
if(wkh[a][b].shumu==-1)
jieshu=1;
KillTimer
(1);
Invalidate();
MessageBox("你失败了");
else
wkh[a][b].weitu=1;
rect.left=a*15+10;
rect.right=a*15+25;
rect.top=b*15+50;
rect.bottom=b*15+65;
CView:
OnLButtonDown(nFlags,point);
3)voidCWkhView:
OnLButtonUp(UINTnFlags,CPointpoint)//鼠标左键松开
OnLButtonUp(UINTnFlags,CPointpoint)
//显示按钮
Dc.SelectObject(m_anniu[0]);
Dc.SelectObject(m_anniu[2]);
OnStart();
OnLButtonUp(nFlags,point);
4)voidCWkhView:
OnRButtonDown(UINTnFlags,CPointpoint)//鼠标右键按下
OnRButtonDown(UINTnFlags,CPointpoint)
wkh[a][b].weitu=2;
leftnum--;
if(wkh[a][b].weitu==2)
wkh[a][b].weitu=3;
leftnum++;
//重画剩下雷数
CRectrect2;
rect2.left=20;
rect2.right=70;
rect2.top=10;
rect2.bottom=40;
InvalidateRect(&rect2);
//重画打击格子
OnRButtonDown(nFlags,point);
5)voidCWkhView:
OnStart()//计时函数
OnStart()
SetTimer(1,50,NULL);
Addyourcommandhandlercodehere
second=0;//计时
secondstart=0;//1时开始计时
//num=0;
leftnum=leinum;//剩余雷数
jieshu=0;//jieshu=1时停止
intaa=0;
//初始化0
for(inti=0;i{for(intj=0;j{wkh[i][j].shumu=0;wkh[i][j].weitu=0;}}//设置40个雷do{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(wkh[k][l].shumu!=-1){wkh[k][l].shumu=-1;aa++;}}while(aa!=leinum);//给方格赋值for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intj=0;j{wkh[i][j].shumu=0;wkh[i][j].weitu=0;}}//设置40个雷do{intk=rand()%m_RowCount;intl=rand()%m_ColCount;if(wkh[k][l].shumu!=-1){wkh[k][l].shumu=-1;aa++;}}while(aa!=leinum);//给方格赋值for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
wkh[i][j].shumu=0;
wkh[i][j].weitu=0;
//设置40个雷
do
intk=rand()%m_RowCount;
intl=rand()%m_ColCount;
if(wkh[k][l].shumu!
=-1)
wkh[k][l].shumu=-1;
aa++;
}while(aa!
=leinum);
//给方格赋值
for(inta=0;afor(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intb=0;bif(wkh[a][b].shumu==0){for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
if(wkh[a][b].shumu==0)
for(intc=a-1;cfor(intd=b-1;dif(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intd=b-1;d
if(c>=0&&c=0&&dif(wkh[c][d].shumu==-1)wkh[a][b].shumu++;}Invalidate();}6)voidCWkhView::OnTimer(UINTnIDEvent)//结束游戏函数voidCWkhView::OnTimer(UINTnIDEvent){//TODO:Addyourmessagehandlercodehereand/orcalldefault//结束,返回if(jieshu==1)return;//显示个数为0的方格leizero();//计时if(secondstart>0)secondstart++;if(secondstart==20){secondstart=1;second++;//重画时间CRectrect3;rect3.left=325;rect3.right=375;rect3.top=10;rect3.bottom=40;InvalidateRect(&rect3);}CView::OnTimer(nIDEvent);}7)voidCWkhView::OnDraw(CDC*pDC)//框架设置voidCWkhView::OnDraw(CDC*pDC){CWkhDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);//TODO:adddrawcodefornativedatahere//画背景CBrushmybrush1;mybrush1.CreateSolidBrush(RGB(192,192,192));CRectmyrect1(0,0,1200,800);pDC->FillRect(myrect1,&mybrush1);//画黑框CBrushmybrush;mybrush.CreateSolidBrush(RGB(0,0,0));CRectmyrect(20,10,70,40);pDC->FillRect(myrect,&mybrush);CRectmyrect2(325,10,375,40);pDC->FillRect(myrect2,&mybrush);CPenmypen;CPen*myoldPen;mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));myoldPen=pDC->SelectObject(&mypen);//画黑框的白线pDC->MoveTo(20,40);pDC->LineTo(70,40);pDC->LineTo(70,10);pDC->MoveTo(325,40);pDC->LineTo(375,40);pDC->LineTo(375,10);//画雷区边线for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
if(wkh[c][d].shumu==-1)
wkh[a][b].shumu++;
6)voidCWkhView:
OnTimer(UINTnIDEvent)//结束游戏函数
OnTimer(UINTnIDEvent)
//结束,返回
//显示个数为0的方格
leizero();
//计时
if(secondstart>0)
secondstart++;
if(secondstart==20)
second++;
//重画时间
CRectrect3;
rect3.left=325;
rect3.right=375;
rect3.top=10;
rect3.bottom=40;
InvalidateRect(&rect3);
OnTimer(nIDEvent);
7)voidCWkhView:
OnDraw(CDC*pDC)//框架设置
OnDraw(CDC*pDC)
CWkhDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
adddrawcodefornativedatahere
//画背景
CBrushmybrush1;
mybrush1.CreateSolidBrush(RGB(192,192,192));
CRectmyrect1(0,0,1200,800);
pDC->FillRect(myrect1,&mybrush1);
//画黑框
CBrushmybrush;
mybrush.CreateSolidBrush(RGB(0,0,0));
CRectmyrect(20,10,70,40);
pDC->FillRect(myrect,&mybrush);
CRectmyrect2(325,10,375,40);
pDC->FillRect(myrect2,&mybrush);
CPenmypen;
CPen*myoldPen;
mypen.CreatePen(PS_SOLID,2,RGB(255,255,255));
myoldPen=pDC->SelectObject(&mypen);
//画黑框的白线
pDC->MoveTo(20,40);
pDC->LineTo(70,40);
pDC->LineTo(70,10);
pDC->MoveTo(325,40);
pDC->LineTo(375,40);
pDC->LineTo(375,10);
//画雷区边线
for(inti=0;ifor(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intj=0;j{pDC->MoveTo(10+i*15,50+j*15+14);pDC->LineTo(10+i*15,50+j*15);pDC->LineTo(10+i*15+14,50+j*15);}pDC->SelectObject(myoldPen);CPenmypen2;CPen*myoldPen2;mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));myoldPen2=pDC->SelectObject(&mypen2);for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
pDC->MoveTo(10+i*15,50+j*15+14);
pDC->LineTo(10+i*15,50+j*15);
pDC->LineTo(10+i*15+14,50+j*15);
pDC->SelectObject(myoldPen);
CPenmypen2;
CPen*myoldPen2;
mypen2.CreatePen(PS_SOLID,1,RGB(0,0,0));
myoldPen2=pDC->SelectObject(&mypen2);
for(intii=0;iifor(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intjj=0;jj{pDC->MoveTo(10+ii*15,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15+14);pDC->LineTo(10+ii*15+14,50+jj*15);}pDC->SelectObject(myoldPen2);CDCDc;if(Dc.CreateCompatibleDC(pDC)==FALSE)AfxMessageBox("Can'tcreateDC");//显示按钮Dc.SelectObject(m_anniu[0]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);//判断显示什么位图//weitu=1已按下的数字区//weitu=2显示旗//weitu=3显示问号for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
pDC->MoveTo(10+ii*15,50+jj*15+14);
pDC->LineTo(10+ii*15+14,50+jj*15+14);
pDC->LineTo(10+ii*15+14,50+jj*15);
pDC->SelectObject(myoldPen2);
//判断显示什么位图
//weitu=1已按下的数字区
//weitu=2显示旗
//weitu=3显示问号
for(inta=0;afor(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
for(intb=0;b{if(wkh[a][b].weitu==1){Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==2){Dc.SelectObject(m_Bitmap[9]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}if(wkh[a][b].weitu==3){Dc.SelectObject(m_Bitmap[10]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);}//结束if(jieshu==1&&wkh[a][b].shumu==-1){Dc.SelectObject(m_Bitmap[11]);pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);Dc.SelectObject(m_anniu[3]);pDC->BitBlt(180,10,160,160,&Dc,0,0,SRCCOPY);}}//显示黑框里的数字intnOldDC=pDC->SaveDC();pDC->SetTextColor(RGB(255,0,0));pDC->SetBkColor(RGB(0,0,0));CFontfont;if(0==font.CreatePointFont(160,"ComicSansMS")){AfxMessageBox("Can'tCreateFont");}pDC->SelectObject(&font);CStringstr;if(leftnum<10)str.Format("00%d",leftnum);elsestr.Format("0%d",leftnum);pDC->TextOut(25,10,str);if(second<10)str.Format("00%d",second);elseif(second<100)str.Format("0%d",second);elsestr.Format("%d",second);pDC->TextOut(330,10,str);pDC->RestoreDC(nOldDC);//////////////////////////////////////////////} (5)菜单修改3.课程设计内容3.1概要设计游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。3.1.1程序总体框架描述 3.1.2程序常用类声明定义新类:对于雷,我们是单独定义一个类,这样有利于程序的操作。classwkh{public://显示哪一个位图intweitu;//这个位置相应的值intshumu;};视图类变量:接着是在View类添加变量和函数://剩下雷数intleftnum;//雷数intleinum;//结束intjieshu;//计时shortsecond;//开始计时intsecondstart;//位图数组CBitmapm_Bitmap[12];//按扭位图数组CBitmapm_anniu[4];//雷区行数intm_RowCount;//雷区列数intm_ColCount;//最大雷区wkhlei[50][50];3.2主要技术1.图形的设置2.消息处理函数;3.视图框架设置;4.扫雷游戏算法。5.菜单的设置。 3.3系统设计结果(界面截图、操作流程)1.界面截图:操作流程图 4.设计总结4.1遇到的问题及如何解决随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
if(wkh[a][b].weitu==1)
Dc.SelectObject(m_Bitmap[wkh[a][b].shumu]);
pDC->BitBlt(a*15+10,b*15+50,160,160,&Dc,0,0,SRCCOPY);
Dc.SelectObject(m_Bitmap[9]);
if(wkh[a][b].weitu==3)
Dc.SelectObject(m_Bitmap[10]);
//结束
if(jieshu==1&&wkh[a][b].shumu==-1)
Dc.SelectObject(m_Bitmap[11]);
//显示黑框里的数字
intnOldDC=pDC->SaveDC();
pDC->SetTextColor(RGB(255,0,0));
pDC->SetBkColor(RGB(0,0,0));
CFontfont;
if(0==font.CreatePointFont(160,"ComicSansMS"))
AfxMessageBox("Can'tCreateFont");
pDC->SelectObject(&font);
CStringstr;
if(leftnum<10)
str.Format("00%d",leftnum);
str.Format("0%d",leftnum);
pDC->TextOut(25,10,str);
if(second<10)
str.Format("00%d",second);
elseif(second<100)
str.Format("0%d",second);
str.Format("%d",second);
pDC->TextOut(330,10,str);
pDC->RestoreDC(nOldDC);
//////////////////////////////////////////////
(5)菜单修改
3.课程设计内容
3.1概要设计
游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以未标示→标示→疑似三者关系不断循环。
游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“1”,则表示以其为中心的周边方块内藏有1个地雷。
当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。
3.1.1程序总体框架描述
3.1.2程序常用类声明
定义新类:
对于雷,我们是单独定义一个类,这样有利于程序的操作。
classwkh
//显示哪一个位图
intweitu;
//这个位置相应的值
intshumu;
};
视图类变量:
接着是在View类添加变量和函数:
//剩下雷数
intleftnum;
//雷数
intleinum;
intjieshu;
shortsecond;
//开始计时
intsecondstart;
//位图数组
//按扭位图数组
//雷区行数
intm_RowCount;
//雷区列数
intm_ColCount;
//最大雷区
wkhlei[50][50];
3.2主要技术
1.图形的设置
2.消息处理函数;
3.视图框架设置;
4.扫雷游戏算法。
5.菜单的设置。
3.3系统设计结果(界面截图、操作流程)
1.界面截图:
操作流程图
4.设计总结
4.1遇到的问题及如何解决
随着扫雷游戏的开发完成,本游戏中预期的主要功能也基本实现。
本系统以VisualC++6.0作为前台开发工具,VisualC++6.0以简单、易用等优点成为开发本系统的首选工具。
本论文阐述了扫雷游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。
扫雷游戏是一款益智类游戏,该游戏与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。
这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。
由于我学习VisualC++6.0和MFC的时间比较短,其中的很多知识还没有了解和掌握,当然出现了很多错误,
在设计过程中出现鼠标不响应操作的现象,这是因为定义鼠标函数时出现了错误;
在设计过程中对位图的设置不够了解,总是不能调用位图,通过XX,才知道缺少了一部分代码;
对于分号、引号的符号出现了不少的错误,主要是中英文切换时没注意,导致编译出错;
完成程序之后,对程序进行编译,系统总是提示链接出错,经过仔细检查
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2