基于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算法的实现。

原创粉丝点击