2017-11-30 7 views
-2

私はTic-Tac-Toe-Tomek(Tic-Tac-Toeのバリエーション)というゲームを作ろうとしています。 。 入力 'X'、 'O'、 'T'、 '。'スペースのため
私はprintfを使って関数の仕組みを見ています。後で私はそれらを削除します。 出力は、xが勝てば、最後の出力が勝つO場合、最後の出力は=」になります描くがある場合は、最後の出力は「O」c関数が呼び出されても印刷されず、次の関数にジャンプ

になります「X」

なります

になります'

ゲームが進行中の場合、最後の出力は'? 'になります。


私の問題は、それがチェックを印刷していないため、入力が

...X 
..X. 
.X.. 
X... 

ある.When出力は

する必要があります(ゲームは[] [4]) 動作しないという機能dia2_checkです
some reports 
then 
dia2 0 check 3 x=1 o=0 
dia2 1 check 2 x=2 o=0 
dia2 2 check 1 x=3 o=0 
dia2 3 check 0 x=4 o=0 
then x 

しかし、私は何を取得することは

some reports then 
dia 0 check 0 x=1 o=0 
. 
. 
dia 3 check 3 x=4 o=0 
(which all is right) then 
draw 0 col 0 D 0 
draw 0 col 1 D 0 
. 
. 
. 
draw 3 col 3 D 4 
です

プログラムはdia2のチェックを飛び越して、ドローチェックを開始しました。 彼女は私が見つけることができませんコード

 #include<stdio.h> 

    /*how the program will worke 
    A)set functions 
     1-row check 
     2-column check 
     3 diagonal check 
     4 the other diagonal check 
     5 draw and game in progress check 
     6 call functions (which will control and check all the possibilities using the 
      other functions) 
    B)main 
     will take the input pass it to the functions 
    */ 


///////////////////////////////////////////////////////////////////////// 
    int row_check(char game[4][4]) 
    {/*row check*/ 
     int xwin; 
     int owin; 
     char x='X'; 
     char o='O'; 

    for(int i=0; i<4; i++){ 

    xwin=0; 
    owin=0; 
    for(int j=0; j<4; j++){ 
     if(game[i][j]=='X'||game[i][j]=='T'){ 
     xwin++; 
     } 
     else if (game[i][j]=='O'||game[i][j]=='T'){ 
     owin++; 
     } 
     printf("row %d col %d x=%d o=%d\n",i,j,xwin,owin); 
    }//close loop J// 
    printf(" reset check x=%d o=%d\n",xwin,owin); 
    if(xwin==4||owin==4){ 
    break; 
    } 

    }//close loop i// 

    if(xwin==4){// the return will be used later in call_func// 
    return x; 
    } 
    else if(owin==4){ 
    return o; 
    }; 
}//close row_check// 


////////////////////////////////////////////////////////////////////////////// 

int col_check(char game[][4]) 
{/*column check*/ 
    int xwin=0; 
    int owin=0; 
    char x='X'; 
    char o='O'; 

    for(int j=0; j<4; j++){ 
     xwin=0; 
     owin=0; 
     for(int i=0; i<4; i++){ 
      if(game[i][j]=='X'||game[i][j]=='T') 
       xwin++; 
      else if (game[i][j]=='O'||game[i][j]=='T') 
       owin++; 
      printf("col %d col %d x=%d o=%d\n",i,j,xwin,owin); 
     }//close loop i// 
     printf(" reset check x=%d o=%d\n",xwin,owin); 
     if(xwin==4||owin==4) 
      break; 
    }//close loop j// 
    if(xwin==4){// the return will be used later in call_func// 
     return x; 
    } 
    else if(owin==4){ 
     return o; 
    }; 
}//close row_check// 
////////////////////////////////////////////////////////////////////////// 


int dia_check(char game[][4]) 
{//diagonal check// 
    int xwin=0; 
    int owin=0; 
    int j=0; 
    char x='X'; 
    char o='O'; 


    for(int i=0; i<4; i++){ //row increase by 1// 

      if(game[i][j]=='X' || game[i][j]=='T') 
      xwin++; 
      else if (game[i][j]=='O' || game[i][j]=='T') 
      owin++; 

      printf("dia %d check %d x=%d o=%d\n",i,j,xwin,owin); 
      j++; 
    }//close loops i// 
    if(xwin==4){// the return will be used later in call_func// 
     printf("x\n"); 
     return x; 
    } 
    else if(owin==4){ 
     return o; 
    }; 

}//close dia_check// 
////////////////////////////////////////////////////////////////////////// 

int dia2_check(char game[][4]) 
{//the other diagonal check// 
    int xwin=0; 
    int owin=0; 
    int j=3; 
    char x='X'; 
    char o='O'; 


    for(int i=0; i>0; i++){ //row increase by 1// 

      if(game[i][j]=='X' || game[i][j]=='T'){ 
      xwin++; 
      } 
      else if (game[i][j]=='O' || game[i][j]=='T'){ 
      owin++; 
      } 
      printf("dia2 %d check %d x=%d o=%d\n",i,j,xwin,owin); 
      j--;  
    }//close loops i// 
    if(xwin==4){// the return will be used later in call_func// 
     return x; 
    } 
    else if(owin==4){ 
     return o; 
    }; 
}//close dia2_check// 
////////////////////////////////////////////////////////////////////////// 


int draw_check(char game[][4]) 
{/*draw check */ 


    int draw=0; 
    char d= '='; 
    char p= '?'; // p for game in progress// 
     for(int i=0; i<4; i++){ 
      for(int j=0; j<4; j++){ 
      if(game[i][j]=='X'||game[i][j]=='T'||game[i][j]=='O'){ 
      draw++; 

      } 
      printf("draw %d col %d D %d\n",i,j,draw); 
     } //close j for loop// 

     }//close i loop 
    if(draw==16){//the return will be used later in call_func// 
     return d; 
     } 
     else{ 
     return p; 
     } 
}//close draw check// 
////////////////////////////////////////////////////////////////////////////// 

int call_func (char game[4][4]) 
{//call functions // 

    char x ; 
    char o ; 
    char d ; 
    char p ; 
    o,x=row_check(game); 

    if(x=='X'){ 
     printf("X\n"); 
    } 
    else if(o=='O'){ 
     printf("O\n"); 
    } 
    else{//first else// 
     x,o=col_check(game); 
     if(x=='X'){ 
      printf("X"); 
     } 
     else if(o=='O'){ 
      printf("O\n"); 
     } 

     else{//second else// 
      x,o=dia_check(game); 
      if(x=='X'){ 
       printf("X"); 
      } 
      else if(o=='O'){ 
       printf("O\n"); 
      } 
      else{// third else// 
       x,o=dia2_check(game); 
       if(x=='X'){ 
        printf("X"); 
       } 
       else if(o=='O'){ 
        printf("O\n"); 
       } 
       else{//forth else// 
        p,d=draw_check(game); 
        if(d=='=') 
         printf("=\n"); 
        else if(p=='?'&& x!='X' &&o!='O') 
         printf("?\n"); 
       }//close forth else// 
      }//close third else// 
     }//close second else// 
    }//close first else// 
}//close call_func// 
////////////////////////////////////////////////////////////////////////////// 

int main() 
{ 

    char game[4][4]; 


//input to test the array // 
    printf("inputs are x,o T or . \n"); 
    for (int i=0; i<4; i++){ 
     for(int j=0; j<4; j++){ 
      printf("game[%d][%d]\n",i,j); 
      scanf(" %c",&game[i][j]); 
     } 
    }; 
    //output array// 
    for (int g=0; g<4; g++){ 
     printf("\n"); 
     for(int h=0; h<4; h++){ 
     printf("%c",game[g][h]); 
     } 
    }; 
    printf("\n"); 


    printf("[OUTPUT]\n"); 
    call_func(game); 
}//close main// 

であるという問題があります。私は、関数内の間違いがループをdia2_check見つけ

+0

出力がdia2でどのように生成されているかを説明できます0チェック0 x = 1 o = 0 –

+0

fucnction chekもしxまたはtがxwinに1を加えるなら、oまたはtが1ならowinに1を加えます xwin == 4ならxを出力し、owinと同じです。 dia2は[0] [2]から2番目の対角線を起点にする関数です dia2は行数、xはxwin oはowinです – badboys

+0

dia2 0チェック0 x = 1 o = 0平均値 関数dia2行0列0 ckeckは1 xと0です – badboys

答えて

0

は、私は常にループは常にはずです

を跳んだことになるよりも、0から始めるので、それが

for(int i=0; i>4; i++) 

でなければなりません

for(int i=0; i>0; i++) 

です私は投稿を削除するかどうか?

関連する問題