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

📄 wzqpcgo.cpp

📁 一个基于对话框的五子棋游戏,支持人机对战.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		else
			AfxMessageBox("DownBaizhi()函数有错误!");
	}
	else
	{
		if(QiPan[y][x].Qizhi==0)
		{
			QiPan[y][x].Qizhi=2;
			dc->BitBlt(x*29+7,y*29+7,28,28,mask,0,0,MERGEPAINT);
			dc->BitBlt(x*29+7,y*29+7,28,28,qzb,0,0,SRCAND);
		}
		else
			AfxMessageBox("DownBaizhi()函数有错误!");
	}
}


void WzqPcGo::Downheizhi(int x,int y)//电脑下黑子
{
	if(Model==2)
	{
		if(flag)
		{
			flag=FALSE;
			if(QiPan[x][y].Qizhi==0)
			{
				QiPan[x][y].Qizhi=1;
				dc->BitBlt(y*29+7,x*29+7,28,28,mask,0,0,MERGEPAINT);
				dc->BitBlt(y*29+7,x*29+7,28,28,qzh,0,0,SRCAND);
			}
			else
				AfxMessageBox("Downheizhi()函数有错误!");
		}
		else
		{
			if(QiPan[y][x].Qizhi==0)
			{
				QiPan[y][x].Qizhi=1;
				dc->BitBlt(x*29+7,y*29+7,28,28,mask,0,0,MERGEPAINT);
				dc->BitBlt(x*29+7,y*29+7,28,28,qzh,0,0,SRCAND);
			}
			else
				AfxMessageBox("Downheizhi()函数有错误!");
		}
	}
	else if(QiPan[x][y].Qizhi==0)
	{
		QiPan[x][y].Qizhi=1;
		dc->BitBlt(y*29+7,x*29+7,28,28,mask,0,0,MERGEPAINT);
		dc->BitBlt(y*29+7,x*29+7,28,28,qzh,0,0,SRCAND);
	}
	else
		AfxMessageBox("Downheizhi()函数有错误!");

}


BOOL WzqPcGo::WhoWin(int x,int y)
{
	int count=0;
	int winflag=0;
	if(QiPan[x][y].Qizhi==2)
	{
		for(int left=y-1;count!=4;left--)
		{
			if(y==0)
				break;
			else if(left==-1)
				break;
			else if(QiPan[x][left].Qizhi==0 || QiPan[x][left].Qizhi==1)
				break;
			else
			{
				QiPan[x][left].color=1;
				winflag++;
			}
		}
		count=0;
		for(int right=y+1;count!=4;right++)
		{
			if(y==14)
				break;
			else if(right==15)
				break;
			else if(QiPan[x][right].Qizhi==0 || QiPan[x][right].Qizhi==1)
				break;
			else
			{
				QiPan[x][right].color=1;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=1;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
//-----------------------------------------------------------------------
		for(int up=x-1;count!=4;up--)
		{
			if(x==0)
				break;
			else if(up==-1)
				break;
			else if(QiPan[up][y].Qizhi==0 || QiPan[up][y].Qizhi==1)
				break;
			else
			{
				QiPan[up][y].color=2;
				winflag++;
			}
		}
		count=0;
		for(int down=x+1;count!=4;down++)
		{
			if(x==14)
				break;
			else if(down==15)
				break;
			else if(QiPan[down][y].Qizhi==0 ||QiPan[down][y].Qizhi==1)
				break;
			else
			{
				QiPan[down][y].color=2;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=2;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
		for(int xleftup=x-1,yleftup=y-1;count!=4;xleftup--,yleftup--)
		{
			if(x==0 || y==0)
				break;
			else if(xleftup==-1 || yleftup==-1)
				break;
			else if(QiPan[xleftup][yleftup].Qizhi==0 || QiPan[xleftup][yleftup].Qizhi==1)
				break;
			else
			{
				QiPan[xleftup][yleftup].color=3;
				winflag++;
			}
		}
		count=0;
		for(int xrightdown=x+1,yrightdown=y+1;count!=4;xrightdown++,yrightdown++)
		{
			if(x==14 || y==14)
				break;
			else if(xrightdown==15 || yrightdown==15)
				break;
			else if(QiPan[xrightdown][yrightdown].Qizhi==0 || QiPan[xrightdown][yrightdown].Qizhi==1)
				break;
			else
			{
				QiPan[xrightdown][yrightdown].color=3;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=3;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
//-----------------------------------------------------------------------
		for(int xrightup=x-1,yrightup=y+1;count!=4;xrightup--,yrightup++)
		{
			if(x==0 || y==14)
				break;
			else if(xrightup==-1 || yrightup==15)
				break;
			else if(QiPan[xrightup][yrightup].Qizhi==0 || QiPan[xrightup][yrightup].Qizhi==1)
				break;
			else
			{
				QiPan[xrightup][yrightup].color=4;
				winflag++;
			}
		}
		count=0;
		for(int xleftdown=x+1,yleftudown=y-1;count!=4;xleftdown++,yleftudown--)
		{
			if(x==14 || y==0)
				break;
			else if(xleftdown==15 || yleftudown==-1)
				break;
			else if(QiPan[xleftdown][yleftudown].Qizhi==0 || QiPan[xleftdown][yleftudown].Qizhi==1)
				break;
			else
			{
				QiPan[xleftdown][yleftudown].color=4;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=4;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
		for(int i=0;i<=14;i++)
			for(int j=0;j<=14;j++)
				QiPan[i][j].color=0;
	}
//================================================================================
//================================================================================
	else if(QiPan[x][y].Qizhi==1)
	{
		for(int left=y-1;count!=4;left--)
		{
			if(y==0)
				break;
			else if(left==-1)
				break;
			else if(QiPan[x][left].Qizhi==0 || QiPan[x][left].Qizhi==2)
				break;
			else
			{
				QiPan[x][left].color=1;
				winflag++;
			}
		}
		count=0;
		for(int right=y+1;count!=4;right++)
		{
			if(y==14)
				break;
			else if(right==15)
				break;
			else if(QiPan[x][right].Qizhi==0 || QiPan[x][right].Qizhi==2)
				break;
			else
			{
				QiPan[x][right].color=1;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=1;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
//-----------------------------------------------------------------------
		for(int up=x-1;count!=4;up--)
		{
			if(x==0)
				break;
			else if(up==-1)
				break;
			else if(QiPan[up][y].Qizhi==0 || QiPan[up][y].Qizhi==2)
				break;
			else
			{
				QiPan[up][y].color=2;
				winflag++;
			}
		}
		count=0;
		for(int down=x+1;count!=4;down++)
		{
			if(x==14)
				break;
			else if(down==15)
				break;
			else if(QiPan[down][y].Qizhi==0 || QiPan[down][y].Qizhi==2)
				break;
			else
			{
				QiPan[down][y].color=2;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=2;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
		for(int xleftup=x-1,yleftup=y-1;count!=4;xleftup--,yleftup--)
		{
			if(x==0 || y==0)
				break;
			else if(xleftup==-1 || yleftup==-1)
				break;
			else if(QiPan[xleftup][yleftup].Qizhi==0 || QiPan[xleftup][yleftup].Qizhi==2)
				break;
			else
			{
				QiPan[xleftup][yleftup].color=3;
				winflag++;
			}
		}
		count=0;
		for(int xrightdown=x+1,yrightdown=y+1;count!=4;xrightdown++,yrightdown++)
		{
			if(x==14 || y==14)
				break;
			else if(xrightdown==15 ||yrightdown==15)
				break;
			else if(QiPan[xrightdown][yrightdown].Qizhi==0 || QiPan[xrightdown][yrightdown].Qizhi==2)
				break;
			else
			{
				QiPan[xrightdown][yrightdown].color=3;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=3;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
//-----------------------------------------------------------------------
		for(int xrightup=x-1,yrightup=y+1;count!=4;xrightup--,yrightup++)
		{
			if(x==0 || y==14)
				break;
			else if(xrightup==-1 || yrightup==15)
				break;
			else if(QiPan[xrightup][yrightup].Qizhi==0 || QiPan[xrightup][yrightup].Qizhi==2)
				break;
			else
			{
				QiPan[xrightup][yrightup].color=4;
				winflag++;
			}
		}
		count=0;
		for(int xleftdown=x+1,yleftudown=y-1;count!=4;xleftdown++,yleftudown--)
		{
			if(x==14 || y==0)
				break;
			else if(xleftdown==15 || yleftudown==-1)
				break;
			else if(QiPan[xleftdown][yleftudown].Qizhi==0 || QiPan[xleftdown][yleftudown].Qizhi==2)
				break;
			else
			{
				QiPan[xleftdown][yleftudown].color=4;
				winflag++;
			}
		}
		if(winflag>=4)
		{
			QiPan[x][y].color=4;
			return TRUE;
		}
		else 
			winflag=0;
		count=0;
		for(int i=0;i<=14;i++)
			for(int j=0;j<=14;j++)
				QiPan[i][j].color=0;
	}
	else 
		AfxMessageBox("WhoWin(int x,int y)函数错误!");
	return FALSE;
}


void WzqPcGo::DrawAgain()
{
	int hen=0,shu=0,zxie=0,yxie=0;
	int flag;
	CSize xk=qp->GetSize();
	dc->BitBlt(0, 0,xk.cx,xk.cy,qp,0,0,SRCCOPY);//画棋盘	
	for(int i=0;i<=14;i++)
		for(int j=0;j<=14;j++)
		{
			flag=QiPan[i][j].color;
			switch(flag)
			{
			case 1:hen++;break;
			case 2:shu++;break;
			case 3:zxie++;break;
			case 4:yxie++;break;
			}
			if(QiPan[i][j].Qizhi==1)
			{
				dc->BitBlt(j*29+7,i*29+7,28,28,mask,0,0,MERGEPAINT);
				dc->BitBlt(j*29+7,i*29+7,28,28,qzh,0,0,SRCAND);
			}
			else if(QiPan[i][j].Qizhi==2)
			{
				dc->BitBlt(j*29+7,i*29+7,28,28,mask,0,0,MERGEPAINT);
				dc->BitBlt(j*29+7,i*29+7,28,28,qzb,0,0,SRCAND);
			}
		}
	if(hen>=5)
		flag=1;
	else if(shu>=5)
		flag=2;
	else if(zxie>=5)
		flag=3;
	else if(yxie>=5)
		flag=4;
	else
		return;
	for(int x=0;x<=14;x++)
		for(int y=0;y<=14;y++)
		{
			if(QiPan[x][y].color==flag)
			{
				dc->BitBlt(y*29+7,x*29+7,28,28,mask,0,0,MERGEPAINT);
				dc->BitBlt(y*29+7,x*29+7,28,28,dead,0,0,SRCAND);				
			}
		}
}



void WzqPcGo::BuildHuiQi(int x,int y)
{
/*	AfxMessageBox("rrrrrrrrrrrr");*/
	HuiQi *ps=new HuiQi;
	HuiQi *pd;
	if(head==NULL)
	{	
		ps->x=x;
		ps->y=y;
		head=ps;
		head->next=NULL;
	}
	else
	{
		ps->x=x;
		ps->y=y;
		pd=head;
		head=ps;
		head->next=pd;
	}
}

void WzqPcGo::HuiQiGo()
{
/*	AfxMessageBox("qqqqqqqqqqqqqqqqqq");*/
	if(head==NULL)
	{
		AfxMessageBox("没有棋悔");
	}
	else
	{
		QiPan[head->x][head->y].Qizhi=0;
		QiPan[head->x][head->y].color=0;
		QiPan[head->x][head->y].YouxianPerson=0;
		QiPan[head->x][head->y].YouxianPc=0;
		QiPan[head->x][head->y].YouxiantPerson=0;
		QiPan[head->x][head->y].YouxiantPc=0;		
		stophand=FALSE;
		head=head->next;
	}
}



BOOL WzqPcGo::YuChe(YuCheQi *yc)
{
/*	AfxMessageBox("88888888888888888");*/
	if(yuchegoflag)
	{
		BuildHuiQi(yc->x,yc->y);
		QiPan[yc->x][yc->y].Qizhi=2;
		if(WhoWin(yc->x,yc->y))
		{
			HuiQiGo();
			return TRUE;
		}
		
	}
	else
	{
		BuildHuiQi(yc->x,yc->y);
		QiPan[yc->x][yc->y].Qizhi=1;
		yuchegoflag=TRUE;
		if(WhoWin(yc->x,yc->y))
		{
			HuiQiGo();
			return TRUE;
		}
	}
	for(int i=0;i<15;i++)//预测20步
	{
		PcThink();
		if(!yuchegoflag)
		{
			yuchegoflag=TRUE;
			if(yuchewinflag)
			{
		/*	AfxMessageBox("vvvvvvvvvv");*/
				yuchewinflag=FALSE;
				for(int j=0;j<=i+1;j++)
					HuiQiGo();
				return TRUE;
			}
		}
		else
		{
			yuchegoflag=FALSE;
			if(yuchedangerflag)
			{
	/*			AfxMessageBox("3333333333333");*/
				yuchedangerflag=FALSE;
				for(int j=0;j<=i+1;j++)
					HuiQiGo();
				return FALSE;
			}
		}
	}

	for(int j=0;j<=i;j++)
		HuiQiGo();
	return FALSE;
}



void WzqPcGo::GetyucheMax()
{
	int max=0;
	int xd,yd;
	for(int i=0;i<=14;i++)
	{
		for(int j=0;j<=14;j++)
		{
			if(QiPan[i][j].Qizhi==0)
			{
				for(int k=0;k<4;k++)
				{
					BestGo[i][j]+=PersonBestGo[i][j][k]+PcBestGo[i][j][k];
				}
				if(BestGo[i][j]>=max)
				{
					max=BestGo[i][j];
					xd=i;
					yd=j;
				}
			}
		}
	}
    if(yuchegoflag)
	{
		BuildHuiQi(xd,yd);
		QiPan[xd][yd].Qizhi=2;
	}
	else
	{
		BuildHuiQi(xd,yd);
		QiPan[xd][yd].Qizhi=1;
	}
}

⌨️ 快捷键说明

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