基于MFC的五子棋应用(三)
来源:互联网 发布:淘宝客厅装饰物 编辑:程序博客网 时间:2024/05/16 13:47
基于MFC的五子棋应用(三)
本篇主要是悔棋功能,保存和载入棋谱的实现
悔棋功能
实现起来相对比较简单,这里针对的是只能悔一步棋,若想悔多步则要应用到栈,在此不多阐述,毕竟这是个简单的五子棋应用。 代码如下:
//悔棋void CWuZiQiView::Regret(){ if(Regretpoint==0) { if(vscomputer==2) { if(colorwhite) { wzq[bprex][bprey]=0; colorwhite=false; } else { wzq[wprex][wprey]=0; colorwhite=true; } } else { wzq[bprex][bprey]=0; wzq[wprex][wprey]=0; colorwhite=true; } Regretpoint=1; } else { AfxMessageBox("Can't regret anymore!"); } Invalidate();}
在第一篇中定义的用于晦气功能的坐标
分别用来记录黑白棋的上一次坐标位置以及当前悔棋总次数。
文件的保存:
这也是一项比较基础的内容,直接贴代码,不懂得可以留言
void CWuZiQiView::OnSave(){ CFileDialog dlg(FALSE,"wzq",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WZQ)|*.wzq|All Files|*.*||",this); //如果公共类对话框为确定 if(dlg.DoModal()==IDOK) //获取文件名 dlg.GetFileName(); //否则,退出 else return; //字符串变量 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;i<19;i++) for(j=0;j<19;j++) { if(wzq[i][j]==-1) file.WriteString("-1\n"); if(wzq[i][j]==0) file.WriteString("0\n"); if(wzq[i][j]==1) file.WriteString("1\n"); } //保存当前下棋颜色 if(colorwhite==true) file.WriteString("1\n"); else file.WriteString("0\n"); //关闭文件 file.Close();}
文件的读取:
只是把OnSave()反了一下,也直接贴代码:
void CWuZiQiView::OnOpen(){ CFileDialog dlg(TRUE,"wzq",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.WZQ)|*.wzq|All Files|*.*||",this); if(dlg.DoModal()==IDOK) dlg.GetFileName(); else return; CString str; int i,j,m; CStdioFile file; if(file.Open(dlg.GetFileName(),CFile::modeRead)==0) { AfxMessageBox("save error!"); return; } CArchive ar(&file,CArchive::load); for(i=0;i<19;i++) for(j=0;j<19;j++) { 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,"%d",&m); if(m==1) colorwhite=true; else colorwhite=false; file.Close(); ar.Close(); Invalidate(false);}
以上就是悔棋功能,保存和读取文件的相关代码操作,请多多指正
下一篇将着重介绍AI算法的实现。
阅读全文
0 0
- 基于MFC的五子棋应用(三)
- 基于MFC的五子棋应用(一)
- 基于MFC的五子棋应用(二)
- 基于MFC的五子棋应用(四)理论
- 基于MFC的五子棋应用(四)实践
- [MFC] 入门级demo:基于MFC的五子棋程序
- 基于opencv与MFC实现的双人五子棋
- C++五子棋的实现(MFC)
- 基于MFC五子棋学习第一天
- 基于Ajax的五子棋演示
- 基于java的五子棋小游戏
- 基于HTML5的五子棋游戏
- 基于html5的五子棋游戏
- 基于html5的五子棋游戏
- 基于HTML5的五子棋游戏
- Hbulider创建项目做基于html5的五子棋游戏(编写五子棋简单版二)
- MFC五子棋
- 用C++写的五子棋代码(基于DOS界面)
- ImportError: No module named cv2 报错处理
- 最长递增子序列个数
- angular入门2
- odbccp32.lib(dllload.obj) : error LNK2019: __imp___vsnprintf,该符号在函数 _StringVPrintfWorkerA@20 中被引用
- hdu2087(剪花布条) KMP算法
- 基于MFC的五子棋应用(三)
- 面向对象中的类和接口的理解
- 36. Valid Sudoku
- vue2.0 中事件处理心得
- Saruman's Army
- angular入门3
- 开发软件下载资源
- angular入门4
- BZOJ 5043: 密码破译 dp