• 1
  • 2
2020-02-23, 16:05
  #1
Medlem
Adgos avatar
Gr ett spel dr tv karaktrer slss med varandra. De kan bara sl och sparka varandra, inget annat.
Gjorde en do while loop som RNGar en av sex attacker slnge en av karaktrerna lever.

Problemet r dock att hela spelet fryser nr koden nr do while loopen.

Antar att det beror p att exit conditions inte r uppndda av ngon anledning.

r det ngon hr som har varit i liknande situation och knner till ngon potentiell lsning?
Citera
2020-02-23, 16:09
  #2
Medlem
TonyFlygares avatar
Du fr nog visa oss koden om vi ska kunna lista ut varfr det sker.
Citera
2020-02-23, 16:12
  #3
Medlem
Adgos avatar
Citat:
Ursprungligen postat av TonyFlygare
Du fr nog visa oss koden om vi ska kunna lista ut varfr det sker.

Ja sklart haha. Det r do while loopen efter "if (this.npc2.dead || this.npc.dead)"-statementen som frstr

Iden r att karaktrerna ska attackera varandra tills en av de r dd.

Kod:
@Override
    public void actionPerformed(ActionEvent e) {
        if (this.gameEnd) {
            if (System.currentTimeMillis() - this.endTime > 1000) {
                this.reset = true;
            }
        } else {
            this.npc.setHitBox();
            this.npc2.setHitBox();
            //this.collisionCheck();
            //this.checkDirection();
            //this.user.move.move();
            //this.user2.move.move();
            this.npc2.dead = this.npc.checkDeath(2);
            this.npc.dead = this.npc2.checkDeath(1);

            }
            if (this.npc2.dead || this.npc.dead) {
                this.npc.block = true;
                this.npc2.block = true;
                this.gameEnd = true;
            } else if(this.startAniDone) {
                do{
                int npcrng = (int) (Math.random() * 100) + 1;
                int npcrng2 = (int) (Math.random() * 100) + 1;

                if (npcrng <= 20) {
                    this.npc.lightPunchPressed();

                } else if (npcrng <= 40) {
                    this.npc.mediumPunchPressed();


                } else if (npcrng <= 60) {
                    this.npc.hardPunchPressed();


                } else if (npcrng <= 80) {
                    this.npc.lightKickPressed();


                } else if (npcrng <= 90) {
                    this.npc.mediumKickPressed();

                } else {
                    this.npc.hardKickPressed();
                }
                
                if (npcrng2 <= 20) {
                    this.npc2.lightPunchPressed();

                } else if (npcrng2 <= 40) {
                    this.npc2.mediumPunchPressed();


                } else if (npcrng2 <= 60) {
                    this.npc2.hardPunchPressed();


                } else if (npcrng2 <= 80) {
                    this.npc2.lightKickPressed();


                } else if (npcrng2 <= 90) {
                    this.npc2.mediumKickPressed();

                } else {
                    this.npc2.hardKickPressed();

                } }while (this.npc.hp > 0 || this.npc2.hp > 0);
            }
        this.repaint();
    }
__________________
Senast redigerad av Adgo 2020-02-23 kl. 16:16.
Citera
2020-02-23, 16:16
  #4
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av Adgo
Ja sklart haha. Det r do while loopen efter "if (this.npc2.dead || this.npc.dead)"-statementen som frstr

Kod:
@Override
    public void actionPerformed(ActionEvent e) {
        if (this.gameEnd) {
            if (System.currentTimeMillis() - this.endTime > 1000) {
                this.reset = true;
            }
        } else {
            this.npc.setHitBox();
            this.npc2.setHitBox();
            //this.collisionCheck();
            //this.checkDirection();
            //this.user.move.move();
            //this.user2.move.move();
            this.npc2.dead = this.npc.checkDeath(2);
            this.npc.dead = this.npc2.checkDeath(1);

            }
            if (this.npc2.dead || this.npc.dead) {
                this.npc.block = true;
                this.npc2.block = true;
                this.gameEnd = true;
            } else if(this.startAniDone) {
                do{
                int npcrng = (int) (Math.random() * 100) + 1;
                int npcrng2 = (int) (Math.random() * 100) + 1;

                if (npcrng <= 20) {
                    this.npc.lightPunchPressed();

                } else if (npcrng <= 40) {
                    this.npc.mediumPunchPressed();


                } else if (npcrng <= 60) {
                    this.npc.hardPunchPressed();


                } else if (npcrng <= 80) {
                    this.npc.lightKickPressed();


                } else if (npcrng <= 90) {
                    this.npc.mediumKickPressed();

                } else {
                    this.npc.hardKickPressed();
                }
                
                if (npcrng2 <= 20) {
                    this.npc2.lightPunchPressed();

                } else if (npcrng2 <= 40) {
                    this.npc2.mediumPunchPressed();


                } else if (npcrng2 <= 60) {
                    this.npc2.hardPunchPressed();


                } else if (npcrng2 <= 80) {
                    this.npc2.lightKickPressed();


                } else if (npcrng2 <= 90) {
                    this.npc2.mediumKickPressed();

                } else {
                    this.npc2.hardKickPressed();

                } }while (this.npc.hp > 0 || this.npc2.hp > 0);
            }
        this.repaint();
    }

Villkoret blir ju inte sant frrn fighten r slut. r det inte meningen att dom ska slss lite mellan varje varv i loopen?
Citera
2020-02-23, 16:18
  #5
Medlem
TonyFlygares avatar
Jag misstnker att det r s hr:

"this.npc.hp > 0 || this.npc2.hp > 0" betyder att loopen kommer fortstta s lnge NGON av gubbarna har liv kvar. Den kommer allts att sluta loopa frst nr INGEN av dem har ngot liv kvar, det vill sga bda mste vara "dda". r det s det ska vara eller menade du att anvnda &&?

Om det r meningen att det ska vara som det r nu, d hade jag kollat p alla if-else som du har i loopen. Exempelvis "hardKickPressed", r du sker p att den faktiskt ndrar this.npc.hp eller this.npc2.hp ver huvud taget? Kolla efter detta i samtliga metoder.

Eftersom du kodar Java har du skert tillgng till en debugger ganska enkelt, frsk att stega igenom programmet i debuggern och se vilken kod som faktiskt krs.
Citera
2020-02-23, 16:20
  #6
Medlem
Adgos avatar
Citat:
Ursprungligen postat av Trollfeeder
Villkoret blir ju inte sant frrn fighten r slut. r det inte meningen att dom ska slss lite mellan varje varv i loopen?

Jaha s loopen startat inte frrn en av deras HP r = 0!

Jo, de ska attackera varandra med en slumpmssig attack som bestms av en RNG och ett anfall ska ske en gng per loop.
Citera
2020-02-23, 16:21
  #7
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av TonyFlygare
Jag misstnker att det r s hr:

"this.npc.hp > 0 || this.npc2.hp > 0" betyder att loopen kommer fortstta s lnge NGON av gubbarna har liv kvar. Den kommer allts att sluta loopa frst nr INGEN av dem har ngot liv kvar, det vill sga bda mste vara "dda". r det s det ska vara eller menade du att anvnda &&?

Om det r meningen att det ska vara som det r nu, d hade jag kollat p alla if-else som du har i loopen. Exempelvis "hardKickPressed", r du sker p att den faktiskt ndrar this.npc.hp eller this.npc2.hp ver huvud taget? Kolla efter detta i samtliga metoder.

Eftersom du kodar Java har du skert tillgng till en debugger ganska enkelt, frsk att stega igenom programmet i debuggern och se vilken kod som faktiskt krs.

Haha, jag kollade inte ens villkoret, dr r det ju ocks fel. Men sjlva loopen som sdan r nog ocks fel, fr det ser ut som att TS frsker kra hela fighten i en enda frame.
Citera
2020-02-23, 16:21
  #8
Medlem
TonyFlygares avatar
Citat:
Ursprungligen postat av Trollfeeder
Haha, jag kollade inte ens villkoret, dr r det ju ocks fel. Men sjlva loopen som sdan r nog ocks fel, fr det ser ut som att TS frsker kra hela fighten i en enda frame.
Det har du nog rtt i, repaint ligger ju utanfr dr
Citera
2020-02-23, 16:22
  #9
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av Adgo
Jaha s loopen startat inte frrn en av deras HP r = 0!

Jo, de ska attackera varandra med en slumpmssig attack som bestms av en RNG och ett anfall ska ske en gng per loop.

Tvrtom, loopen forstter s lnge minst en av dom har liv kvar, dvs den bara fortstter. Du vill nog inte kra en loop dr alls skulle jag tro.
Citera
2020-02-23, 16:24
  #10
Medlem
Adgos avatar
Citat:
Ursprungligen postat av TonyFlygare
Jag misstnker att det r s hr:

"this.npc.hp > 0 || this.npc2.hp > 0" betyder att loopen kommer fortstta s lnge NGON av gubbarna har liv kvar. Den kommer allts att sluta loopa frst nr INGEN av dem har ngot liv kvar, det vill sga bda mste vara "dda". r det s det ska vara eller menade du att anvnda &&?

Om det r meningen att det ska vara som det r nu, d hade jag kollat p alla if-else som du har i loopen. Exempelvis "hardKickPressed", r du sker p att den faktiskt ndrar this.npc.hp eller this.npc2.hp ver huvud taget? Kolla efter detta i samtliga metoder.

Eftersom du kodar Java har du skert tillgng till en debugger ganska enkelt, frsk att stega igenom programmet i debuggern och se vilken kod som faktiskt krs.

Jag r en nybrjare s jag har nog fel logik.

S som jag tolkade det s ska "fighten" pg s lnge npc eller npc2 har hp som r strre n 0.
Kanske ska vara att loopen pgr s lnge bda har hp som r strre n 0?

Anvnder Intellij som har en debuggingfunktion
Citera
2020-02-23, 16:25
  #11
Medlem
Adgos avatar
Citat:
Ursprungligen postat av Trollfeeder
Tvrtom, loopen forstter s lnge minst en av dom har liv kvar, dvs den bara fortstter. Du vill nog inte kra en loop dr alls skulle jag tro.

Jaha s loopen stannar inte om en av de dr fr att det finns en npc som har hp strre n 0!

Vad rekommenderar du fr alternativ?
Citera
2020-02-23, 16:28
  #12
Medlem
Trollfeeders avatar
Citat:
Ursprungligen postat av Adgo
Jaha s loopen stannar inte om en av de dr fr att det finns en npc som har hp strre n 0!

Vad rekommenderar du fr alternativ?

Ha loopen lngre ut. Jag tycker inte den hr hemma i den hr metoden alls, men den r rtt rrig och stor s jag har svrt att sga vad som hr och inte hr hemma.

Och sen br villkoret vara and, inte or som det r nu, annars fortstter fighten tills bda har dtt och det tror jag inte du hade tnkte.

Anvnder du ngot ramverk eller gr du allt frn scratch?
Citera
  • 1
  • 2

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in