2017-03-22 8 views
0

これは非常に簡単な解決策ですが、私は何か間違っていることを理解できません。私は接続するアンドロイドスタジオで小さなゲームを作っています4。5x7の単セルマトリックス、クリックしたときの画像ビューが5つあり、フィッシュを適切な場所に置いてください。これまですべて正常に動作しています。しかし、誰かが勝ったかどうかを確認する必要があるとき、私は4つの主な機能、すなわち水平に、垂直に1つ、斜めに左から右に1つ、右から左に斜めに1つずつプロセスを分割することができると考えた。今、彼らはすべて右のものを除いて完全に動作します。私は以下のコードを投稿します:右から左に4つの対角線チェックを接続します

private void checkRightLeftDiagonally() { 
    int winCondition = 0; 
    boolean goingRight = true; 
    int y = 1; 
    int i = 4; 
    int j = 0; 
    while (y < 6 && won == false) { 
     while (i > 0 && j < 7 && won == false) { 
      if (cells[j][i].getFull() == true && players[playerTurn].getFicheColor() == cells[j][i].getFicheColor()) { 
       winCondition++; 
       winningCells.add(cells[j][i]); 
      } else { 
       winCondition = 0; 
       winningCells.clear(); 
      } 

      if (winCondition == 4) { 
       won = true; 
       for (int x = 0; x < 4; x++) { 
        winningCells.get(x).won(); 
       } 
      } 
      i--; 
      j++; 
     } 

     if(goingRight == true) 
     { 
      if(y<=4) 
      { 
       i=4-y; 
       j=0; 
       y++; 
      } 
      else 
      { 
       goingRight = false; 
       y=0; 
       i=0; 
       j=0+y; 
      } 
     } 

     if(goingRight == false) 
     { 
      i=0; 
      j=0+y; 
      y++; 
     } 

     if(won == false) 
     { 
      winCondition = 0; 
      winningCells.clear(); 
     } 


    } 
    if(won == false) { 
     winCondition = 0; 
     winningCells.clear(); 
    } 

    } 

そしてここでは、矢印ImageViewのコードのいずれかです。

imgArrows[0].setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if(cells[0][0].getFull() == false && won == false) 
      { 
       int i = 0; 
       while(cells[i][0].getFull() == false) 
       { 
        i++; 
     if(i>6) break; 
       } 

     i--; 

       cells[i][0].ficheDown(players[playerTurn]); 

       checkVertically(); 
       checkHorizantally(); 
       checkLeftRightDiagonally(); 
       checkRightLeftDiagonally(); 





       playerTurn++; 
       if(playerTurn==2) 
       { 
        playerTurn = 0; 
       } 


      } 
     } 
    }); 

それはあなたを助けることができれば、私もここにあるセルクラスを作った

public class Cell { 
private boolean full; 
private Player.FicheColor ficheColor; 
private ImageView fiche; 

public Cell(Player currentPlayer, ImageView img) 
{ 
    full = false; 
    ficheColor = currentPlayer.getFicheColor(); 
    fiche = img; 
    img.setAlpha(0f); 
} 

public void ficheDown(Player currentPlayer) 
{ 
    full = true; 
    ficheColor = currentPlayer.getFicheColor(); 
    switch(ficheColor) 
    { 
     case red: 
      fiche.setImageResource(R.drawable.redfiche); 
      break; 

     case blue: 
      fiche.setImageResource(R.drawable.bluefiche); 
      break; 

     case green: 
      fiche.setImageResource(R.drawable.greenfiche); 
      break; 

     case white: 
      fiche.setImageResource(R.drawable.whitefiche); 
      break; 

     case black: 
      fiche.setImageResource(R.drawable.whitefiche); 
      break; 
    } 
    fiche.setAlpha(1f); 

} 

public Player.FicheColor getFicheColor() 
{ 
    return ficheColor; 
} 

public boolean getFull() 
{ 
    return full; 
} 

public void won(){ 
    fiche.setColorFilter(Color.GREEN); 
} 

public void reset() 
{ 
    fiche.clearColorFilter(); 
} 

}

だけでも

を読み取るための、たくさんありがとうございました10
+0

アルゴリズムは機能しませんか?混乱を少なくするために、図面コードを削除することをお勧めします。 –

+0

問題は、左右対角線のセルをチェックするアルゴリズムです。開始位置([0] [4])から最初の対角線のみを取得し、その後はゼロになります。例えば、左から右は完璧です:c。しかし、私はちょうど私はおそらくコードは、チップのおかげで、おかげで見えるかもしれない細胞のクラスなしと思ったので、図面コードを掲載しました – Nicola36631

+0

私はあなたのコードを見てみて、いくつかの混乱がありました。 、いくつかの提案:(それはバグも同様である場所を把握するのに役立ちます): 私は、J、K - 、goingRight変数が非常に混乱して... currentRowの、currentColumnに をそれらの名前を変更なぜあなたは変化していますそれは今までの偽り?メソッドが右から左にチェックしている、それは常に真実でなければなりません。 –

答えて

0

最後に問題は、コードの最初の段落でint iを4に設定する必要があり、それが解決したということでした。

関連する問題