2011-02-25 2 views
0

정말 간단한 주사위 게임을 만들려고 노력하고 있습니다 ... 주사위 롤러 게임과 더 비슷하지만 아직 답을 찾을 수없는 문제가 발생했습니다. 그래서 분명히 다이 페이스 (6)에 대해 6 개의 이미지가 있지만 어딘가에 놓친 것은 "주사위가 굴릴 때"이미지에 기본적으로 값을 할당하는 방법입니다. 그래서 일부 게임 논리를 구현하기 시작할 때 나는 죽은 얼굴의 수를 비교할 수 있습니다. 여기까지 내가 지금까지 가지고있는 것이고, 평소와 같이 어떤 도움이라도 대단히 감사 할 것입니다.이미지에 값 지정하기

public class CrapsGameActivity extends CrapsActivity { 
    private final int rollAnimations = 50; 
    private final int delayTime = 15; 
    private Resources res; 
    private final int[] diceImages = new int[]{R.drawable.die1, R.drawable.die2, 
      R.drawable.die3, R.drawable.die4, R.drawable.die5,R.drawable.die6}; 
    private Drawable dice[] = new Drawable[6]; 
    private final Random randomGen = new Random(); 

    private int diceSum; 
    private int roll[] = new int[] {6,6}; 
    private ImageView die1; 
    private TextView die1_Total; 
    private int die1_number; 
    private ImageView die2; 
    private TextView die2_Total; 
    private TextView diceTotal; 
    private LinearLayout diceContainer; 
    private Handler animationHandler; 
    private long lastUpdate = -1; 
    private float x, y, z; 
    private float last_x, last_y, last_z; 
    private boolean paused = false; 
    private static final int UPDATE_DELAY = 50; 


    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     paused = false; 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.game); 
     setTitle(getString(R.string.app_name)); 
     res = getResources(); 

     for (int i = 0; i<6; i++){ 
      dice[i] = res.getDrawable(diceImages[i]); 
     } 


     diceContainer = (LinearLayout) findViewById(R.id.diceContainer); 
     diceContainer.setOnClickListener(new OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       try{ 
        rollDice(); 
        die1_Total.setText("" + roll[0]); 
        die2_Total.setText("" + roll[1]); 
        diceTotal.setText(""+ diceSum); 
       }catch(Exception e) {}; 
      }//end of onClick 
     });//end of onClick listener 

     die1 = (ImageView) findViewById(R.id.die1); 
     die1_Total = (TextView) findViewById(R.id.TV_die1); 
     die2 = (ImageView) findViewById(R.id.die2); 
     die2_Total = (TextView) findViewById(R.id.TV_die2); 

     diceTotal = (TextView) findViewById(R.id.TV_diceTotal); 


     animationHandler = new Handler(){ 
      public void handleMessage(Message msg){ 
       die1.setImageDrawable(dice[roll[0]]); 
       die2.setImageDrawable(dice[roll[1]]); 
      }//end of handle message 
     };//end of Handler 
    } 


    private void rollDice() { 
     if(paused) return; 
     new Thread(new Runnable(){ 
      @Override 
      public void run(){ 
       for(int i = 0; i < rollAnimations; i++){ 
        doRoll(); 
       }//end of for statement 
      }//end of run() 
     }).start();//end of thread 
    }//end of rollDice() 


    private void doRoll(){//only does a single roll 
     roll[0] = randomGen.nextInt(6); 
     roll[1] = randomGen.nextInt(6); 
     diceSum = roll[0] + roll[1] + 2;  


     synchronized(getLayoutInflater()){ 
      animationHandler.sendEmptyMessage(0); 
     } 
     try{//delay for smooth animations 
      Thread.sleep(delayTime); 
     }catch(final InterruptedException e){ 
      e.printStackTrace(); 
     } 
    }//end of doRoll() 


    public void onResume(){ 
     super.onResume(); 
     paused = false; 
    }//end of onResume() 


    public void onPause(){ 
     super.onPause(); 
     paused = true; 
    }//end of onPause() 

}//end of activity 

제대로 수행하지 않았지만 코드 (아래). 에뮬레이터에서 숫자를보기 위해이 값을 사용하면 무작위이며 주사위의 액면가에 해당하지 않습니다. 마치 주사위의 액면가를 합치려면 (다시 지금 뛰었습니다) 0은 6면, 2면은 3면으로 총 주사위면 9를 주어야하지만 2 점을 얻습니다.

public void onClick(View v) { 
       try{ 
        rollDice(); 
        die1_Total.setText("" + roll[0]); 
        die2_Total.setText("" + roll[1]); 
        diceTotal.setText(""+ diceSum); 
       }catch(Exception e) {}; 
+2

그것은 관련이 없지만 'extends CrapsActivity'를 사용하여 코드를 게시하면 약간 웃을 수 있습니다. – corsiKa

+0

나는 상당한 시간 동안 코드를 쳐다 보면서 '사소한 일들'에서 웃음을 뽑아 낼 수있을 것 같았습니다. – FROSTYSMOOTH

답변

0
roll[0] = randomGen.nextInt(6); 
roll[1] = randomGen.nextInt(6); 

은 값이 있습니다. 이미지에 데이터가 포함되는 것을 원하지 않습니다 (또는 적어도 신경 쓰지 않을 것입니다). 대신 이러한 값을 기반으로 이미지/애니메이션을 렌더링 한 다음 나중에 해당 값으로 직접 작업 할 수 있습니다.

이미지와 함께 값을 저장하려는 경우 언제든지 개체 (GameDie)를 만들어 이미지와 현재 값을 저장할 수 있습니다.

+0

그들은 임의의 다이 페이스에 해당하는 랜덤, 너무 "무작위"입니다. 랜덤 인 경우 먼저 그 숫자를 어떻게 사용합니까? – FROSTYSMOOTH

+0

@FROSTYSMOOTH 0은 1의 롤에 해당하고, 1은 1의 롤 2에 해당합니다. 배열의 이미지는 동일한 순서 ({face1, face2, face3, ...})로 저장되고 일치합니다. 주사위의 6면과 일치하도록 0의 무작위 값을 설정해야하는 이유가 없다면? 롤의 실제 정수 값을 원한다면 분명히 각 다이에 1을 더해야하지만 두 롤을 합산했을 때 이미 그렇게했습니다. – Kendrick

+0

그럼 내가 뭔가 잘못 했어야합니다. 에뮬레이터를 테스트 할 때 첫 번째 다이가 1이고 다이 페이스가 3이고 다른 다이에서 나는 1의 값을 가지고 있기 때문입니다. 2의 주사위는 1의 값을 가지지 만 다른 얼굴 값이 표시됩니다. 그것들은 순차적으로 적재 되었기 때문에 나는 완전히 혼란 스럽다고 생각합니다. – FROSTYSMOOTH

관련 문제