最近,闲来无事,编了个井字棋程序。希望与各位交流交流。(我的程序可能比较难读,望见谅。)
#include
#include
#include
#define ROW 10
#define COL 10
void menu();
void print ();
void youxi();
void print1 (int ptr[][COL+1],int n);
int judge (int ptr[][COL+1],int n);
void judgement (int ptr [][COL+1],int n);
int main () {
int m;
menu();
scanf ("%d",&m);
while (m!=2) {
youxi ();
menu ();
scanf ("%d",&m);
}
printf ("欢迎再来玩五子棋!再见!");
return 0;
}
void menu () {
printf ("**************************n");
printf ("欢迎与人工智障玩游戏,请选择菜单:n");
printf ("1) 开始游戏 2) 退出游戏n");
printf ("**************************n");
printf ("请输入你的选择:");
}
void print () {
int i,j;
printf (" 1 2 3 4 5 6 7 8 9 10n");
for (i=1; i<=2*ROW+1; i++) {
if (i%2) {
printf (" +");
for (j=1; j<=COL; j++) {printf ("---+");}
} else {
printf ("%2d",i/2);
printf ("|");
for (j=1; j<=COL; j++) {printf (" |");}
}
printf ("n");
}
}
void youxi() {
int i,j,m,n,k;
int a[ROW+1][COL+1];
i=0; k=0+rand()%2;
for (i=0;i<=ROW;i++){
for (j=0;j<=COL;j++){
a[i][j]=0;
}
}
{
print ();
printf ("这次你是先手。n");
do {
printf ("请输入你的坐标(row col):");
scanf ("%d %d",&m,&n);
a[m][n]=1;
i++;
//print1 (a,ROW+1);
if (judge (a,ROW+1)) break;
if (i==100) {printf ("你的水平和人工智障差不多!n");break;}
judgement (a,ROW+1);
i++;
//printf ("电脑走棋如下:n");
print1 (a,ROW+1);
if (judge (a,ROW+1)) break;
if (i==100) {printf ("你的水平和人工智障差不多!n");break;}
} while (1);
}
}
void print1 (int ptr[][COL+1],int n) {
int i,j;
printf (" 1 2 3 4 5 6 7 8 9 10n");
for (i=1; i<=2*ROW+1; i++) {
if (i%2) {printf (" +");
for (j=1; j<=COL; j++) {printf ("---+");}
} else {
printf ("%2d",i/2);
printf ("|");
for (j=1; j<=COL; j++) {
if (ptr [i/2][j]==1) {printf (" x |");}
else if (ptr [i/2][j]==6) {printf (" ●|");}
else printf (" |");
}
}
printf ("n");
}
}
void judgement (int ptr [][COL+1],int n) {
int i,j,k,l,s;
int x,y;
for (k=0;k<=5;k++){
for (l=0;l<=5;l++){
for (i=1; i<=5; i++) {
s=0;
for (j=1; j<=5; j++) {s+=ptr [k+i][j+l];}
if (s==4||s==24) {
if (l<=3){
for (j+5; j>0; j--) {
if (ptr [i+k][j+l]==0) {ptr [k+i][l+j]=6;goto help;}
}}
else {for (j=1; j<6; j++) {
if (ptr [i+k][j+l]==0) {ptr [k+i][l+j]=6;goto help;}
}
}
}
}
for (j=1; j<=5; j++) {
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][j+l];}
if (s==4||s==24) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [i+k][j+l]==0) {ptr [i+k][j+l]=6;goto help;}
}}
else {
for (i=5; i>0; i--) {
if (ptr [i+k][j+l]==0) {ptr [i+k][j+l]=6;goto help;}
}}
}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+i];}
if (s==4||s==24) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [i+k][i+l]==0) {ptr [i+k][i+l]=6;goto help;}
}}
else {
for (i=5; i>0; i--) {
if (ptr [i+k][i+l]==0) {ptr [i+k][i+l]=6;goto help;}
}
}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+6-i];}
if (s==4||s==24) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [k+i][l+6-i]==0) {ptr [k+i][l+6-i]=6;goto help;}
}}
else {
for (i=5; i>0; i++) {
if (ptr [k+i][l+6-i]==0) {ptr [k+i][l+6-i]=6;goto help;}
}
}
}
}}
for (k=0;k<=5;k++){
for (l=0;l<=5;l++){
for (i=1; i<=5; i++) {
s=0;
for (j=1; j<=5; j++) {s+=ptr [k+i][j+l];}
if (s==3||s==18) {
if (l>=3){
for (j=1; j<=5; j++) {
if (ptr [i+k][j+l]==0&&(ptr [i+k][j+l-1]==1||ptr [i+k][j+l+1]==1)) {ptr [k+i][l+j]=6;goto help;}
}}
else {
for (j=5; j>0; j--) {
if (ptr [i+k][j+l]==0&&(ptr [i+k][j+l-1]==1||ptr [i+k][j+l+1]==1)) {ptr [k+i][l+j]=6;goto help;}
}
}
}
}
for (j=1; j<=5; j++) {
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][j+l];}
if (s==3||s==18) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [i+k][j+l]==0&&(ptr [i+k-1][j+l]==1||ptr [i+k+1][j+l]==1)) {ptr [i+k][j+l]=6;goto help;}
}}
else {
for (i=5; i>0; i--) {
if (ptr [i+k][j+l]==0&&(ptr [i+k-1][j+l]==1||ptr [i+k+1][j+l]==1)) {ptr [i+k][j+l]=6;goto help;}
}
}
}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+i];}
if (s==3||s==18) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [i+k][i+l]==0&&(ptr [i+k-1][i+l-1]==1||ptr [i+k+1][i+l+1]==1)) {ptr [i+k][i+l]=6;goto help;}
}}
else {
for (i=5; i>0; i--) {
if (ptr [i+k][i+l]==0&&(ptr [i+k-1][i+l-1]==1||ptr [i+k+1][i+l+1]==1)) {ptr [i+k][i+l]=6;goto help;}
}
}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+6-i];}
if (s==3||s==18) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [k+i][l+6-i]==0&&(ptr [i+k-1][l+6-i+1]==1||ptr [i+k+1][l+6-i-1]==1)) {ptr [k+i][l+6-i]=6;goto help;}
}}
else {
for (i=5; i>0; i--) {
if (ptr [k+i][l+6-i]==0&&(ptr [i+k-1][l+6-i+1]==1||ptr [i+k+1][l+6-i-1]==1)) {ptr [k+i][l+6-i]=6;goto help;}
}
}
}
}}
for (k=0;k<=5;k++){
for (l=0;l<=5;l++){
for (i=1; i<=5; i++) {
s=0;
for (j=1; j<=5; j++) {s+=ptr [k+i][j+l];}
if (s==2) {
if (l>=3){
for (j=1; j<=5; j++) {
if (ptr [i+k][j+l]==0&&(ptr [i+k][j+l-1]==1||ptr [i+k][j+l+1]==1)) {ptr [k+i][l+j]=6;goto help;}
}}
else {
for (j=5; j>0; j--) {
if (ptr [i+k][j+l]==0&&(ptr [i+k][j+l-1]==1||ptr [i+k][j+l+1]==1)) {ptr [k+i][l+j]=6;goto help;}
}
}
}
}
for (j=1; j<=5; j++) {
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][j+l];}
if (s==2) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [i+k][j+l]==0&&(ptr [i+k-1][j+l]==1||ptr [i+k+1][j+l]==1)) {ptr [i+k][j+l]=6;goto help;}
}}
else {for (i=5; i>0; i--) {
if (ptr [i+k][j+l]==0&&(ptr [i+k-1][j+l]==1||ptr [i+k+1][j+l]==1)) {ptr [i+k][j+l]=6;goto help;}
}
}
}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+i];}
if (s==2) {
if (k>=3){
for (i=1; i<=5; i++) {
if (ptr [i+k][i+l]==0&&(ptr [i+k-1][i+l-1]==1||ptr [i+k+1][i+l+1]==1)) {ptr [i+k][i+l]=6;goto help;}
}}
else {
for (i=5; i>0; i++) {
if (ptr [i+k][i+l]==0&&(ptr [i+k-1][i+l-1]==1||ptr [i+k+1][i+l+1]==1)) {ptr [i+k][i+l]=6;goto help;}
}
}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+6-i];}
if (s==2) {
if (k>2){
for (i=1; i<=5; i++) {
if (ptr [k+i][l+6-i]==0&&(ptr [i+k-1][l+6-i+1]==1||ptr [i+k+1][l+6-i-1]==1)) {ptr [k+i][l+6-i]=6;goto help;}
}}
else {
for (i=5; i>0; i--) {
if (ptr [k+i][l+6-i]==0&&(ptr [i+k-1][l+6-i+1]==1||ptr [i+k+1][l+6-i-1]==1)) {ptr [k+i][l+6-i]=6;goto help;}
}
}
}
}}
if (ptr [5][5]==0) {ptr [5][5]=6;goto help;}
else if (ptr [5][6]==0) {ptr [5][6]=6;goto help;}
else if (ptr [6][5]==0) {ptr [6][5]=6;goto help;}
else if (ptr [6][6]==0) {ptr [6][6]=6;goto help;}
x=1+rand()%10;y=1+rand()%10;
while (ptr [x][y]!=0) {x=1+rand()%10;y=1+rand()%10;}
ptr [x][y]=6;
help:;
}
int judge (int ptr[][COL+1],int n) {
int i,j,k,l,s,exit;
exit=0;
for (k=0;k<=5;k++){
for (l=0;l<=5;l++){
for (i=1; i<=5; i++) {
s=0;
for (j=1; j<=5; j++) {s+=ptr [i+k][j+l];}
if (s==5) {exit = 1;goto help;}
else if (s==30) {exit = 6;goto help;}}
for (j=1; j<=5; j++) {
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+j];}
if (s==5){exit = 1;goto help;}
else if (s==30) {exit = 6;goto help;}
}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+i];}
if (s==5) {exit = 1;goto help;}
else if(s==30) {exit = 6;goto help;}
s=0;
for (i=1; i<=5; i++) {s+=ptr [k+i][l+6-i];}
if (s==5) {exit = 1;goto help;}
else if(s==30) {exit = 6;goto help;}}}
exit = 0;
help: if (exit==1) {printf ("我好不容易心动一次,你却让我输的这么彻底,焯!n"); return 1;}
else if (exit==6) {printf ("你怎么这么菜,人工智障都打不过。n");return 1;}
else return 0;
}



