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

📄 tzq.cpp

📁 vc++所写的跳棋程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	}
	
	return hRgn;
}
CTzq::Chess(TzqDate *pTF)
{
	
	for(int i1=0;i1<6;i1++)
		ChessOdd(pTF,i1);
}


void CTzq::ChessOdd(TzqDate *pTF, int i1)
{
	int it,ht,ii;
	TzqDate *pb;
	pb=pTF;
	ii=0;
	it=0;
	ht=0;
	while(pb->pTzq[i1])
	{
		pb=pb->pTzq[i1];
		if(it==0)
		{
			if(pb->nColor==0)
				ii++;
			else 
				it=1;
		}
		else
		{
			if(ii==0)
			{
				if(pb->nColor==0)
				{
					Addpa(pb);
					return ;
					
				}
				else
					return ;
			}
			else
			{
				if(pb->nColor==0)
					ii--;
				else
					return ;
			}
		}
	}
	
	
}

void CTzq::Addpa(TzqDate *pTF)
{
	
	TzqDate *pb=pTF;
	int z=aPlace[qzc][qz].nPlaceArray.GetSize();
	for(int i=0;i<z;i++)
	{
		if(pb->nQz==aPlace[qzc][qz].nPlaceArray[i])
			return ;
	}
	aPlace[qzc][qz].nPlaceArray.Add(pb->nQz);
	Chess(pb);
	
	
	
	
}

CTzq::ChessFull()
{
	int j;

	for (qz=0;qz<10;qz++)
	{
		
		
		aPlace[qzc][qz].nPlaceArray.RemoveAll();
		
		
		j=aPlace[qzc][qz].pTzq->nColor;
		aPlace[qzc][qz].pTzq->nColor=0;
		
		aPlace[qzc][qz].nPlaceArray.Add(aPlace[qzc][qz].pTzq->nQz);
		this->Chess(aPlace[qzc][qz].pTzq);
		this->BsetSide(aPlace[qzc][qz].pTzq);

		CArray<int,int> yjj;
		for(int iz=1;iz<aPlace[qzc][qz].nPlaceArray.GetSize();iz++)
			yjj.Add(aPlace[qzc][qz].nPlaceArray[iz]);
		aPlace[qzc][qz].nPlaceArray.RemoveAll();
		for( iz=0;iz<yjj.GetSize();iz++)
			aPlace[qzc][qz].nPlaceArray.Add(yjj[iz]);
		aPlace[qzc][qz].pTzq->nColor=j;
	}


}
void CTzq::BsetSide(TzqDate *dp)
{
	
	for (int i=0;i<6;i++)
	{
		if(dp->pTzq[i]!=NULL)
			if(dp->pTzq[i]->nColor==0)
				aPlace[qzc][qz].nPlaceArray.Add(dp->pTzq[i]->nQz);
	}
}

void CTzq::NewGame()
{
	pPlace=NULL;
	BeginGame=FALSE;
	pPlace=NULL;
		for(int i=0;i<6;i++){
		for(int j=0;j<10;j++)
		{
			aPlace[i][j].pTzq=NULL;
			aPlace[i][j].nTestUD=0;
		}
		nPlayType[i]=0;
//		nPlayYN[6]=FALSE;
	}
	memset(aTzqFull,0,sizeof(aTzqFull));
	srand( (unsigned)time( NULL ) );
	SetTF_nQz();			//初始化aTzqFull数组 nQz;
	SetTF_nxy();			//初始化aTzqFull数组 n_x,n_y;
	SetTF_pTzq();			//初始化aTzqFull数组 pTzq
	SetTF_nPRI();			//初始化aTzqFull数组 nPRI;

	SetPlace();             //初始化aPlace数组;

	SetTF_nArea();			//初始化aTzqFull数组 nArea;


	SetTF_nColor();			//初始化aTzqFull数组 nColor;
	for(qzc=0;qzc<6;qzc++)
		ChessFull();
	
}

CTzq::GameStep()
{

	m_cwnd->InvalidateRect(CRect(375,40,405,70),FALSE);
	if(nPlayType[nPlaySyst]!=0)
		switch(nPlayType[nPlaySyst])
	{
		case 1:
			
			break;
		case 2:
			this->pcstep();
			break;
		case 3:
			this->NetStep();
			break;
		default:
			break;
	}

}

CTzq::pcstep()
{	
/*	int nfff=0;
	int ntend,ntt1,ntt2,ntt3,ntt4;
	int tempqzz;
	ntend=nPlaySyst+3;
	if(ntend>5)
		ntend=nPlaySyst-3;
	for(int nabqq=0;nabqq<10;nabqq++)
	{
		if(aPlace[nPlaySyst][nabqq].pTzq->nArea==ntend+1)
			nfff++;
		else
			tempqzz=nabqq;
	}
	if(nfff==9){
		CString yj;

		yj+="下完!!!";
		m_cwnd->MessageBox(yj,"跳子棋");
	
	//	if(aPlace[nPlaySyst][tempqzz].pTzq->pTzq[ntend]
		ntt1=nPlaySyst+2;
		ntt2=nPlaySyst+3;
		ntt3=nPlaySyst+4;
		ntt4=nPlaySyst+5;
		ntt1%=6;
		ntt2%=6;
		ntt3%=6;
		ntt4%=6;
		TzqDate * tzqdatetemp=aPlace[nPlaySyst][tempqzz].pTzq;
		if(tzqdatetemp->pTzq[ntt2]!=NULL)
		{
			if((tzqdatetemp->pTzq[ntt2]->nArea==ntend+1)&&
				(tzqdatetemp->pTzq[ntt2]->nColor==0))
			{	
				TzqDate *temp;
				temp=aPlace[nPlaySyst][tempqzz].pTzq;
				aPlace[nPlaySyst][tempqzz].pTzq->nColor=0;
				aPlace[nPlaySyst][tempqzz].pTzq=tzqdatetemp->pTzq[ntt2];
				aPlace[nPlaySyst][tempqzz].pTzq->nColor=nPlaySyst+1;
				this->renovate(temp,aPlace[nPlaySyst][tempqzz].pTzq);
				return 0;
			}
		}
		if(tzqdatetemp->pTzq[ntt3]!=NULL)
		{
			if((tzqdatetemp->pTzq[ntt3]->nArea==ntend+1)&&
				(tzqdatetemp->pTzq[ntt3]->nColor==0))
			{
				TzqDate *temp;
				temp=aPlace[nPlaySyst][tempqzz].pTzq;
				aPlace[nPlaySyst][tempqzz].pTzq->nColor=0;
				aPlace[nPlaySyst][tempqzz].pTzq=tzqdatetemp->pTzq[ntt3];
				aPlace[nPlaySyst][tempqzz].pTzq->nColor=nPlaySyst+1;
				this->renovate(temp,aPlace[nPlaySyst][tempqzz].pTzq);

				return 0;
			}
		}
		while(tzqdatetemp->pTzq[ntt1]!=NULL)
		{
			tzqdatetemp=tzqdatetemp->pTzq[ntt1];
		//	if(tzqdatetemp->pTzq[ntt2]
		}
		tzqdatetemp=aPlace[nPlaySyst][tempqzz].pTzq;
		while(tzqdatetemp->pTzq[ntt1]!=NULL)
		{
			tzqdatetemp=tzqdatetemp->pTzq[ntt1];
		//	if(tzqdatetemp->pTzq[ntt2]
		}
	}
	*/
	int zzr,ttt,tt2,tt3;
	zzr=-10;
	ttt=0;
	tt2=0;
	tt3=0;
	int x,asd1;
	
	int zze;
	for(zze=0;zze<10;zze++)
	{
		
		for(asd1=0;asd1<aPlace[nPlaySyst][zze].nPlaceArray.GetSize();asd1++)
		{
			x=aPlace[nPlaySyst][zze].nPlaceArray[asd1];
			if(this->aTzqFull[x].nPRI[nPlaySyst]-aPlace[nPlaySyst][zze].pTzq->nPRI[nPlaySyst] >zzr)
			{
				//	if(ab[x].b[0]-abz[1][zze].a->b[0]==zzr
				//		&&ab[x].a
				if((aTzqFull[x].nArea==nPlaySyst+1)
					||(aTzqFull[x].nArea==0)
					||(aTzqFull[x].nArea==((nPlaySyst+3>=6)?(nPlaySyst-3):(nPlaySyst+3))+1))
					
				{
					ttt=zze;
					tt3=asd1;
					tt2=aPlace[nPlaySyst][zze].nPlaceArray[asd1];
					zzr=aTzqFull[aPlace[nPlaySyst][zze].nPlaceArray[asd1]].nPRI[nPlaySyst]-aPlace[nPlaySyst][zze].pTzq->nPRI[nPlaySyst];
				}
			}
			else
				if(aTzqFull[x].nPRI[nPlaySyst]-aPlace[nPlaySyst][zze].pTzq->nPRI[nPlaySyst]==zzr)
				{
					
					char crand=(char)rand();
					//	if(crand<0)
					//		MessageBox("fdslafk");
					if(crand>0)
					{
						//	if(abz[1][zze].a->a!=1)
						{
							
							if((aTzqFull[x].nArea==nPlaySyst+1)
								||(aTzqFull[x].nArea==0)
								||(aTzqFull[x].nArea==(((nPlaySyst+3>=6)?(nPlaySyst-3):(nPlaySyst+3))+1)))
							{
								ttt=zze;
								tt3=asd1;
								tt2=aPlace[nPlaySyst][zze].nPlaceArray[asd1];
								zzr=aTzqFull[aPlace[nPlaySyst][zze].nPlaceArray[asd1]].nPRI[nPlaySyst]-aPlace[nPlaySyst][zze].pTzq->nPRI[nPlaySyst];
								
							}
						}
					}
					
				}
		}
	}
	
	
	this->aTzqFull[this->aPlace[nPlaySyst][ttt].nPlaceArray[tt3]].nColor=aPlace[nPlaySyst][ttt].pTzq->nColor;
	aPlace[nPlaySyst][ttt].pTzq->nColor=0;
	m_cwnd->InvalidateRect(
		CRect(
		aTzqFull[this->aPlace[nPlaySyst][ttt].nPlaceArray[tt3]].n_x-15,
		aTzqFull[this->aPlace[nPlaySyst][ttt].nPlaceArray[tt3]].n_y-15,
		aTzqFull[this->aPlace[nPlaySyst][ttt].nPlaceArray[tt3]].n_x+17,
		aTzqFull[this->aPlace[nPlaySyst][ttt].nPlaceArray[tt3]].n_y+17),0);
	m_cwnd->InvalidateRect(
		CRect(
		aPlace[nPlaySyst][ttt].pTzq->n_x-15,
		aPlace[nPlaySyst][ttt].pTzq->n_y-15,
		aPlace[nPlaySyst][ttt].pTzq->n_x+17,
		aPlace[nPlaySyst][ttt].pTzq->n_y+17),0);	
	aPlace[nPlaySyst][ttt].pTzq=&aTzqFull[this->aPlace[nPlaySyst][ttt].nPlaceArray[tt3]];
	
	
	
	int ffff=1,fff1=1;
	int tend;
	tend=nPlaySyst+3;
	if(tend>5)
		tend=nPlaySyst-3;
	for(int abqq=0;abqq<10;abqq++)
	{
		if(aPlace[nPlaySyst][abqq].pTzq->nArea!=tend+1)
			ffff=0;
	}
	if(ffff==1){
		CString yj;
		yj.Format("!!!玩家%d",this->nPlaySyst+1);
		yj+="下完!!!";
		m_cwnd->MessageBox(yj,"跳子棋");
		//		newgame();
		//		this->Invalidate(0);
		this->nPlayType[nPlaySyst]=0;
	}
			int nti=0;
		for(int t=0;t<6;t++)
		{
			nti+=nPlayType[t];
		}
		if(nti==0)
			return 0;
	for(qzc=0;qzc<6;qzc++)
		this->ChessFull();
	nPlaySyst++;
	nPlaySyst%=6;
	while(nPlayType[nPlaySyst]==0)
	{
		nPlaySyst++;
		
		nPlaySyst%=6;
	}


	GameStep();
	
	
	
	return 0;
}

CTzq::NetStep()
{

}

int CTzq::qzsetel(CPoint point)
{
	CRect rgn;
	for(int i=0;i<122;i++)
	{
		rgn=CRect(
			aTzqFull[i].n_x-9,
			aTzqFull[i].n_y-9,
			aTzqFull[i].n_x+9,
			aTzqFull[i].n_y+9);
		
		if(rgn.PtInRect(point))
		{ 
			return i;
		}
	}

	return 0;
}

BOOL CTzq::StepPath(CPlace *pplace, TzqDate *ptzq,int i1)
{
	int it,ht,ii;
	TzqDate *pb;
	pb=pplace->pTzq;
	ii=0;
	it=0;
	ht=0;
	while(pb->pTzq[i1])
	{
		pb=pb->pTzq[i1];
		if(it==0)
		{
			if(pb->nColor==0)
				ii++;
			else 
				it=1;
		}
		else
		{
			if(ii==0)
			{
				if(pb->nColor==0)
				{
				//	Addpa(pb);
					if(pb->nQz==ptzq->nQz)
						return TRUE;
					else 
						return FALSE;
					
				}
				else
					return FALSE;
			}
			else
			{
				if(pb->nColor==0)
					ii--;
				else
					return FALSE;
			}
		}
	}
	return FALSE;


}

CTzq::renovate(TzqDate * t1, TzqDate * t2)
{
	
	m_cwnd->InvalidateRect(
		CRect(
		t1->n_x-15,
		t1->n_y-15,
		t1->n_x+17,
		t1->n_y+17),0);
	m_cwnd->InvalidateRect(
		CRect(
		t2->n_x-15,
		t2->n_y-15,
		t2->n_x+17,
		t2->n_y+17),0);	

	
	
	
	int ffff=1,fff1=1;
	int tend;
	tend=nPlaySyst+3;
	if(tend>5)
		tend=nPlaySyst-3;
	for(int abqq=0;abqq<10;abqq++)
	{
		if(aPlace[nPlaySyst][abqq].pTzq->nArea!=tend+1)
			ffff=0;
	}
	if(ffff==1){
		CString yj;
		yj.Format("!!!玩家%d",this->nPlaySyst+1);
		yj+="下完!!!";
		m_cwnd->MessageBox(yj,"跳子棋");
		//		newgame();
		//		this->Invalidate(0);
		this->nPlayType[nPlaySyst]=0;
	}
	
	for(qzc=0;qzc<6;qzc++)
		this->ChessFull();
	nPlaySyst++;
	nPlaySyst%=6;
	while(nPlayType[nPlaySyst]==0)
	{
		nPlaySyst++;
		
		nPlaySyst%=6;
	}


	GameStep();
}

⌨️ 快捷键说明

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