2012-11-02 2 views
0

나는 주사위 게임을 가지고 있으며, 주사위가 "죽은 주사위"이미지로 굴린 후에 선택한 주사위 이미지를 변경하려고합니다. 나는 내가 생각할 수있는 모든 것을 시도해 보았습니다. 그리고 나는 언제나 인덱스에서 값 "0"을 찾거나 결국은 정확한 다이를 찾지 못합니다.배열 값을 기반으로 한 이미지

주사위를 선택하면 값이 음수로 설정됩니다. 예 6을 선택하여 값을 -6으로 변경하고 다이를 -6 다이 이미지로 변경합니다.

원하는 "DEAD"이미지를 표시하고 유지하려면 어떻게해야합니까? 여기

은 내가 다의 가능한 모든 조합에

return letterImages.get(index); 

를 변경하고 내가 어떻게해야합니까 때 항상 종료 이미지를 변경하는 것을 시도했다

  //Get the Dice Images 
      public Integer getImage(int index) { 
       if (diceValues[index] == 0) { 
         return letterImages.get(index); 

       } else { 
         return diceImages.get((diceValues[index])); 
       } 
      } 

이미지를 얻을 수있는 영역입니다 "0"또는 선택한 주사위의 현재 수 또는 다른 숫자가 어떻게 생겼는지 확실하지 않습니다. 여기

은 주사위 값) (때문에 당신의 rollDice에 다음 줄의 롤에 방법 제로가 될 수 없다

package com.mygames.dice; 

import java.util.HashMap; 
import android.util.Log; 

public class DieManager { 

     // Will return the Indexes of the dice when this is used 
     public static final int INDEX_FLAG = 1; 
     // Will return the values of the dice when this is used 
     public static final int VALUE_FLAG = 2; 
     // Will return the absolute values of the dice when this is used 
     public static final int ABS_VALUE_FLAG = 3; 

     // The array that holds the dice 
     private int[] diceValues = { 0, 0, 0, 0, 0, 0 }; 

     private HashMap<Integer, Integer> diceImages = new HashMap<Integer, Integer>(); 
     private HashMap<Integer, Integer> deadImages = new HashMap<Integer, Integer>(); 
     private HashMap<Integer, Integer> letterImages = new HashMap<Integer, Integer>(); 

     // Sets @newValue to dieValues[@index] 
     public void setValue(int index, int newValue) { 
       Log.w(getClass().getName(), "Index = " + index + " Value = " + newValue); 
       diceValues[index] = newValue; 
     } 

     public DieManager() { 
       super(); 
       initializeMaps(); 
     } 

     private void initializeMaps() { 

       diceImages.put(-6, R.drawable.die6_select); 
       diceImages.put(-5, R.drawable.die5_select); 
       diceImages.put(-4, R.drawable.die4_select); 
       diceImages.put(-3, R.drawable.die3_select); 
       diceImages.put(-2, R.drawable.die2_select); 
       diceImages.put(-1, R.drawable.die1_select); 

       diceImages.put(1, R.drawable.die1_roll); 
       diceImages.put(2, R.drawable.die2_roll); 
       diceImages.put(3, R.drawable.die3_roll); 
       diceImages.put(4, R.drawable.die4_roll); 
       diceImages.put(5, R.drawable.die5_roll); 
       diceImages.put(6, R.drawable.die6_roll); 


       deadImages.put(-1, R.drawable.die1_dead); 
       deadImages.put(-2, R.drawable.die2_dead); 
       deadImages.put(-3, R.drawable.die3_dead); 
       deadImages.put(-4, R.drawable.die4_dead); 
       deadImages.put(-5, R.drawable.die5_dead); 
       deadImages.put(-6, R.drawable.die6_dead); 

       letterImages.put(0, R.drawable.die_no); 
       letterImages.put(1, R.drawable.die_no); 
       letterImages.put(2, R.drawable.die_no); 
       letterImages.put(3, R.drawable.die_no); 
       letterImages.put(4, R.drawable.die_no); 
       letterImages.put(5, R.drawable.die_no); 

     } 

     public void rollDice() { 

       boolean isNewRound = (numOnTable() == 0); 
       for (int j = 0; j < 6; j++) { 

         // If its a new round then the dice value can be changed from 0. 
         // Else it can't 
         if (isNewRound || diceValues[j] != 0) 
           diceValues[j] = (int) ((Math.random() * 6) + 1); 
       } 
     } 

     // Returns the value or absolute value 
     public int getValue(int index, int flag) { 
       if (flag == ABS_VALUE_FLAG) 
         return Math.abs(diceValues[index]); 

       return diceValues[index]; 
     } 

     // If a dice value is 0 then its a letter 
     public int numOnTable() { 
       int count = 6; 
       for (int i : diceValues) { 
         if (i == 0) 
           count--; 
       } 
       return count; 
     } 

     // Picking up makes the dice value 0 
     public void pickUp(int[] highlighted) { 

       for (int i = 0; i < highlighted.length; i++) 
         diceValues[highlighted[i]] = 0; 

     } 

     // A negative value means a die is highlighted 
     public void toggleHighlight(int index) { 
       diceValues[index] *= -1; 
     } 

     public void clearTable() { 
       diceValues[0] = 0; 
       diceValues[1] = 0; 
       diceValues[2] = 0; 
       diceValues[3] = 0; 
       diceValues[4] = 0; 
       diceValues[5] = 0; 

     } 

     // Return the dice that aren't 0 
     public int[] diceOnTable(int flag) { 
       if (flag == ABS_VALUE_FLAG) { 
         int[] array = new int[diceValues.length]; 

         for (int i = 0; i < diceValues.length; i++) 
           array[i] = Math.abs(diceValues[i]); 

         return array; 
       } 

       return diceValues; 
     } 

     //Returns dice that are negative 
     public int[] getHighlighted(int flag) { 
       int[] dirtyArray = { 0, 0, 0, 0, 0, 0 }; 
       int count = 0; 

       for (int j = 0; j < 6; j++) { 
         if (diceValues[j] < 0) { 

           if (flag == INDEX_FLAG) 
             dirtyArray[count++] = j; 

           if (flag == VALUE_FLAG) 
             dirtyArray[count++] = diceValues[j]; 

           if (flag == ABS_VALUE_FLAG) 
             dirtyArray[count++] = Math.abs(diceValues[j]); 
         } 
       } 

       int[] cleanArray = new int[count]; 

       //Returns an array of length 0 
       if (count == 0) 
         return cleanArray; 

       System.arraycopy(dirtyArray, 0, cleanArray, 0, count); 
       return cleanArray; 

     } 

     // Finds in dieValues same @value and excludes @index 
     public int[] findPairs(int index, int flag) { 

       int[] dirtyArray = { 0, 0, 0, 0, 0, 0 }; 

       int count = 0; 

       for (int j = 0; j < 6; j++) { 

         if (j != index 
             && Math.abs(diceValues[j]) == Math.abs(diceValues[index])) { 

           if (flag == INDEX_FLAG) 
             dirtyArray[count++] = j; 

           if (flag == VALUE_FLAG) 
             dirtyArray[count++] = diceValues[j]; 

           if (flag == ABS_VALUE_FLAG) 
             dirtyArray[count++] = Math.abs(diceValues[j]); 
         } 

       } 

       int[] cleanArray = new int[count]; 

       if (count == 0) 
         return cleanArray; 

       System.arraycopy(dirtyArray, 0, cleanArray, 0, count); 
       return cleanArray; 
     } 

      //Get the Dice Images 
      public Integer getImage(int index) { 
       if (diceValues[index] == 0) { 
         return letterImages.get(index); 

       } else { 
         return diceImages.get((diceValues[index])); 
       } 
      } 

      //Get the Number of dice remaining that are not 0 
      public int numDiceRemain() { 
       int counter = 0; 
       for (int j = 0; j < diceValues.length; j++) { 
         if (diceValues[j] > 0) 
          counter++; 
       } 
       return counter; 
      } 
} 

답변

0

전체 DieManager 클래스입니다 :

diceValues[j] = (int) ((Math.random() * 6) + 1); 

그리고 이것은 논리적 보인다 나에게. 왜 다이의 가치가 제로가 될까요?

+0

주사위를 "on"으로 선택하고 다시 굴린 후에는 값이 "0"이되어 점수 뒤에 Dead Die라고 표시됩니다. – Sobo

관련 문제