2016-11-06 13 views
-2

私は8 x 8チェッカーのゲームを作成しようとしました。私は2次元配列のハイフン '_'を移動して、私が望む文字 'X'を選択しようとしています。ハイフン '_'を検出するためのif文を作成しましたが、コードが機能していないように見えます。本当に助けが必要です。私はプログラミングが初めてです。2次元配列の文字を移動する

#include <stdio.h> 

void gameboard(char board[8][8]) 
{ 

int x, y; 

    for(x=0; x<8; x++) 
    { 
    for(y=0; y<8; y++) 
    { 
    printf("=---="); 
    } 
    printf("\n\n"); 

    for(y=0;y<8;y++) 
    { 
    printf("| %c |",board[x][y]); 
    } 
    printf("\n\n"); 
    } 


    for(x=0;x<8;x++) 
    { 
    printf("=---="); 
    } 


} 

void character(char board[8][8]) 
{ 
int x,y; 

for(x=0;x<8;x++){ 
    for(y=0;y<8;y++){ 
    if(x<3){ 

     if(x%2 == 0){ 
       if(x%2 == 0){ 
       board[x][y] = 'O'; 

       } 
       if(y%2==1){ 
       board[x][y]= ' '; 

       } 
     } 
     if(x%2 == 1){ 
       if(y%2 == 0){ 
       board[x][y] = ' '; 
       } 
       if(y%2 ==1){ 
      board[x][y]= 'O'; 

       } 
     } 

    } 

    if((x==3) || (x==4)){ 
    board[x][y] = ' '; 
    } 

    if(x>4) 
    { 

      if(x%2 == 0){ 
        if(y%2 == 0){ 
        board[x][y] = 'X'; 

        } 
        if(y%2 ==1){ 
        board[x][y]= ' '; 

        } 
      } 

      if(x%2 == 1){ 
        if(y%2 == 0){ 
        board[x][y] = ' '; 

        } 
        if(y%2 ==1){ 
        board[x][y]= 'X'; 

        } 
      } 

      if(x==5 && y ==1) 
      { 
      if(x%2 == 1){ 
        if(y%2 == 1){ 
        board[x][y] = '_'; 
        } 
       } 
      }   
    } 

    } 
    } 

} 


void playgame(char board[8][8]) 
{ 

int x=0, y=0, a, b, c=0,input; 
char token; 


printf("\n\n---START GAME---\n"); 



    if(token == '_') 
    { 
    printf("Please select your token : "); 
    } 

for(a=0; a<8; a++) 
{ 
    for(b=0; b<8; b++) 
    { 
    if(board[a][b] == token & c == 0) 
    { 
    x = a; 
    y = b; 
    c++; 
    } 
    } 
} 

    printf("1 to go right\n"); 
    printf("2 to go left\n"); 
    printf("3 to go up left\n"); 
    printf("4 to go up right\n"); 
    printf("5 to go down left\n"); 
    printf("6 to go down right\n"); 
    printf("7 to select token\n"); 
    fflush(stdin); 
    scanf("%i", &input); 

    if(input == 1) 
    { 
    board[x][y+2] = token; 
    y++; 
    } 
    else if(input == 2) 
    { 
    board[x][y-2] = token; 
    y--; 
    } 
    else if(input == 3) 
    { 
    board[x-1][y-1] = token; 
    x--; 
    y--; 
    } 
    else if(input == 4) 
    { 
    board[x-1][y+1] = token; 
    x--; 
    y++; 
    } 
    else if(input == 5) 
    { 
     board[x+1][y-1] = token; 
     x++; 
     y--; 
    } 
    else if(input == 6) 
    { 
     board[x+1][y+1] = token; 
     x++; 
     y++; 
     } 
     else 
     { 
     board[x][y] = token; 
     } 
} 


int main() 
{ 

    char bx[8][8]; 


    gameboard(bx); 

    playgame(bx); 

return 0; 

} 
+1

変数は初期化されていません。 'printf(" |%c | "、board [x] [y]);'あなたは何を印刷しますか? –

+0

@BarmakShemirani huh ..?それは文字 'O'と 'X'を出力するはずです。 – WLL

+3

'char bx [8] [8]'を宣言すると、 'printf(" |%c | "、board [x] [y])'を出力します。つまり、初期化されていない変数を出力しています。例えば、 'bx [0] [0]'はランダムな値を持ちます。変数を初期化し、人々が理解できるようにすべての装飾的な要素を取り除いてコードを単純化します。 –

答えて

0

あなたは入力に基づいて、新たな位置を計算するswitch文を使用し、その後、配列を初期化する必要があります。

古い位置を保存し、新しいセルの内容と保存された位置の古いセルの内容を入れ替えます。

int main() 
{ 
    char board[8][8]; 
    int x, y; 
    for (x = 0; x < 8; x++) 
     for (y = 0; y < 8; y++) 
      board[x][y] = '.'; 
    board[0][0] = '_'; 

    int xpos = 0; 
    int ypos = 0; 
    while (1) 
    { 
     system("cls||clear"); 
     //print board 
     for (y = 0; y < 8; y++) 
     { 
      for (x = 0; x < 8; x++) 
       printf("%c", board[x][y]); 
      printf("\n"); 
     } 
     printf("Menu\n 1 left \n2 right \n3 up \n4 down \n"); 

     int savex = xpos; 
     int savey = ypos; 
     int move = 0; 
     scanf("%d", &move); 
     char c; 
     while ((c = getchar()) != '\n' && c != EOF); 

     switch (move) 
     { 
     case 1: if (xpos > 0) xpos--; break; 
     case 2: if (xpos < 7) xpos++; break; 
     case 3: if (ypos > 0) ypos--; break; 
     case 4: if (ypos < 7) ypos++; break; 
     } 

     //swap position: 
     board[savex][savey] = '.'; 
     board[xpos][ypos] = '_'; 
    } 
    return 0; 
} 
関連する問題