📄 wuzi.cpp
字号:
mark.one--;
lthorf++;
break;
}
else if(matrix[i+count2+1][j-count2-1]==0
&&matrix[i-count1-1][j+count1+1]==0
&&matrix[i-count1-2][j+count1+2]==who
&&matrix[i-count1-3][j+count1+3]==who
&&matrix[i-count1-4][j+count1+4]==0
||matrix[i-count1-1][j+count1+1]==0
&&matrix[i+count2+1][j-count2-1]==0
&&matrix[i+count2+2][j-count2-2]==who
&&matrix[i+count2+3][j-count2-3]==who
&&matrix[i+count2+4][j-count2-4]==0)
{
mark.livethree++;
mark.one--;
lthorf++;
break;
}
break;
}
mark.mark=mark.five*FIVE;
mark.mark+=mark.livefour*LIVEFOUR;
mark.mark+=mark.crackfour*CRACKFOUR;
// mark.mark+=mark.hopfour*HOPFOUR;
mark.mark+=mark.livethree*LIVETHREE;
// mark.mark+=mark.hopthree*HOPTHREE;
mark.mark+=mark.crackthree*CRACKTHREE;
mark.mark+=mark.livetwo*LIVETWO;
mark.mark+=mark.cracktwo*CRACKTWO;
mark.mark+=mark.one*ONE;
// mark.livethree=3;
/* if(lthorf>=2)
mark.mark+=2500;
*/
if(mark.crackfour>=1&&mark.livethree>=1)
mark.mark+=3000;
else if(lthorf>=2)
mark.mark+=2500;
mark.i=i;
mark.j=j;
return (mark);
}
/* ______----------------------------- ////////////////////////
/// A function which can do the thinking part ?!
BUT THE AI IS A FOOL!
//////////////////// --------------------------------- */
int ai(int depth,int who)
{
int i,j,besti=1,bestj=1,li,lj,fi,fj,flagwin;
int besti1=3,bestj1=5,besti2=1,bestj2=1,howdepth=0,howdepth2=0;
MARK mark,mark1,mark2,bestmark,bestmark1,bestmark2;
mark=initialmark(mark);
mark1=initialmark(mark2);
mark2=initialmark(mark2);
bestmark=initialmark(bestmark);
bestmark1=initialmark(bestmark1);
bestmark2=initialmark(bestmark2);
randomize();
if(depth==1)
{
/*seach for the area for ai*/
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
{
if(matrix[i][j]!=0)
if(j<=fj)
{ fj=j;
break;
}
}
for(j=1;j<=15;j++)
for(i=1;i<=15;i++)
{
if(matrix[i][j]!=0)
if(fi>=i)
{ fi=i;
break;
}
}
for(i=15;i>=1;i--)
for(j=15;j>=1;j--)
{
if(matrix[i][j]!=0)
if(j>=lj)
{
lj=j;
break;
}
}
for(j=15;j>=1;j--)
for(i=15;i>=1;i--)
{
if(matrix[i][j]!=0)
if(i>=li)
{
li=i;
break;
}
}
if((fi-OUTSTEP)>=1)
fi-=OUTSTEP;
if((fj-OUTSTEP)>=1)
fj-=OUTSTEP;
if((li+OUTSTEP)<=15)
li+=OUTSTEP;
if((lj+OUTSTEP)<=15)
lj+=OUTSTEP;
/*-----------------*/
//printf("fi=%d li=%d fj=%d lj=%d",fi,li,fj,lj);
bestmark.mark=0;
for(i=fi;i<=li;i++)
for(j=fj;j<=lj;j++)
{
if(matrix[i][j]==0)
{
mark1=evaluate(i,j,who);
mark2=evaluate(i,j,-who);
mark2.mark-=100;
// mark=(mark1.mark>=mark2.mark)?mark1:mark2;
if(mark1.mark>bestmark1.mark)
bestmark1=mark1;
else if(mark.mark==bestmark1.mark&&random(2))
bestmark1=mark1;
if(mark2.mark>bestmark2.mark)
bestmark2=mark2;
else if(mark.mark==bestmark2.mark&&random(2))
bestmark2=mark2;
if(mark1.mark>LIVETHREE&&mark1.mark<LIVEFOUR)
// if(mark1.livethree>=1||mark1.crackfour>=1)
{
matrix[i][j]=who;
howdepth=ai(depth+1,-who);
matrix[i][j]=0;
if(howdepth>0)
mark1.mark+=(LIVETHREE/2);
}
if(mark2.mark<LIVEFOUR)
if(mark2.livethree>=1||mark2.crackfour>=1)
{
matrix[i][j]=-who;
howdepth=ai(depth+1,who);
matrix[i][j]=0;
if(howdepth>0)
mark2.mark+=(LIVETHREE/2);
}
}
}
//bestmark=(bestmark1.mark>=bestmark2.mark)?bestmark1:bestmark2;
if(bestmark1.mark>=bestmark2.mark)
{
bestmark=bestmark1;
}
else
{
bestmark=bestmark2;
}
/*if the step isn't the one which must be put*/
matrix[bestmark.i][bestmark.j]=who;
/*-------------------------------------------*/
if(stepnum==1&&whofirst==1)
{
bestmark.i=(QIPANWIDTH/20)/2+1;
bestmark.j=(QIPANHEIGHT/20)/2+1;
}
int x,y;
x=bestmark.i*20+QIPANX-20;
y=bestmark.j*20+QIPANY-20;
paint_qizi(x,y,who);
if(iffive(bestmark.i,bestmark.j,who))
paintnow=FALSE;
stepnum++;
return (1);
}
if(depth>1)
{
int nextstep,fi,fj,i,j;
MARK bestmark1,bestmark2,bestmark;
bestmark1.mark=0;
bestmark2.mark=0;
bestmark.mark=0;
// printf("enter digui depth=%d",depth);
if(depth>MAXDEPTH)
return(0);
/*-----------------seach for the area for ai------------------------*/
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
{
if(matrix[i][j]!=0)
if(fj>=j)
{ fj=j;
break;
}
}
for(j=1;j<=15;j++)
for(i=1;i<=15;i++)
{
if(matrix[i][j]!=0)
if(fi>=i)
{ fi=i;
break;
}
}
for(i=15;i>=1;i--)
for(j=15;j>=1;j--)
{
if(matrix[i][j]!=0)
if(lj<=j)
{
lj=j;
break;
}
}
for(j=15;j>=1;j--)
for(i=15;i>=1;i--)
{
if(matrix[i][j]!=0)
if(li<=i)
{ li=i;
break;
}
}
if((fi-OUTSTEP)>=1)
fi-=OUTSTEP;
if((fj-OUTSTEP)>=1)
fj-=OUTSTEP;
if((li+OUTSTEP)<=15)
li+=OUTSTEP;
if((lj+OUTSTEP)<=15)
lj+=OUTSTEP;
/*----------------------------------------------------------------------*/
for(i=fi;i<=li;i++)
for(j=fj;j<=lj;j++)
{
if(matrix[i][j]==0)
{
mark1=evaluate(i,j,who);
mark2=evaluate(i,j,-who);
if(depth/2==(depth+1)/2)
{
/*If your oppenent formed a aggresive situaition ,you would be stopped*/
if(mark1.mark>=LIVETHREE&&mark2.mark<LIVEFOUR)
return(0);
}
else
{
/* You must keep attacking */
if(mark1.mark<LIVETHREE)
return(0);
/* if(mark1.five>=1)
return(depth);
*/
if(mark1.mark>=LIVETHREE*2)
return(depth);
}
mark=(mark1.mark>=mark2.mark)?mark1:mark2;
if(mark1.mark>bestmark1.mark)
bestmark1=mark1;
if(mark2.mark>bestmark2.mark)
bestmark2=mark2;
}
}
matrix[bestmark.i][bestmark.j]=who;
nextstep=ai(depth+1,-who);
if(nextstep!=0)
{
matrix[bestmark.i][bestmark.j]=0;
return(nextstep);
}
else
{
matrix[bestmark.i][bestmark.j]=0;
return(0);
}
}
}
void StartBtn_clicked()
{
int i,j;
paintnow=TRUE;
setup_screen();
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
matrix[i][j]=0;
for(i=0,j=0;j<=18;j++)
matrix[i][j]=3;
for(i=18,j=0;j<=18;j++)
matrix[i][j]=3;
for(j=0,i=0;i<=18;i++)
matrix[i][j]=3;
for(j=18,i=0;i<=18;i++)
matrix[i][j]=3;
stepnum=1;
}
void RegretBtn_clicked(void)
{
int i,j,empty=1;
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
if(oldmatrix1[i][j]!=0)
empty=0;
if(empty)
printf("stop regret!");
else
{
setup_screen();
for(i=1;i<=15;i++)
for(j=1;j<=15;j++)
{
matrix[i][j]=oldmatrix1[i][j];
oldmatrix1[i][j]=oldmatrix2[i][j];
oldmatrix2[i][j]=0;
if(matrix[i][j]!=0)
paint_qizi(i*20+QIPANX-20,QIPANY+j*20-20,matrix[i][j]);
}
}
}
void anytoprocess(int x,int y,int f)
{
if (f==LEFT)
{
if(x>=QIPANX&&x<=QIPANX+QIPANWIDTH&&y>=QIPANY&&y<=QIPANY+QIPANHEIGHT&&Manandcom==1)
if(paintnow==TRUE)
{ int xx,yy,tx,ty;
xx=(int)(((float)x/20)+0.5)*20;
yy=(int)(((float)y/20)+0.5)*20;
tx=(xx-QIPANX+20)/20;
ty=(yy-QIPANY+20)/20;
if(matrix[tx][ty]==0)
{ int i,j;
for(i=0;i<=18;i++)
for(j=0;j<=18;j++)
{
oldmatrix2[i][j]=oldmatrix1[i][j];
oldmatrix1[i][j]=matrix[i][j];
}
if(paint_qizi(x,y,-whofirst))
/*when whofirst'value is 1 it means computer use the black first*/
{
int c;
paintnow=FALSE;
c=ai(1,whofirst);
paintnow=TRUE;
}
}
}
if(x>=QIPANX&&x<=QIPANX+QIPANWIDTH&&y>=QIPANY&&y<=QIPANY+QIPANHEIGHT&&Manandcom==-1)
{
if(paintnow==TRUE)
{ int xx,yy,tx,ty;
xx=(int)(((float)x/20)+0.5)*20;
yy=(int)(((float)y/20)+0.5)*20;
tx=(xx-QIPANX+20)/20;
ty=(yy-QIPANY+20)/20;
if(matrix[tx][ty]==0)
{ int i,j;
for(i=0;i<=18;i++)
for(j=0;j<=18;j++)
{
oldmatrix2[i][j]=oldmatrix1[i][j];
oldmatrix1[i][j]=matrix[i][j];
}
if(paint_qizi(x,y,man))
/*when whofirst'value is 1 it means computer use the black first*/
{
man*=-1;
paintnow=TRUE;
}
}
}
}
if(x>=StartBtn.x&&x<=StartBtn.x+StartBtn.width&&y>=StartBtn.y&&y<=StartBtn.y+StartBtn.height)
{
ButtonDown(StartBtn);
StartBtn_clicked();
if(whofirst==1)
if(ai(1,1));
}
else if (x>=ChangeBtn.x&&x<=StartBtn.x+ChangeBtn.width&&y>=ChangeBtn.y&&y<=ChangeBtn.y+ChangeBtn.height)
{
ButtonDown(ChangeBtn);
whofirst=-whofirst;
}
else if (x>=RegretBtn.x&&x<=RegretBtn.x+RegretBtn.width&&y>=RegretBtn.y&&y<=RegretBtn.y+RegretBtn.height)
{
ButtonDown(RegretBtn);
RegretBtn_clicked();
}
else if(x>=ManandcomBtn.x&&x<=ManandcomBtn.x+ManandcomBtn.width&&y>=ManandcomBtn.y&&y<=ManandcomBtn.y+ManandcomBtn.height)
{
ButtonDown(ManandcomBtn);
Manandcom*=-1;
}
else if (x>=ExitBtn.x&&x<=ExitBtn.x+ExitBtn.width&&y>=ExitBtn.y&&y<=ExitBtn.y+ExitBtn.height)
{
ButtonDown(ExitBtn);
flag=1;
}
}
}
void wuzi()
{
setup_screen();
showmouse();
int x,y,f=1;
do{
readmouse(&f,&x,&y);
delay(100);
anytoprocess(x,y,f);
}while(flag!=1);
hidemouse();
flag=0;
cleardevice();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -