📄 tzq.cpp
字号:
}
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 + -