This site requires JavaScript, please enable it in your browser!
Greenfoot back
StalinRule34
StalinRule34 wrote ...

2019/6/19

Actor shoots bullet wich flys trough enemy and doesnt hit him

StalinRule34 StalinRule34

2019/6/19

#
Need to program a Game for the school and im stuck at the point where my Actor-Car(Player1) shots a bullet wich can bounce off a wall once and when he hits the enemy (CPU) he should be removed from the world and the cpu loses then 20 health ( he has 100 btw), But right now I dont know how to fix this problem and what to write where.
public class Car extends Actor
{
    private int ShotTimer = 0;  // Stopuhr?                            
    private int health = 100;  // Lebensanzeige
    public void act()
    {
        double entfernung = Math.sqrt(Math.pow(getX()-640, 2)+Math.pow(getY()- 402.5 ,2)); // Wurzel aus -> -640 hoch 2 | 402.5 hoch 2  || dadurch kriegen wir die entfernung unserer figur zum Mittelpunkt
        if(entfernung >= 363.5){   // wenn es kleiner / = 363.5 ist dann soll er um 25 nach hinten gehen ||kann somit nicht drüber und wird von einer unsichtbaren wand festgehalten
 
            move(-25); // gehe 25 nach hinten

        }
        else{

            if (ShotTimer > 0) {    //wenn der shottimer größer als 1 ist ,dann
                ShotTimer = ShotTimer - 1;  // in bestimmten zeitabstand immerwieder -1 bis 0 erreicht wird
            }
            else if (Greenfoot.isKeyDown("space")) {     // wenn taste Space gedrückt wird dann...
                getWorld().addObject(new Shot(this), getX(), getY());   // füge Object.class Shot zu der x y koordinate des Autos hinzu 
                ShotTimer = 200; // Timer auf 200 stellen um somit eine schuß verzögerung zu erzeugen  
            }

            MouseInfo mi = Greenfoot.getMouseInfo();   // Das Greenfoot programm soll die Koordinate der Maus aufnehmen welche durch den code unter dieser entommen wurde
            if(mi!=null)   // wenn die Daten nicht = 0 sind dann...
                turnTowards(mi);   // zur Maus drehen
            if (Greenfoot.isKeyDown("w"))   // wenn taste w gedrückt wird dann...
                move(2);   // bewege dich 2 nach vorne 

        }

        if (isTouching(block.class))  // wenn "car" den "block" berührt ,dann
        {
             move(-27);   //bewege dich um 27 nach hinten 
        }
        if (isTouching(CPU.class))       //wenn "car" den "CPU" berührt ,dann
        {
            CPU c = (CPU)   //CPU abkürzung zu c
                getOneIntersectingObject(CPU.class);   //interagire mit dem objekt : CPU.class und 
            c.move(-27);  //bewege dich ("CPU") um 27 nach hinten
        }

    }    

    public void turnTowards (MouseInfo mi)  // coding um herauszufinden wo die Maus ist, um im nachhinein sich in die Richtung zu drehen
    {
        turnTowards(mi.getX(), mi.getY());  // drehe dich zur nun entommenen Maus x y koordinate
    }

    public void loseHealth(int amount) // wenn die Lebensanzeige 0 erreicht ,wird dieser Spieler aus dem Spiel genommen
    {
        health -= amount;  
        if (health < 1)  // wenn "health" kleiner als 1 ist ( also 0 ), dann...
        {
            getWorld().removeObject (this);  // entferne dieses Object von der Welt
        }
    }
}

StalinRule34 StalinRule34

2019/6/19

#
public class Shot extends Actor
{
    private int health = 100;  //private int variable für den Lebenswert (100)
    private Car myCar;  // private Variable für den code unter diesem welche die
    public Shot (Car myCar)
    {
        this.myCar = myCar;  
        setRotation(myCar.getRotation());  //rotation des schusses mit der richtung des Autos verbindet 
    }

    public void act()
    {
        double entfernung = Math.sqrt(Math.pow(getX()-640, 2)+Math.pow(getY()- 402.5 ,2));
        if(entfernung >= 364 || isTouching(block.class)){   // Wenn man vom Mittelpunkt aus 364 Pixel weit entfernt ist oder größer wird ,dann
            turn(180);  //drehe dich um 180 grad
            loseHealth(50);  //verliere 50 leben   || verliert leben und verschwindet durch untere Codes aus der Welt ,weil er nur 1 Mal Apprallen soll.
        }
        move(9);  //bewege dich mit 9 als Geschwindigkeitswert voraus
    }

    public void loseHealth(int amount)  // Nutzt int variable im folgenden coding...
    {
        health -= amount;
        if (health < 1)      //wenn health kleiner als 1 ist ( also 0 ) ,dann...
        {
            getWorld().removeObject (this);   // entfernt die Welt dieses Auto
        }
    } 
    
} 
StalinRule34 StalinRule34

2019/6/19

#
public class CPU extends Actor
{
    private int health = 100;        // Lebensanzeige vom CPU 
    private int ShotTimer = 0;
    public void act(){
        double entfernung = Math.sqrt(Math.pow(getX()-640, 2)+Math.pow(getY()- 402.5 ,2));  //Pythagoras: wurzel aus x hoch 2 + --- wurzel aus x hoch 2 
        if(entfernung >= 363.6){     //entfernung = radius 
            turn(180);  //drehe dich um 180 grad
            move(3);  // bewege dich um 3 nach vorne
        }
        
        else{

            move(2);  //bewege dich um 2 nach vorne
        }
        
        if (isTouching(Car.class)){   //wenn der CPU den Spieler berührt ,dann...
            Car cr = (Car) getOneIntersectingObject(Car.class);
            cr.move(-27);  //soll er sich um 27 (pixel / units?) nach hinten bewegen
        }
        
        if(isTouching(block.class)){  //wenn der CPU einen Block berührt ,dann 
            move(-27);  //soll er sich um 27 nach hinten bewegen
        }
        
        if (ShotTimer > 0) {    //wenn der shottimer größer als 1 ist ,dann
                ShotTimer = ShotTimer - 1;  // in bestimmten zeitabstand immerwieder -1 bis 0 erreicht wird
            }
            else if (Greenfoot.isKeyDown("enter")) {     // wenn taste Space gedrückt wird dann...
                getWorld().addObject(new Shot2(this), getX(), getY());   // füge Object.class Shot2 zu der x y koordinate des Autos hinzu 
                ShotTimer = 200; // Timer auf 200 stellen um somit eine schuß verzögerung zu erzeugen  
            }

     }

    public void damage(){
        
        if (isTouching(Shot.class)) {    //wenn der CPU den Schuss berührt ,dann...
            Shot s = (Shot) getOneIntersectingObject(Shot.class);   // Schuss abkürzung zu s - lasse diese mit dem Object "Shot.class" interagieren damit wenn if erfüllt ist:
            s.getWorld().removeObject (this);  // ...der Schuss aus der Welt entfernt wird 
            loseHealth(20);
        }
     }

    public void loseHealth(int amount)  // Nutzt int variable im folgenden coding...
    {
        health -= amount; 
        
        if (health < 1)      //wenn health kleiner als 1 ist ( also 0 ) ,dann...
        {
            getWorld().removeObject (this);   // entfernt die Welt dieses Auto
        }
     }

}
StalinRule34 StalinRule34

2019/6/19

#
the things that i wrote in green are for the people in my group at school and the part with public void act and "entfernung" is the code for the invisible wall in my ball shaped map
danpost danpost

2019/6/19

#
Replace lines 39 and 40 in your CPU class with this line:
removeTouching(Shot.class);
Then, you need to call the damage method from the act method.
StalinRule34 StalinRule34

2019/6/20

#
You are a God THANK YOU ! You really saved me like 2 days of time and i need it finished till next week. Thanks again xD.
You need to login to post a reply.