присвоение значения изображению - PullRequest
0 голосов
/ 25 февраля 2011

Итак, я пытаюсь создать настоящую простую игру в кости ... больше похожую на игру в кости, и я столкнулся с проблемой, для которой мне еще предстоит найти ответ.Итак, очевидно, что у меня есть 6 изображений для штампов (1-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) {}; 

1 Ответ

0 голосов
/ 25 февраля 2011
roll[0] = randomGen.nextInt(6);
roll[1] = randomGen.nextInt(6);

Есть ваши ценности. Вы не хотите, чтобы изображение содержало данные (или, по крайней мере, я бы не стал беспокоиться). Вместо этого вы визуализируете изображения / анимацию на основе этих значений, а затем можете работать с этими значениями непосредственно позже.

Если вы хотите сохранить значения с изображениями, вы всегда можете создать объект (GameDie) и сохранить там изображения и текущее значение.

...