C语言编写的五子棋源代码.txt
- 文档编号:230252
- 上传时间:2022-10-07
- 格式:TXT
- 页数:11
- 大小:13.40KB
C语言编写的五子棋源代码.txt
《C语言编写的五子棋源代码.txt》由会员分享,可在线阅读,更多相关《C语言编写的五子棋源代码.txt(11页珍藏版)》请在冰豆网上搜索。
#include
#include
#include
#include
#include
#include
#defineSPA0//��C��C++����Դ������������һ����ʶ������ʾһ���ַ�������Ϊ���ꡱ����define��Ϊ�궨�����
#defineMAN1
#defineCOM2
/*��λ����Ϊ0������µ�λ����Ϊ1�������µ�λ����Ϊ2*/
#defineORDEX15
intqipan[ORDEX][ORDEX];//�Լ������Ԥ����������Զ�ά������ʽ��������/*15*15������*/
typedefstruct//typedef����������C�ж���һ���ṹ������
{
intiFlag;
intiX,iY;
}ScmPiece;
intg_iPieceLen;
ScmPieceg_ScmGame1,g_ScmGame2;
voidstart();/*�������Ҫ���ƺ���*/
voiddraw();/*������*/
intVictory(ScmPiece*pScmPiece);/*�ж�ʤ��pqΪ�жϵ�����*/
voidAI(int*p,int*q);/*��������pq������������*/
intvalue(intp,intq);/*����յ�pq�ļ�ֵ*/
intqixing(intn,intp,intq);/*���ؿյ�pq��n�����ϵ�����nΪ1-8��������˳ʱ�뿪ʼ��*/
voidyiwei(intn,int*i,int*j);/*��n�����϶�����ij��λnΪ1-8��������˳ʱ�뿪ʼ��*/
voidInitGame(){
inti;
g_iPieceLen=ORDEX*ORDEX;
g_ScmGame1.iX=0;
g_ScmGame1.iY=0;
g_ScmGame1.iFlag=COM;
g_ScmGame2.iX=7;
g_ScmGame2.iY=7;
g_ScmGame2.iFlag=MAN;
for(i=0;i *((int*)qipan+i)=SPA; } voidmain() { chark; do{ InitGame(); start(); printf("��Ҫ����һ����? ����y��n��");getchar();scanf("%c",&k); while(k! ='y'&&k! ='n'){printf("�������,����������\n");scanf("%c",&k);} system("cls"); }while(k=='y'); printf("ллʹ��! \n"); } voidMakePiece(ScmPiece*pScmPiece,intiGameFlag){ if(iGameFlag) { printf("�����ӣ�"); while(scanf("%d%d",&pScmPiece->iX,&pScmPiece->iY)) { if((pScmPiece->iX<0||pScmPiece->iX>ORDEX-1)||(pScmPiece->iY<0||pScmPiece->iY>ORDEX-1)) printf("�������! ���������룺"); elseif(qipan[pScmPiece->iX][pScmPiece->iY]) printf("��λ��������! ���������룺"); elsebreak; } } qipan[pScmPiece->iX][pScmPiece->iY]=pScmPiece->iFlag; --g_iPieceLen; system("cls"); draw(); if(iGameFlag==0) printf("��������%d%d\n",pScmPiece->iX,pScmPiece->iY); } voidstart() { intchoice; //ScmPieceScmGameTemp1,ScmGameTemp2;/*a1b1���������������c1d1���������������*/ printf("\t�X�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�[\n"); printf("\t�U�U\n"); printf("\t�U��ӭʹ���������ս����ף����������ս�����U\n"); printf("\t�U�U\n"); printf("\t�U._______________________.�U\n"); printf("\t�U|_____________________|�U\n"); printf("\t�U|II|�U\n"); printf("\t�U|II|�U\n"); printf("\t�U|I������I|�U\n"); printf("\t�U|II|�U\n"); printf("\t�U|I___________________I|�U\n"); printf("\t�U! _______________________! �U\n"); printf("\t�U._[__________]_.�U\n"); printf("\t�U.___|_______________|___.�U\n"); printf("\t�U|: : : ____|�U\n"); printf("\t�U|~~~~[CD-ROM]|�U\n"); printf("\t�U! _____________________! �U\n"); printf("\t�U�U\n"); printf("\t�U�U\n"); printf("\t�U����Ϫ�������ף������������������U\n"); printf("\t�U����������������������ɽ�ȡ��U\n"); printf("\t�U������Ͽ��ˮ����������������ᰡ��U\n"); printf("\t�U�������������ǣ�б�������������U\n"); printf("\t�U��ʮ������������ֱָ����б���ǡ��U\n"); printf("\t�U�U\n"); printf("\t�U�U\n"); printf("\t�U1.�˻���ս2.���˶�ս�U\n"); printf("\t�U�U\n"); printf("\t�^�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�T�a\n"); printf("\t\t\t������1��2��"); while(scanf("%d",&choice),choice! =1&&choice! =2) printf("����������������룺"); system("cls"); if(choice==1) {/*�˻�ģʽ*/ printf("\t\t\t��ӭʹ���������˻���ս��\n\t\t�������������꣨��136���м��Կո�ָ��\n\n\n"); draw(); printf("�����밴1�������밴2��"); while(scanf("%d",&choice),choice! =1&&choice! =2) printf("����������������룺"); if(choice==2) MakePiece(&g_ScmGame2,0); choice=1; } else { printf("��ӭʹ�����������˶�ս����������������(��136)������������1515�� \n\n\n"); draw(); } while(g_iPieceLen) { MakePiece(&g_ScmGame1,1); if(Victory(&g_ScmGame1)) { printf("��������Ķ��Ǹ���! ! ! \n"); return; }/*���Ӯ*/ if(choice==1) { AI(&g_ScmGame2.iY,&g_ScmGame2.iX); MakePiece(&g_ScmGame2,0); if(Victory(&g_ScmGame2)) {/*����Ӯ*/ intiChoice; printf("Ҫ������������y��n��"); STARTFLAGE: setbuf(stdin,NULL); scanf("%c",&iChoice); switch((char)iChoice){ case'y': case'Y': g_iPieceLen+=2; qipan[g_ScmGame2.iX][g_ScmGame2.iY]=SPA; qipan[g_ScmGame1.iX][g_ScmGame1.iY]=SPA; system("cls");draw(); break; case'n': case'N': printf("�²������Ժ��������벻Ҫ����! ! ! \n"); return; default: printf("����������������룺"); gotoSTARTFLAGE; } } } else { MakePiece(&g_ScmGame2,1); if(Victory(&g_ScmGame2)) { printf("��������Ķ��Ǹ���! ! ! \n"); return; } } } printf("�;�\n"); } voiddraw()/*������*/ { inti,j; charp[15][15][4]; for(j=0;j<15;j++) for(i=0;i<15;i++){ if(qipan[j][i]==SPA)strcpy(p[j][i],"\0"); if(qipan[j][i]==MAN)strcpy(p[j][i],"��\0"); if(qipan[j][i]==COM)strcpy(p[j][i],"��\0"); } printf("01234567891011121314\n"); printf("�����Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ��Щ���\n"); for(i=0,j=0;i<14;i++,j++){ printf("%2d��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%d\n",j,p[i][0],p[i][1],p[i][2],p[i][3],p[i][4],p[i][5],p[i][6],p[i][7],p[i][8],p[i][9],p[i][10],p[i][11],p[i][12],p[i][13],p[i][14],j); printf("��������������������\n"); } printf("14��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��%s��0\n",p[14][0],p[14][1],p[14][2],p[14][3],p[14][4],p[14][5],p[14][6],p[14][7],p[14][8],p[14][9],p[14][10],p[14][11],p[14][12],p[14][13],p[14][14]); printf("�����ة��ة��ة��ة��ة��ة��ة��ة��ة��ة��ة��ة��ة��ة���\n"); printf("01234567891011121314\n"); } staticintDirectionValue(int*piX,int*piY,intiDirection){ switch(iDirection){ case0: --*piX; break; case4: ++*piX; break; case1: --*piY; break; case5: ++*piY; break; case2: --*piX;--*piY; break; case6: ++*piX;++*piY; break; case3: --*piX;++*piY; break; case7: ++*piX;--*piY; break; } if((*piX>=0&&*piX<=ORDEX-1)&&(*piY>=0&&*piY<=ORDEX-1)) return1; elsereturn0; } staticintSubVictory(ScmPiece*pScmPiece,intiDirection){ intiX=pScmPiece->iX; intiY=pScmPiece->iY; intiPieceCount=1; while(DirectionValue(&iX,&iY,iDirection)&&qipan[iX][iY]==pScmPiece->iFlag) ++iPieceCount; iX=pScmPiece->iX; iY=pScmPiece->iY; while(DirectionValue(&iX,&iY,iDirection+4)&&qipan[iX][iY]==pScmPiece->iFlag) ++iPieceCount; returniPieceCount; } intVictory(ScmPiece*pScmPiece)/*�ж�ʤ��pqΪ�жϵ����꣬ʤ������1������0*/ { intiDirection=0; while(iDirection<4) if(SubVictory(pScmPiece,iDirection++)>=5) return1; return0; } voidAI(int*p,int*q)/*��������*p*q������������*/ { inti,j,k,max=0,I,J;/*IJΪ�µ�����*/ for(j=0;j<15;j++) for(i=0;i<15;i++) if(qipan[j][i]==SPA){/*�������̣������յ�������ֵ��ȡ����ֵ�����ӡ�*/ k=value(i,j); if(k>=max){I=i;J=j;max=k;} } *p=I;*q=J; } intvalue(intp,intq)/*����յ�pq�ļ�ֵ��k����*/ { intn=1,k=0,k1,k2,K1,K2,X1,Y1,Z1,X2,Y2,Z2,temp; inta[2][4][4]={40,400,3000,10000,6,10,600,10000,20,120,200,0,6,10,500,0,30,300,2500,5000,2,8,300,8000,26,160,0,0,4,20,300,0}; /*����a�д��漺���ͶԷ���32�����͵�ֵ����0�Է�1��0��1�ջ�2�ճ�3����0-3��0��ʾ1���ӣ�3��ʾ4���ӣ�*/ while(n! =5){ k1=qixing(n,p,q);n+=4; /*k1,k2Ϊ2������������ͱ��*/ k2=qixing(n,p,q);n-=3; if(k1>k2){temp=k1;k1=k2;k2=temp;}/*ʹ���С��Ϊk1,���Ϊk2*/ K1=k1;K2=k2;/*K1K2����k1k2�ı��*/ Z1=k1%10;Z2=k2%10;k1/=10;k2/=10;Y1=k1%10;Y2=k2%10;k1/=10;k2/=10;X1=k1%10;X2=k2%10; /*XYZ�ֱ��ʾ����0�Է�1��0��1�ջ�2�ճ�3����0-3��0��ʾ1���ӣ�3��ʾ4���ӣ�*/ if(K1==-1){if(K2<0){k+=0;continue;}elsek+=a[X2][Y2][Z2]+5;continue;};/*������and����*/ if(K1==-2){if(K2<0){k+=0;continue;}elsek+=a[X2][Y2][Z2]/2;continue;};/*�߽������and����*/ if(K1==-3){if(K2<0){k+=0;continue;}elsek+=a[X2][Y2][Z2]/3;continue;};/*�߽�ճ�����and����*/ if(((K1>-1&&K1<4)&&((K2>-1&&K2<4)||(K2>9&&K2<14)))||((K1>99&&K1<104)&&((K2>99&&K2<104)||(K2>109&&K2<114)))){ /*�����������Ի�Ի��Ի�Գ�������ֵ*/ if(Z1+Z2>=2){k+=a[X2][Y2][3];continue;} else{k+=a[X2][Y2][Z1+Z2+1];continue;} } if(((K1>9&&K1<14)&&(K2>9&&K2<14))||((K1>109&&K1<114)&&(K2>109&&K2<114))){ /*���强���Գ�Գ�������ֵ*/ if(Z1+Z2>=2){k+=10000;continue;} else{k+=0;continue;} } if(((K1>-1&&K1<4)&&((K2>99&&K2<104)||(K2>109&&K2<114)))||((K1>9&&K1<14)&&((K2>99&&K2<104)||(K2>109&&K2<114)))){ /*����Ի�����Գ�����Ի�����Գ�������ֵ*/ if(Z1==3||Z2==3){k+=10000;continue;} else{k+=a[X2][Y2][Z2]+a[X1][Y1][Z1]/4;continue;} } else{k+=a[X1][Y1][Z1]+a[X2][Y2][Z2];continue;}/*�������͵ĸ�ֵ*/ } returnk; } intqixing(intn,intp,intq)/*���ؿյ�pq��n�����ϵ����ͺ�nΪ1-8��������˳ʱ�뿪ʼ��*/ { intk,m=0;/*���ͺ�ע��: ����000-003����010-013�Ի�100-103�Գ�110-113���ջ�020-023���ճ�030-033�Կջ�120-123�Կճ�130-133��-1�߽��-2�߽�ճ�-3*/ yiwei(n,&p,&q); if(p<0||p>14||q<0||q>14)k=-2;/*�߽������*/ switch(qipan[q][p]){ caseCOM: { m++;yiwei(n,&p,&q); if(p<0||p>14||q<0||q>14){k=m+9;returnk;} while(qipan[q][p]==COM){m++;yiwei(n,&p,&q);if(p<0||p>14||q<0||q>14){k=m+9;returnk;}} if(qipan[q][p]==SPA)k=m-1;/*����������*/ elsek=m+9;/*����������*/ }break; caseMAN: { m++;yiwei(n,&p,&q); if(p<0||p>14||q<0||q>14){k=m+109;returnk;} while(qipan[q][p]==MAN){m++;yiwei(n,&p,&q);if(p<0||p>14||q<0||q>14){k=m+109;returnk;}} if(qipan[q][p]==SPA)k=m+99;/*�Է�������*/ elsek=m+109;/*�Է�������*/ }break; caseSPA: { yiwei(n,&p,&q); if(p<0||p>14||q<0||q>14){k=-3;returnk;}/*�߽�ճ�����*/ switch(qipan[q][p]){ caseCOM: { m++;yiwei(n,&p,&q); if(p<0||p>14||q<0||q>14){k=m+29;returnk;} while(qipan[q][p]==COM){m++;yiwei(n,&p,&q);if(p<0||p>14||q<0||q>14){k=m+29;returnk;}} if(qipan[q][p]==SPA)k=m+19;/*�����ջ�����*/ elsek=m+29;/*�����ճ�����*/ }break; caseMAN: { m++;yiwei(n,&p,&q); if(p<0||p>14||q<0||q>14){k=m+129;returnk;} while(qipan[q][p]==MAN){m++;yiwei(n,&p,&q);if(p<0||p>14||q<0||q>14){k=m+129;returnk;}} if(qipan[q][p]==SPA)k=m+119;/*�Է��ջ�����*/ elsek=m+129;/*�Է��ճ�����*/ }break; caseSPA: k=-1;break;/*������*/ } }break; } returnk; } voidyiwei(intn,int*i,int*j)/*��n�����϶�����ij��λnΪ1-8��������˳ʱ�뿪ʼ��*/ { switch(n){ case1: *i+=1;break; case2: *i+=1;*j+=1;break; case3: *j+=1;break; case4: *i-=1;*j+=1;break; case5: *i-=1;break; case6: *i-=1;*j-=1;break; case7: *j-=1;break; case8: *i+=1;*j-=1;break; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编写 五子棋 源代码