2016-08-22 9 views
0

私が今持っ問題は、私は私のコードは、私はリバーシ有効な移動アルゴリズム

dirが列挙方向から列挙型で助けと意見を求め、論理的に正しいかどうかを確認していないということです。基本的に8つの方向のEXPがあります:NORTH、NORTHWEST、東北など

があるのであれば、それぞれの方向は、私がスキャンしますトークンのいずれかのプレイヤーの、相手のか、それが空白の場合は

yはy座標でありますxはx座標です。このコードでは、私はプレーヤーの座標の北を見ています。

for(dir = NORTH; dir <= SOUTH_WEST; dir++){ 
    if(dir == NORTH){ 
     for(int i = 1; i <= BOARD_HEIGHT - y; i++){ 
//If there is no token, it would return false 
      if(board[y+1][x] == BLANK){ 
       return FALSE; 
      } 
//if there is the player's token, it would return false 
      if else(board[y+1][x] == player_token){ 
       return FALSE; 
      } 
//if there is the opponents token, it would continue up till it finds the player's token, if not then it would return false. 
      if else(board[y+i][x] != player_token){ 
       if(board[y+i][x] == player_token){ 
        captured_pieces++; 
       } 
       else{ 
        return FALSE; 
       }  

      } 

     } 
    } 
} 

改善するための任意の余地がある場合は、最初の2つのif文が内部forループの外に移動することができ、私に

+0

あなたはすべての方向にループしていますが、あなたは単に「NORTH」で何かをします。すべての方向に対して分岐を追加しても、その構造は条件なしですべての分岐と同じことを順番に実行します。 – Quentin

+0

ここには本当の技術的な質問はありません。 –

答えて

0

を教えてください。

if elseelse ifに置き換えてください(コンパイラからエラーが発生するはずです)。

プレイヤー/相手トークンのチェックでは、相手のピースはまったく確認されません。 私は次の書き換え勧め:

//if there is the opponents token, it would continue up till it finds the player's token, if not then it would return false. 
      switch (board[y+i][x]){ 
       case opponent_token: 
        // Another token potentially captured 
        captured_pieces++; 
       case player_token: 
        // Stop counting 
        break; 
       default: 
        // Empty square 
        return FALSE; 
       }  

      } 

内側のループの後に、あなたが実際にplayer_tokenがあったことを確認する必要があります。ループがボードの終わりに達したために終了した場合は、FALSEを返します。

+0

'!='と似たような、opponent_tokenを書く別の方法はありますか? – CBegin

+0

'switch'式は' if/else if/else'を使って書くことができます。 –

関連する問題