Varför vill hit inte bli true igen? Andorid Studio Java.
Om nån har tid skulle de kunna titta igenom koden och see varför hit vägrar bli true efter den blivit false 1 gång. Iden är att man ska ha tre liv och förlora ett varje gång man missar ett target. Jag ska sen göra det möjligt att få tillbaka ett hjärta vilket står i koden men är inte implementerat. Tack i förväg.
public class TargetShooter extends AppCompatActivity {
MediaPlayer mediaPlayer;
ScoreTracker scoreTracker;
public static final String RETURN_VALUE = "return";
public static final String PARAM_HIGH_SCORE = "highScore";
public Target[] target;
public TextView time, points, highScore;
public CountDownTimer countDownTimer;
public ConstraintLayout.LayoutParams params;
public ImageView soundOnImage;
public ImageView[] heartsIcons;
public Integer[] heartDrawables;
public int counter = 0, countPoints = 0, intervalSpeed, reducePerTurn = 10, currentScore = 0, nrOfHearts;
public String str_highScore;
boolean hit, isPlaying, isSoundOn;
public Integer[] soundOnOrOff = {R.drawable.soundoff, R.drawable.soundon};
public Integer validTarget;
public int[] heartsFilled;
public boolean hitHeart, heartIsTarget;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.target_shooter);
str_highScore = this.getIntent().getStringExtra(PARAM_HIGH_SCORE);
time = findViewById(R.id.timeTextView);
points = findViewById(R.id.pointsTextView);
highScore = findViewById(R.id.currentHighScoreTextView);
highScore.setText(str_highScore);
soundOnImage = findViewById(R.id.soundOnOrOff);
heartDrawables = new Integer[]{R.drawable.fullheart, R.drawable.emptyheart};
heartsIcons = new ImageView[]{findViewById(R.id.heartOneImage), findViewById(R.id.heartTwoImage), findViewById(R.id.heartThreeImage)};
validTarget = (R.drawable.validtarget);
heartsFilled = new int[]{1, 1, 1};
target = new Target[]{new Target(findViewById(R.id.targetImageView))};
scoreTracker = new ScoreTracker();
isSoundOn = true;
isPlaying = false;
hit = false;
addListeners();
}
public void startGame(View caller){
nrOfHearts = 3;
for(int i = 0; i < heartsIcons.length; i++){
heartsIcons[i].setImageResource(heartDrawables[0]);
}
points.setText("0");
intervalSpeed = 1000;
countDownTimer(intervalSpeed);
isPlaying = true;
countDownTimer.start();
}
public void soundOn(){
if(isSoundOn)
{
soundOnImage.setImageResource(soundOnOrOff[0]);
isSoundOn = false;
}
else {
soundOnImage.setImageResource(soundOnOrOff[1]);
isSoundOn = true;
}
}
public void playSound(boolean hitMade){
if(isSoundOn) {
if (hitMade) {
mediaPlayer = MediaPlayer.create(this, R.raw.hitsoundeffect);
}
mediaPlayer.start();
}
mediaPlayer = null;
}
public void trackScore(){
int targetSize = target[0].getSize();
scoreTracker.sizeBonus(targetSize);
scoreTracker.setIntervalBonus(intervalSpeed);
currentScore = currentScore + scoreTracker.getScore();
}
/*Kollar om du lyckades träffa pricken, om så startar den om countDownTimer med en ny reducerad
* inteval mellan varje ny prick. Om du inte lyckas träffa den inom intervallen så missylckas du
* och omgången slutar.
* */
public void restart(){
System.out.println("Hit "+ hit);
if(!hit){
if(nrOfHearts > 0){
nrOfHearts--;
removeHeart();
}else
countDownTimer.cancel();
scoreTracker.setHighScore(currentScore);
isPlaying = false;
points.setText(String.format("You got: %s", currentScore));
highScore.setText(String.valueOf(scoreTracker.getHighScore()));
countPoints = 0;
currentScore = 0;
}
else {
hit = false;
trackScore();
intervalSpeed = intervalSpeed - reducePerTurn;
countDownTimer(intervalSpeed);
countDownTimer.start();
}
}
public void startAgain(){
hit = false;
trackScore();
intervalSpeed = intervalSpeed - reducePerTurn;
countDownTimer(intervalSpeed);
countDownTimer.start();
}
public void removeHeart(){
heartIsTarget = false;
switch (nrOfHearts){
case(2):
heartsIcons[2].setImageResource(heartDrawables[1]);
case(1):
heartsIcons[1].setImageResource(heartDrawables[1]);
case(0):
heartsIcons[0].setImageResource(heartDrawables[1]);
}
startAgain();
}
public void addHeart(){
heartIsTarget = false;
switch (nrOfHearts){
case(2):
break;
case(1):
heartsIcons[2].setImageResource(heartDrawables[0]);
nrOfHearts = 2;
break;
case(0):
heartsIcons[1].setImageResource(heartDrawables[0]);
nrOfHearts = 1;
break;
}
}
public void isHeartTarget(){
if(heartIsTarget){
addHeart();
}
}
/*Ger pricken eller imageView en onClick effekt.*/
public void addListeners(){
target[0].getTargetImage().setOnClickListener(new TargetShooter.TargetListener());
soundOnImage.setOnClickListener(new TargetListener());
}
/*Skapar en prick som vars position och storlek utgörs av Math.random allstå slumpmässigt inom
* vissa gränser.*/
public void generateTarget(){
int generateHeart = (int) ((Math.random()*3)+1)-1;
int y = (int) ((Math.random() * 840) + 1) - 1;
int x = (int) ((Math.random() * 840) + 1) - 1;
ImageView targetImage = target[0].getTargetImage();
targetImage.setImageResource(validTarget);
targetImage.setY(y);
targetImage.setX(x);
params = (ConstraintLayout.LayoutParams) target[0].getLayoutParams();
targetImage.setLayoutParams(params);
if(generateHeart == 1){
heartIsTarget = true;
targetImage.setImageResource(heartDrawables[0]);
}
}
public void countDownTimer(int length) {
countDownTimer = new CountDownTimer(length, intervalSpeed) {
@Override
public void onTick(long l) {
generateTarget();
counter++;
time.setText(String.valueOf(counter));
}
@Override
public void onFinish() {
restart();
}
};
}
private class TargetListener implements View.OnClickListener{
public void onClick(View caller) {
String getTag = caller.getTag().toString();
if(getTag.equals("soundIcon")) {
soundOn();
}
if (isPlaying == true) {
if (getTag.equals(target[0].getTargetImage().getTag().toString())) {
countPoints++;
playSound(true);
hit = true;
System.out.println("Hit 1"+ hit);
}
String str_score = String.valueOf(currentScore);
points.setText(str_score);
}
}
}
public void returnToMenu(View caller){
String str_highScore = String.valueOf(scoreTracker.getHighScore());
Intent returnIntent = new Intent();
returnIntent.putExtra(RETURN_VALUE, str_highScore);
setResult(RESULT_OK, returnIntent);
finish();
}
}
Så jag kommer ihåg. [code][/code]