1、同时构造出一系列画棋盘,判断鼠标,判断输赢等函数。为函数添加数据成员并使其一一实现。对相应菜单进行属性更改并进行消息映射,建立响应函数。整个过程都得到了了解及应用。同时,缺乏也很多,本游戏调用函数进行了棋盘绘制,使得界面过于简单。由于时间,能力等问题,未能参加人工智能实现人机对战。而且对于老师所给出的对话框的设计及应用也未能参加。棋子的位图都是自己绘制,并不十分美观。如果有充足的时间,我想这些一定会得到完善。5. 重要程序清单构造函数/两个鼠标 HCURSOR hcursorwhite; HCURSOR hcursorblack; /棋盘数组 int wzq1919; / colorwhite
2、 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(); /菜单的保
3、存 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 cs cs.dwExStyle=cs.dwExStyle|WS_EX_TOPMOST; / cs.style=WS_SYSM
4、ENU|WS_OVERLAPPED|WS_MINIMIZEBOX;/; /设置窗口大小:400*340 cs.cx=450; cs.cy=500; return TRUE;棋盘与棋子的绘制void CMy3_1View:OnDraw(CDC* pDC) CMy3_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); add draw code for native data here /画背景 CBrush mybrush1; mybrush1.CreateSolidBrush(RGB(192,192,192); CRect myrect1(0,0,1
5、200,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;i19;i+) MoveTo(40,40+i*20);LineTo(400,40+i*20);MoveTo(40+i*20,40);LineTo(40+i*20,400); /重画时显示存在的棋子 CDC Dc; if(Dc.CreateCompatibleDC(pDC)=
6、FALSE) AfxMessageBox(Cant create DC); for(int n=0;nn+) 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); 设置鼠标:BOOL CMy3_1View:OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) Add your message handler code here and/or call default if
7、(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
8、(hcursorblack); /显示图像LoadIcon(IDI_BLACK); /显示文字黑棋下 return 1; return CView:OnSetCursor(pWnd, nHitTest, message);判断输赢over(CPoint point) /获取鼠标指向数组位置,即中心位置 int x=(point.x-30)/20; int y=(point.y-30)/20; /计算开始判断的坐标 xx,yy int xx,yy; if(x4) xx=0; else xx=x-4; if(y yy=0; yy=y-4; int i,j,a; /横向判断 for(i=xx;15;
9、 a=0; for(j=i;ji+5;j+) a=a+wzqjy; /五个都是白棋 if(a=5) AfxMessageBox(白棋胜! /重新开始 OnStart();return; /五个都是黑棋 if(a=-5)黑棋胜! /竖向判断 for(i=yy; a=a+wzqxj; /向右下角 /判断起点位置y) if(xx=0) yy=y-x; if(yy=0) xx=x-y; /参数over=1时退出循环 int over=0; do for(i=0;5; if(xx+i)19|(yy+i)(18-x) if(x13) yy=y-(18-x); xx=18; yy=y-4; xx=x+4;
10、if(y=0|(yy+i) a=a+wzqxx-iyy+i; xx-=1;文件保存OnSave() Add your command handler code here /设置保存的文件,后缀名wzq CFileDialog dlg(FALSE,wzq,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,(*.WZQ)|*.wzq|All Files|*.*|,this); /如果公共类对话框为确定 if(dlg.DoModal()=IDOK) /获取文件名 dlg.GetFileName(); /否那么,退出 return; /字符串变量 CString st
11、r; int i,j; CStdioFile file; /如果有问题,退出 if(file.Open(dlg.GetFileName(),CFile:modeCreate|CFile:modeWrite|CFile:typeText)=0)save error! /循环把棋盘数组的值写进文件 for(i=0; for(j=0; if(wzqij=-1) file.WriteString(-1n if(wzqij=0)0n if(wzqij=1)1n /保存当前下棋颜色 if(colorwhite=true) file.WriteString( /关闭文件 file.Close();读取文件:
12、读文件就是把我们以前保存的文件翻开,读取当前翻开文件的内容,并给数组赋值使和文件内容相同,然后可以继续进行游戏。/与保存文件相反OnOpen() CFileDialog dlg(TRUE, int i,j,m; CStdioFile file;modeRead)=0) CArchive ar(&file,CArchive:load); 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, if(m=1) colorwhite=true; colorwhite=false; file.Close(); ar.Close(); Invalidate(false);6. 窗口截图
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1