最新MFC设计五子棋完全代码Word下载.docx

上传人:b****6 文档编号:19409131 上传时间:2023-01-06 格式:DOCX 页数:19 大小:335.61KB
下载 相关 举报
最新MFC设计五子棋完全代码Word下载.docx_第1页
第1页 / 共19页
最新MFC设计五子棋完全代码Word下载.docx_第2页
第2页 / 共19页
最新MFC设计五子棋完全代码Word下载.docx_第3页
第3页 / 共19页
最新MFC设计五子棋完全代码Word下载.docx_第4页
第4页 / 共19页
最新MFC设计五子棋完全代码Word下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

最新MFC设计五子棋完全代码Word下载.docx

《最新MFC设计五子棋完全代码Word下载.docx》由会员分享,可在线阅读,更多相关《最新MFC设计五子棋完全代码Word下载.docx(19页珍藏版)》请在冰豆网上搜索。

最新MFC设计五子棋完全代码Word下载.docx

同时构造出一系列画棋盘,判断鼠标,判断输赢等函数。

为函数添加数据成员并使其一一实现。

对相应菜单进行属性更改并进行消息映射,建立响应函数。

整个过程都得到了了解及应用。

同时,缺乏也很多,本游戏调用函数进行了棋盘绘制,使得界面过于简单。

由于时间,能力等问题,未能参加人工智能实现人机对战。

而且对于老师所给出的对话框的设计及应用也未能参加。

棋子的位图都是自己绘制,并不十分美观。

如果有充足的时间,我想这些一定会得到完善。

5.重要程序清单

构造函数

//两个鼠标

HCURSORhcursorwhite;

HCURSORhcursorblack;

//棋盘数组

intwzq[19][19];

//colorwhiteTRUE时白棋下,否那么黑棋下

boolcolorwhite;

//棋子位图

CBitmapm_bmblack;

CBitmapm_bmwhite;

//保存文件

voidSave();

//检查是否结束

voidover(CPointpoint);

//鼠标操作

afx_msgvoidOnLButtonUp(UINTnFlags,CPointpoint);

//鼠标图形更换

afx_msgBOOLOnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage);

//菜单的开始

afx_msgvoidOnStart();

//菜单的保存

afx_msgvoidOnSave();

//菜单的翻开

afx_msgvoidOnOpen();

窗口设计

BOOLCMainFrame:

:

PreCreateWindow(CREATESTRUCT&

cs)

{

if(!

CFrameWnd:

PreCreateWindow(cs))

returnFALSE;

//TODO:

ModifytheWindowclassorstylesherebymodifying

//theCREATESTRUCTcs

cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST;

//

cs.style=WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX;

//;

//设置窗口大小:

400*340

cs.cx=450;

cs.cy=500;

returnTRUE;

棋盘与棋子的绘制

voidCMy3_1View:

OnDraw(CDC*pDC)

CMy3_1Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

adddrawcodefornativedatahere

//画背景

CBrushmybrush1;

mybrush1.CreateSolidBrush(RGB(192,192,192));

CRectmyrect1(0,0,1200,800);

pDC->

FillRect(myrect1,&

mybrush1);

//画棋盘框线

CPenmypen;

CPen*myoldPen;

mypen.CreatePen(PS_SOLID,1,RGB(0,0,0));

myoldPen=pDC->

SelectObject(&

mypen);

for(inti=0;

i<

19;

i++)

{

MoveTo(40,40+i*20);

LineTo(400,40+i*20);

MoveTo(40+i*20,40);

LineTo(40+i*20,400);

}

//重画时显示存在的棋子

CDCDc;

if(Dc.CreateCompatibleDC(pDC)==FALSE)

AfxMessageBox("

Can'

tcreateDC"

);

for(intn=0;

n<

n++)

for(intm=0;

m<

m++)

if(wzq[n][m]==1)

{

//显示白棋

Dc.SelectObject(m_bmwhite);

pDC->

BitBlt(n*20+32,m*20+32,160,160,&

Dc,0,0,SRCCOPY);

}

elseif(wzq[n][m]==-1)

{

//显示黑棋

Dc.SelectObject(m_bmblack);

}

}

设置鼠标:

BOOLCMy3_1View:

OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage)

Addyourmessagehandlercodehereand/orcalldefault

if(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));

SetPaneText(0,"

白棋下"

SetCursor(hcursorwhite);

}

//显示黑棋鼠标

else

SetCursor(hcursorblack);

//显示图像

LoadIcon(IDI_BLACK));

//显示文字

黑棋下"

return1;

returnCView:

OnSetCursor(pWnd,nHitTest,message);

判断输赢

over(CPointpoint)

//获取鼠标指向数组位置,即中心位置

intx=(point.x-30)/20;

inty=(point.y-30)/20;

//计算开始判断的坐标xx,yy

intxx,yy;

if(x<

4)

xx=0;

else

xx=x-4;

if(y<

yy=0;

yy=y-4;

inti,j,a;

//横向判断

for(i=xx;

15;

{

a=0;

for(j=i;

j<

i+5;

j++)

a=a+wzq[j][y];

//五个都是白棋

if(a==5)

AfxMessageBox("

白棋胜!

"

//重新开始

OnStart();

return;

//五个都是黑棋

if(a==-5)

黑棋胜!

//竖向判断

for(i=yy;

a=a+wzq[x][j];

//向右下角

//判断起点位置

y)

if(xx==0)

yy=y-x;

if(yy==0)

xx=x-y;

//参数over=1时退出循环

intover=0;

do

for(i=0;

5;

if((xx+i)<

19||(yy+i)<

19)

a=a+wzq[xx+i][yy+i];

//到了边界

else

over=1;

xx+=1;

yy+=1;

}while(over==0);

//向左下角

if(y>

(18-x))

if(x>

13)

yy=y-(18-x);

xx=18;

yy=y-4;

xx=x+4;

if(y<

5)

xx=x+y;

yy=0;

over=0;

if((xx-i)>

=0||(yy+i)<

{

a=a+wzq[xx-i][yy+i];

xx-=1;

文件保存

OnSave()

Addyourcommandhandlercodehere

//设置保存的文件,后缀名wzq

CFileDialogdlg(FALSE,"

wzq"

NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"

(*.WZQ)|*.wzq|AllFiles|*.*||"

this);

//如果公共类对话框为确定

if(dlg.DoModal()==IDOK)

//获取文件名

dlg.GetFileName();

//否那么,退出

return;

//字符串变量

CStringstr;

inti,j;

CStdioFilefile;

//如果有问题,退出

if(file.Open(dlg.GetFileName(),CFile:

modeCreate|CFile:

modeWrite|CFile:

typeText)==0)

saveerror!

//循环把棋盘数组的值写进文件

for(i=0;

for(j=0;

if(wzq[i][j]==-1)

file.WriteString("

-1\n"

if(wzq[i][j]==0)

0\n"

if(wzq[i][j]==1)

1\n"

//保存当前下棋颜色

if(colorwhite==true)

file.WriteString("

//关闭文件

file.Close();

读取文件:

读文件就是把我们以前保存的文件翻开,读取当前翻开文件的内容,并给数组赋值使和文件内容相同,然后可以继续进行游戏。

//与保存文件相反

OnOpen()

CFileDialogdlg(TRUE,"

inti,j,m;

CStdioFilefile;

modeRead)==0)

CArchivear(&

file,CArchive:

load);

ar.ReadString(str);

sscanf(str,"

%d"

&

m);

if(m==-1)

wzq[i][j]=-1;

if(m==0)

wzq[i][j]=0;

if(m==1)

wzq[i][j]=1;

ar.ReadString(str);

sscanf(str,"

if(m==1)

colorwhite=true;

colorwhite=false;

file.Close();

ar.Close();

Invalidate(false);

6.窗口截图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1