#include <stdio.h>
int main(){
int x,y;
int xy[3][3]={
{8,8,8},
{8,8,8},
{8,8,8},
};
int i=2;
printf(" 1 2 3\n\n1 %d|%d|%d\n -----\n2 %d|%d|%d\n -----\n3 %d|%d|%d\n",xy[0][0], xy[0][1], xy[0][2], xy[1][0], xy[1][1], xy[1][2], xy[2][0], xy[2][1], xy[2][2]);//排出井字棋
while(i==2){
const int SIZE = 3;
int t,j;
int hz,hf,lz,lf,zdjz,zdjf,fdjz,fdjf; //定義行,列,對角線的正反方計數變數
hz=hf=lz=lf=zdjz=zdjf=fdjz=fdjf=0;//初始化變數
//輸入
do{
printf("正方,請在8的區域輸入:");
scanf("%d,%d", &x, &y);
} while(xy[x-1][y-1]!=8 || x>3 || x<1 || y>3 || y<1 );//檢查
xy[x-1][y-1]=1; //1為正方
printf(" 1 2 3\n\n1 %d|%d|%d\n -----\n2 %d|%d|%d\n -----\n3 %d|%d|%d\n",xy[0][0], xy[0][1], xy[0][2], xy[1][0], xy[1][1], xy[1][2], xy[2][0], xy[2][1], xy[2][2]);//排出井字棋
//回圈判斷
for(t=0; t<SIZE; t++){
hz=lz=0;
for(j=0; j<SIZE; j++){
//檢查行
if(xy[t][j]==1 && xy[t][j]!=8){
hz++;
}
if(hz==3){
i=1;
goto out;
}
//檢查列
if(xy[j][t]==1 && xy[j][t]!=8){
lz++;
}
if(lz==3){
i=1;
goto out;
}
}
//檢查正對角線
if(xy[t][t]==1 && xy[t][t]!=8){
zdjz++;
}
if(zdjz==3){
i=1;
goto out;
}
//檢查反對角線
if(xy[t][SIZE-t-1]==1 && xy[t][SIZE-t-1]!=8){
fdjz++;
}
if(fdjz==3){
i=1;
goto out;
}
}
// printf("hz:%d,lz:%d,zdjz:%d,fdjz:%d\n\n",hz,lz,zdjz,fdjz);
do{
printf("反方,請在8的區域輸入:");
scanf("%d,%d", &x, &y);
} while(xy[x-1][y-1]!=8 || x>3 || x<1 || y>3 || y<1 );//檢查
xy[x-1][y-1]=0;//0為反方
printf(" 1 2 3\n\n1 %d|%d|%d\n -----\n2 %d|%d|%d\n -----\n3 %d|%d|%d\n",xy[0][0], xy[0][1], xy[0][2], xy[1][0], xy[1][1], xy[1][2], xy[2][0], xy[2][1], xy[2][2]);//排出井字棋
//回圈判斷
for(t=0; t<SIZE; t++){
hf=lf=0;
for(j=0; j<SIZE; j++){
//檢查行
if(xy[t][j]==0 && xy[t][j]!=8){
hf++;
}
if(hf==3){
i=0;
goto out;
}
//檢查列
if(xy[j][t]==0 && xy[j][t]!=8){
lf++;
}
if(lf==3){
i=0;
goto out;
}
}
//檢查正對角線
if(xy[t][t]==0 && xy[t][t]!=8){
zdjf++;
}
if(zdjf==3){
i=0;
goto out;
}
//檢查反對角線
if(xy[t][SIZE-t-1]==0 && xy[t][SIZE-t-1]!=8){
fdjf++;
}
if(fdjf==3){
i=0;
goto out;
}
}
// printf("hf:%d,lf:%d,zdjf:%d,fdjf:%d\n\n",hf,lf,zdjf,fdjf);
}
out:
if(i==1){
printf("正方勝利");
}else{
printf("反方勝利");
}
return 0;
}
學的翁愷的C語言入門,現在學到了第六周,第四節二維陣列,這里講到了井字棋,我覺得我可以用之前學過的東西寫一個,所以我就寫了一個,但是我覺得代碼應該還可以用我學的知識進行簡化,但是我不知道怎么簡化了。。。
uj5u.com熱心網友回復:
有重復,自然就可以簡化。uj5u.com熱心網友回復:
這個說的是流程上的簡化,以后還可以琢磨演算法上的簡化。uj5u.com熱心網友回復:
可是不知道怎么優化了。。。。。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/251201.html
標籤:C語言
上一篇:IAR在函式中已經宣告了外部變數 但是卻提示錯誤Undefined external "arr" referred in lvbo
