0

我已经被困了一整天了,请帮助我。所以我有 2 个数组,里面装满了来自两个玩家的五个骰子,我想将它们设置为我放入可绘制对象中的相应骰子图像。这是我拥有的原始代码,在 TextView 中显示数组。

int player1[] = new int[5];
int player2[] = new int[5];
TextView p1Dice, p2Dice;

private void displayDice() {
    StringBuffer sbfNumbers = new StringBuffer();
    for (int i = 0; i < 5; i++) {
        sbfNumbers.append(player1[i] + " ");
    }
    StringBuffer sbfNumbers2 = new StringBuffer();
    for (int i = 0; i < 5; i++) {
        sbfNumbers2.append(player2[i] + " ");
    }
    p1Dice.setText(sbfNumbers.toString());
    p2Dice.setText(sbfNumbers2.toString());

我不知道如何让它显示 ImageView 。

private final static int[] diceImages = new int[] { R.drawable.d1, 
R.drawable.d2, R.drawable.d3, R.drawable.d4, R.drawable.d5, R.drawable.d6 };
ImageView p1Dice1, p1Dice2, p1Dice3, p1Dice4, p1Dice5;

for (int i = 0; i < 5; i++) {
    p1Dice[i].setImageResource(diceImage[player1[i]]);
}

我错过了什么?

这是我的完整代码,对不起,它一团糟。我刚开始自学编程,这是我的第一个程序。任何关于使它变得更好的建议也受到赞赏。

package com.kelvinblade.liardice;

import java.util.Random;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {

int player1[] = new int[5];
int player2[] = new int[5];
TextView p1Dice, p2Dice, result, whosTurn, tvLog, score;
ImageView p1Dice1, p1Dice2, p1Dice3, p1Dice4, p1Dice5;
Button openDice, callDice;
EditText NumDice, DiceNum;
int NumOfDice, DiceNumber, turn;
int currentDiceQuantity, currentDiceFace;
boolean isOneWildCard = true;
int callLog[] = new int[70];
int playerOneEnergy, playerTwoEnergy;
boolean playerOneStart = true;

private final int[] diceImages = new int[] { R.drawable.d1, R.drawable.d2, R.drawable.d3, R.drawable.d4, R.drawable.d5, R.drawable.d6 };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initializePlaceHolders();
    startGame();
}

// Initialize the Place Holders
private void initializePlaceHolders() {
    p1Dice = (TextView) findViewById(R.id.tvP1Dice);
    p2Dice = (TextView) findViewById(R.id.tvP2Dice);
    openDice = (Button) findViewById(R.id.bOpenDice);
    callDice = (Button) findViewById(R.id.bCallDice);
    whosTurn = (TextView) findViewById(R.id.tvWhosTurn);
    tvLog = (TextView) findViewById(R.id.tvLog);
    score = (TextView) findViewById(R.id.tvScore);
    result = (TextView) findViewById(R.id.tvResult);
    NumDice = (EditText) findViewById(R.id.etNumDice);
    DiceNum = (EditText) findViewById(R.id.etDiceNum);
    p1Dice1 = (ImageView) findViewById(R.id.ivDice1);
    p1Dice2 = (ImageView) findViewById(R.id.ivDice2);
    p1Dice3 = (ImageView) findViewById(R.id.ivDice3);
    p1Dice4 = (ImageView) findViewById(R.id.ivDice4);
    p1Dice5 = (ImageView) findViewById(R.id.ivDice5);
    openDice.setOnClickListener(this);
    callDice.setOnClickListener(this);
}

// Game starts here
public void startGame() {
    playerOneEnergy = 4;
    playerTwoEnergy = 4;
    playGame();
}

// Starts level
public void playGame() {
    if ((playerOneEnergy != 0) && (playerTwoEnergy != 0)) {
        initialize();
        player1 = rollDice();
        player2 = rollDice();
        displayDice();
        displayTurn();
    } else if (playerTwoEnergy == 0) {
        result.setText("Loading Next Stage!");
        startGame();
    } else
        result.setText("Game Over!");
}

// Initialize the Variables
private void initialize() {
    turn = 0;
    currentDiceQuantity = 0;
    currentDiceFace = 0;
    result.setText("New Game.");
    tvLog.setText("Game Log:");
}

// Rolls the Dice
private int[] rollDice() {
    int[] diceArray = new int[5];
    Random randomDice = new Random();
    for (int i = 0; i < 5; i++) {
        diceArray[i] = randomDice.nextInt(6) + 1;
    }
    return diceArray;
}

// Displays the Dice for Player 1 & 2
private void displayDice() {
    StringBuffer sbfNumbers = new StringBuffer();
    for (int i = 0; i < 5; i++) {
        sbfNumbers.append(player1[i] + " ");
    }
    StringBuffer sbfNumbers2 = new StringBuffer();
    for (int i = 0; i < 5; i++) {
        sbfNumbers2.append(player2[i] + " ");
    }
    p1Dice.setText(sbfNumbers.toString());
    p2Dice.setText(sbfNumbers2.toString()); 

// try to display the dice array as image   <here's the problem>
    for (int i = 0; i < 5; i++) {
    p1Dice[i].setImageResource(diceImage[player1[i]]);
    }
    }

// Button actions
public void onClick(View v) {
    switch (v.getId()) {
    case R.id.bCallDice:
        try {
            getCall();
        } catch (Exception e) {
            Dialog d = new Dialog(this);
            d.setTitle("Invalid call. Please try again.");
            d.show();
        }
        if ((validInput()) && (validCall())) 
            runCall();          
        else
            result.setText("Invalid call");
        break;
    case R.id.bOpenDice:
        checkDice();
        break;
    }
}

private void runCall() {
    currentDiceQuantity = NumOfDice;
    currentDiceFace = DiceNumber;
    result.setText("Valid call");
    writeLog();
    displayLog();
    turn++;
    displayTurn();
}

private void startAImove() {
    Random randomAction = new Random();
    int randomCall = randomAction.nextInt(1);
    if ((randomCall == 0) && (!isFirstMove()))
        checkDice();
    else {
        while (!validCall()) {
            NumOfDice = randomAction.nextInt(5) + 1;
            DiceNumber = randomAction.nextInt(5) + 1;
        }
        runCall();
    }
}

// Gets the Call from Player 1
private void getCall() {
    String s = NumDice.getText().toString();
    NumOfDice = Integer.parseInt(s);
    String s1 = DiceNum.getText().toString();
    DiceNumber = Integer.parseInt(s1);
    if (DiceNumber == 1) {
        isOneWildCard = false;
    }
}

// Checks to see if the call is a valid input
private boolean validInput() {
    int MaxNumOfDice = 5;
    int MaxDiceQuantity = 6;
    if ((NumOfDice <= MaxNumOfDice * 2) && (DiceNumber <= MaxDiceQuantity)) {
        return true;
    } else
        return false;
}

// Checks to see if Valid Call
private boolean validCall() {
    if (NumOfDice > currentDiceQuantity) {
        return true;
    } else if (((NumOfDice == currentDiceQuantity) && (currentDiceFace != 1))
            && ((DiceNumber == 1) || (DiceNumber > currentDiceFace))) {
        return true;
    } else {
        return false;
    }
}

// Writes to Log
private void writeLog() {
    callLog[turn * 2] = currentDiceQuantity;
    callLog[turn * 2 + 1] = currentDiceFace;
}

// Display Log
private void displayLog() {
    StringBuffer sbfNumbers = new StringBuffer();
    sbfNumbers.append("Game Log:\n");
    for (int i = 0; i < turn + 1; i++) {
        sbfNumbers.append((i + 1) + ": Player" + (i % 2 + 1) + " "
                + callLog[i * 2] + "x" + callLog[i * 2 + 1] + "\n");
    }
    tvLog.setText(sbfNumbers.toString());
}

// Display who's turn
public void displayTurn() {
    if (whichPlayersTurn() == 1)
        whosTurn.setText("Player 1's Turn...");
    else {
        whosTurn.setText("Player 2's Turn...");
    //  startAImove();
    }
}

// Checks who's turn
private int whichPlayersTurn() {
    boolean isTurnEven = false;
    if (turn % 2 == 0)
        isTurnEven = true;
    if (((playerOneStart) && (isTurnEven))
            || ((!playerOneStart) && (!isTurnEven))) {
        return 1;
    } else
        return 2;
}

// Checks if it's the first move
private boolean isFirstMove() {
    if (currentDiceQuantity == 0)
        return true;
    else
        return false;
}

// Checks the Player 1 & 2 for the Dice
private void checkDice() {
    if (!isFirstMove()) {
        int DiceCount = 0;
        for (int i = 0; i < 5; i++) {
            if (player1[i] == DiceNumber)
                DiceCount++;
            if (player2[i] == DiceNumber)
                DiceCount++;
            if ((player1[i] == 1) && (isOneWildCard))
                DiceCount++;
            if ((player2[i] == 1) && (isOneWildCard))
                DiceCount++;
        }
        if (((DiceCount >= NumOfDice) && (whichPlayersTurn() != 1))
                || ((DiceCount < NumOfDice) && (whichPlayersTurn() == 1))) {
            result.setText("Player 1 Wins!");
            playerTwoEnergy--;
            playerOneStart = false;
        } else {
            result.setText("Player 1 Loses!");
            playerOneEnergy--;
            playerOneStart = true;
        }
        displayWinLost();
        playGame();
    } else
        result.setText("Can not open on first move!");
}

// Display Win / Lose
private void displayWinLost() {
    StringBuffer sbfNumbers = new StringBuffer();
    sbfNumbers.append("Player One Energy : " + playerOneEnergy
            + "\nPlayer Two Energy: " + playerTwoEnergy);
    score.setText(sbfNumbers.toString());
}

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
}

}

非常感谢您。非常感谢任何帮助。再次感谢!!

4

2 回答 2

0

在您的代码中 imageViews 不在数组中,因此您不能执行 p1Dice[i] 。

所以请改为

private ImageView[] p1Dice = new ImageView[5];

或者

p1Dice1.setImageResource(diceImage[player1[0]]);
p1Dice2.setImageResource(diceImage[player1[1]]);    
p1Dice3.setImageResource(diceImage[player1[2]]);    
于 2012-08-18T06:29:40.303 回答
0

ImageViews 不在数组中,所以你不能做 p1Dice[i].something()

将 ImageViews 的声明更改为此

private ImageView[] p1Dice = new ImageView[5];
于 2012-08-18T06:30:04.273 回答