Varför vill hit inte bli true igen? Andorid Studio Java.

Permalänk

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(); } }

Visa signatur

Så jag kommer ihåg. [code][/code]

Permalänk
Medlem

Skolboksexempel på ett problem som kan lösas med debuggern, har du testat det?

Permalänk
Medlem

Sov MrNubcake skrev är detta ett perfekt tillfälle att lära sig använda debuggern.
För att ge lite mera hjälp så om jag ser rätt så är problemet i restart() metoden i första else, den saknar klammrar/måsvingar vilket resulterar i att bara första raden efter else som "körs" och de andra "körs" varje gång