⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 人机对战五子棋trydoc.cpp

📁 这个是一个简单但界面相当美观的人机对战五子棋系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 人机对战五子棋tryDoc.cpp : implementation of the CTryDoc class
//

#include "stdafx.h"
#include "人机对战五子棋try.h"

#include "人机对战五子棋tryDoc.h"
#include <math.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTryDoc

IMPLEMENT_DYNCREATE(CTryDoc, CDocument)

BEGIN_MESSAGE_MAP(CTryDoc, CDocument)
	//{{AFX_MSG_MAP(CTryDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/////////////////////////////////////////////////////////////////////////////
// CTryDoc construction/destruction

CTryDoc::CTryDoc()
{
	// TODO: add one-time construction code here
    ResetData();
}

CTryDoc::~CTryDoc()
{
}

BOOL CTryDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CTryDoc serialization

void CTryDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CTryDoc diagnostics

#ifdef _DEBUG
void CTryDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CTryDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTryDoc commands

int CTryDoc::GetCondition(int i, int j)
{
    return condition[i][j];
}

void CTryDoc::SetCondition(int i, int j, int value)
{
    condition[i][j]=value;
}

CPoint CTryDoc::ComputerThink2()
{
    CPoint point;
	int max1=0,max2=0,max_x,max_y;
	int sco1_nesw[15][15];
    int sco1_ns[15][15];
    int sco1_nwse[15][15];
    int sco1_we[15][15];
    int sco2_nesw[15][15];
    int sco2_ns[15][15];
    int sco2_nwse[15][15];
    int sco2_we[15][15];
	int i,j,m,n,k1,k2;
	for(i=0;i<15;i++)
		for(j=0;j<15;j++)
		{
			sco1_nesw[i][j]=0;
            sco1_ns[i][j]=0;
            sco1_nwse[i][j]=0;
            sco1_we[i][j]=0;
			sco2_nesw[i][j]=0;
            sco2_ns[i][j]=0;
            sco2_nwse[i][j]=0;
            sco2_we[i][j]=0;
			sco_nesw[i][j]=0;
			sco_ns[i][j]=0;
			sco_nwse[i][j]=0;
			sco_we[i][j]=0;
			sco[i][j]=0;
			direction1[i][j]=0;
			direction2[i][j]=0;
			direction[i][j]=0;	
		}
	for(i=0;i<15;i++)
		for(j=0;j<15;j++)
		{
///////////////////////////////////////////nwse////////////////////////////////////			
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //se-defend
			{
				for(m=i+1,n=j+1,k1=0;m<=i+5&&m<15&&n<15&&condition[m][n]==PEOPLE;m++,n++,k1++)
				{
					sco1_nwse[i][j]+=5;
					direction1[i][j]++;
				}
				while(m<15&&n<15&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
						sco1_nwse[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					m++;
					n++;
				}
			}
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //nw-defend
		    {
				for(m=i-1,n=j-1,k2=0;m>=i-5&&m>=0&&n>=0&&condition[m][n]==PEOPLE;m--,n--,k2++)
				{
					
					    sco1_nwse[i][j]+=5;
						direction1[i][j]++;
				}
				while(m>=0&&n>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded=FALSE)
					{
					    sco1_nwse[i][j]+=2;
						isadded=TRUE;
					}
					k2++;
					m--;
					n--;
				}
			}
			if(k1+k2<4) sco1_nwse[i][j]=0;
	
		
		    isadded=FALSE;
			if(condition[i][j]==EMPTY)      //se-attack
			{
				for(m=i+1,n=j+1,k1=0;m<=i+5&&m<15&&n<15&&condition[m][n]==COMPUTER;m++,n++,k1++)
				{
					sco2_nwse[i][j]+=5;
					direction2[i][j]++;
				}
				while(m<15&&n<15&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
						sco2_nwse[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					m++;
					n++;
				}
				
			}

			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //nw-attack
		    {
				for(m=i-1,n=j-1,k2=0;m>=i-5&&m>=0&&n>=0&&condition[m][n]==COMPUTER;m--,n--,k2++)
				{
					
					    sco2_nwse[i][j]+=5;
						direction2[i][j]++;
				}
				while(m>=0&&n>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded=FALSE)
					{
					    sco2_nwse[i][j]+=2;
						isadded=TRUE;
					}
					k2++;
					m--;
					n--;
				}
			
			}
			if(k1+k2<4) sco2_nwse[i][j]=0;
			sco_nwse[i][j]=maxx(sco1_nwse[i][j],sco2_nwse[i][j]);
			
////////////////////////////////////ns/////////////////////////////////////////////
		    
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //s-defend
			{
				for(m=i+1,n=j,k1=0;m<=i+5&&m<15&&condition[m][n]==PEOPLE;m++,k1++)
				{
					sco1_ns[i][j]+=5;
					direction1[i][j]++;
                }
				while(m<15&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
						sco1_ns[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					m++;
				}
			}
			
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //n-defend
		    {
				for(m=i-1,n=j,k2=0;m>=i-5&&m>=0&&condition[m][n]==PEOPLE;m--,k2++)
				{
					sco1_ns[i][j]+=5;
					direction1[i][j]++;
                }
				while(m>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					    sco1_ns[i][j]+=2;
						isadded=TRUE;
					}
					k2++;
					m--;
				}
			}
			if(k1+k2<4) sco1_ns[i][j]=0;
	
		
		    isadded=FALSE;
			if(condition[i][j]==EMPTY)      //s-attack
			{
				for(m=i+1,n=j,k1=0;m<=i+5&&m<15&&condition[m][n]==COMPUTER;m++,k1++)
				{
					sco2_ns[i][j]+=5;
					direction2[i][j]++;
                }
				while(m<15&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
						sco2_ns[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					m++;
				}
			}

			isadded=FALSE;	
			if(condition[i][j]==EMPTY)      //n-attack
		    {
				for(m=i-1,n=j,k2=0;m>=i-5&&m>=0&&condition[m][n]==COMPUTER;m--,k2++)
				{
					sco2_ns[i][j]+=5;
					direction2[i][j]++;
                }
				while(m>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					    sco2_ns[i][j]+=2;
						isadded=TRUE;
					}
					k2++;
					m--;
				}
			}
			if(k1+k2<4) sco2_ns[i][j]=0;
			sco_ns[i][j]=maxx(sco1_ns[i][j],sco2_ns[i][j]);
//////////////////////////////////////we//////////////////////////////////////////
			
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //e-defend
			{
				for(m=i,n=j+1,k1=0;n<=j+5&&n<15&&condition[m][n]==PEOPLE;n++,k1++)
				{
					    sco1_we[i][j]+=5;
						direction1[i][j]++;
                }
				while(n<15&&condition[m][n]==EMPTY)
				{
					if(isadded==FALSE)
					{
					    sco1_we[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					n++;
				}
			}
			if(condition[i][j]==EMPTY)      //w-defend
		    {
				for(m=i,n=j-1,k2=0;n>=j-5&&n>=0&&condition[m][n]==PEOPLE;n--,k2++)
				{
					    sco1_we[i][j]+=5;
						direction1[i][j]++;
                }
				while(n>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					    sco1_we[i][j]+=2;
						isadded=TRUE;
					}
					k2++;
					n--;
				}
			}
			if(k1+k2<4) sco1_we[i][j]=0;
	
		
		    isadded=FALSE;
			if(condition[i][j]==EMPTY)      //e-attack
			{
				for(m=i,n=j+1,k1=0;n<=j+5&&n<15&&condition[m][n]==COMPUTER;n++,k1++)
				{
					    sco2_we[i][j]+=5;
						direction2[i][j]++;
                }
				while(n<15&&condition[m][n]==EMPTY)
				{
					if(isadded==FALSE)
					{
					    sco2_we[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					n++;
				}
			}
			
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //w-attack
		    {
			    for(m=i,n=j-1,k2=0;n>=j-5&&n>=0&&condition[m][n]==COMPUTER;n--,k2++)
				{
					    sco2_we[i][j]+=5;
						direction2[i][j]++;
                }
				while(n>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					    sco2_we[i][j]+=2;
						isadded=TRUE;
					}
					k2++;
					n--;
				}	
			}
			if(k1+k2<4) sco2_we[i][j]=0;
			sco_we[i][j]=maxx(sco1_we[i][j],sco2_we[i][j]);
//////////////////////////////////nesw////////////////////////////////////////////
            isadded=FALSE;
			if(condition[i][j]==EMPTY)      //sw-defend
			{
				for(m=i+1,n=j-1,k1=0;n>=j-5&&m<15&&n>=0&&condition[m][n]==PEOPLE;m++,n--,k1++)
				{
					    sco1_nesw[i][j]+=5;
						direction1[i][j]++;
                }
				while(m<15&&n>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					    sco1_nesw[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					m++;
					n--;
				}
			}
			
			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //ne-defend
		    {
				for(m=i-1,n=j+1,k2=0;n<=j+4&&m>=0&&n<15&&condition[m][n]==PEOPLE;m--,n++,k2++)
				{
				    sco1_nesw[i][j]+=5;
					direction1[i][j]++;
                }
				while(m>=0&&n<15&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					     sco1_nesw[i][j]+=2;
						 isadded=TRUE;
					}
					k2++;
					m--;
					n++;
				}
			}
			if(k1+k2<4) sco1_nesw[i][j]=0;
	
		
		    isadded=FALSE;
			if(condition[i][j]==EMPTY)      //sw-attack
			{
				for(m=i+1,n=j-1,k1=0;n>=j-5&&m<15&&n>=0&&condition[m][n]==COMPUTER;m++,n--,k1++)
				{
					    sco2_nesw[i][j]+=5;
						direction2[i][j]++;
                }
				while(m<15&&n>=0&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					    sco2_nesw[i][j]+=2;
						isadded=TRUE;
					}
					k1++;
					m++;
					n--;
				}
			}

			isadded=FALSE;
			if(condition[i][j]==EMPTY)      //ne-attack
		    {
				for(m=i-1,n=j+1,k2=0;n<=j+4&&m>=0&&n<15&&condition[m][n]==COMPUTER;m--,n++,k2++)
				{
				    sco2_nesw[i][j]+=5;
					direction2[i][j]++;
                }
				while(m>=0&&n<15&&condition[m][n]==EMPTY)
				{
				    if(isadded==FALSE)
					{
					     sco2_nesw[i][j]+=2;
						 isadded=TRUE;
					}
					k2++;
					m--;
					n++;
				}
			}
			if(k1+k2<4) sco2_nesw[i][j]=0;
			sco_nesw[i][j]=maxx(sco1_nesw[i][j],sco2_nesw[i][j]);

			sco[i][j]=maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j]);
			if(this->maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j])>max1)
			{
		     max1=this->maxx(sco_nesw[i][j],sco_ns[i][j],sco_nwse[i][j],sco_we[i][j]);
			}
			
			direction[i][j]=maxx(direction1[i][j],direction2[i][j]);
			
		}
		for(i=0;i<15;i++)
			for(j=0;j<15;j++)
			{
				if(sco[i][j]==max1&&direction[i][j]>max2)
				{
               		max_x=i;
					max_y=j;
			    }
			}
		point.x=max_x;
	    point.y=max_y;
    	number++;        //记录电脑走的步数
		return point;
}

	
/*
CPoint CTryDoc::ComputerThink1()
{
    CPoint point;
	int max1=0,max1_x,max1_y;
	int sco1_nesw[15][15];
    int sco1_ns[15][15];
    int sco1_nwse[15][15];
    int sco1_we[15][15];
    int sco2_nesw[15][15];
    int sco2_ns[15][15];
    int sco2_nwse[15][15];
    int sco2_we[15][15];
	int i,j,m,n,count,k1,k2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -