2013-11-04 52 views
0

我正在嘗試創建遊戲Chomp。我半路過,但相當卡住。C - Chomp問題

遊戲將有5個不同的功能。指針和結構是不允許的。

a)initialize()將矩陣中的每個位置初始化爲'O'。沒有參數或返回值。

B)print_board()打印矩陣。沒有參數或返回值。

c)get_move()掃描播放器(行和列)的移動並用數組「返回」它。參數:關於它是誰的信息(玩家1或玩家2)以及包含兩個元素的數組,其中移動座標將被存儲。沒有回報價值。

d)check_move()控制移動是否合法(不在矩陣之外而不是已經被吃掉的位置)。參數:要檢查的移動(行和列)。返回值:控件的結果。 < ------ ???????

E)update_board()更新矩陣。參數:新移動(行和列)。沒有回報價值。

這是我走到多遠,我卡在check_move()函數。我不明白我將從這個功能返回什麼。

#include <stdio.h> 

int height = 4; 
int width  = 10; 
char matrix[4][10]; 


void initialize() 
{ 
    for(int row = 0; row < height; row++) 
     for(int col = 0; col < width; col++) 
      matrix[row][col] = 'O';   
} 



void print_board() 
{ 
    for(int row = 0; row < height; row++) 
    { 
     for(int col = 0; col < width; col++) 
     { 
      printf("%c", matrix[row][col]); 
     } 
     printf("\n"); 
    } 
    printf("\n"); 
} 



void get_move(int player, int input[]) 
{ 
    printf("Player %d, make your move: ", player); 
    scanf("%d %d", &input[0], &input[1]); 
} 



int check_move(int position[]) 
{ 
    int row = position[0]; 
    int col = position[1]; 

    if(row <= height && col <= width) 
    { 
     for(row; row <= height; row++) 
     { 
      for(col; col <= width; col++) 
      { 
       if(matrix[row][col] == ' '); 
       printf("Invalid move! \n"); 
      } 
     }  
    } 
} 



void update_board(int x, int y) 
{ 
    for(int xi = x; xi <= 10; ++xi) 
    { 
     for(int yi = y; yi <= 10; ++yi) 
      matrix[xi-1][yi-1] = ' '; 
    } 


} 



int main(void) 
{ 

    int player = 1; 
    int position[2]; 

    initialize(); 
    print_board(); 

    get_move(player, position); 

    check_move(position); 

    update_board(position[0], position[1]); 

    print_board(); 



    getchar(); 
    getchar(); 
    getchar(); 


    return 0; 
} 
+0

我假設你會返回true/fale(1/0)並對此採取行動。 – OldProgrammer

+1

耶,好縮進! (真的。珍稀鳥:-)) – 2013-11-04 21:00:16

+0

將'check_move'重命名爲'valid_move()';當建議的移動有效時使其返回'1',當它無效時返回'0'。然後你可以寫下如下內容:'do getmove(...); while(!valid_move(...));'。代碼中還需要更多的循環。 –

回答

0

您應該返回從check_move的值,因爲它的原型是這樣,我想你想的地方使用退出狀態? :

int check_move(int position[]) 

您需if結束還有不必要的;

int check_move(int position[]) 
{ 

    int row = position[0]; 
    int col = position[1]; 
    int status = 1; 

    if(row <= height && col <= width) 
    { 
     for(row; row <= height; row++) 
     { 
      for(col; col <= width; col++) 
      { 
       if(matrix[row][col] == ' ') //removed ";" from end of line, otherwise, 
       {        //printf will always be called 
        printf("Invalid move! \n"); 
        return 0; 
       }//also added brackets to force return if error (only need one error to return) 
      } 
     } 
    } 
    return status; //added return status 
} 

所以,現在在主,你會做東西這樣叫check_move()

int main(void) 
{ 

    int player = 1; 
    int position[2]; 

    initialize(); 
    print_board(); 

    get_move(player, position); 

    while(check_move(position) != 1) 
    { 
     printf("Try again!\n\n"); 
     print_board(); 
     get_move(player, position); 
    } 


    update_board(position[0], position[1]); 

    print_board(); 

    getchar(); 
    getchar(); 
    getchar(); 

    return 0; 
} 
+0

好吧,所以在** update_board()**我現在必須檢查if ** status == 1 **,如果它是1,我將執行代碼。否則我會做什麼? – user2952320

+0

通常情況下,除非函數的返回狀態顯示成功,否則不執行流中的下一項,您將指示用戶再次嘗試該輸入(可能在while循環中)。請參閱我的編輯:) – ryyker

+0

但是我不能檢查** status == 1 **是否在其他函數中,因爲** status **不是全局變量,並且我不允許再有全局變量。但**狀態**不必是全球性的,因爲我將它返回,對吧?但其他函數不知道** status **是什麼。 – user2952320