2016-11-06 3 views
-2

8 x 8 체커 게임을 만들려고했습니다. 나는 원하는 'X'문자를 선택하기 위해 2 차원 배열에서 하이픈 '_'을 이동하려고합니다. 하이픈 '_'을 탐지하기 위해 if 문을 만들었지 만 코드가 작동하지 않는 것처럼 보입니다. 정말 도움이 필요합니다. 나는 프로그래밍에 초보적이다.2d 배열의 문자 이동

#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; 
}