Greenfoot/Java: Wie verhindere ich, dass sich die beiden Charaktere gegenseitig überlappen und wie füge ich eine Lebensanzeige hinzu?

Also ich arbeite in der Schule im Moment mit Greenfoot und programmiere eine Art Street Fighter. Ich habe bei den folgenden beiden Dingen Probleme:

Also erstens kriege ich es nicht hin, dass die beiden Charaktere sich gegenseitig nicht überlappen. Sie rennen also durcheinander durch.

Das zweite Problem ist Folgendes: Ich möchte eine Lifebar, also eine Lebensanzeige hinzufügen.

Ich bin noch nicht dabei, es zu animieren, sondern einfach dabei, dass das Programm stoppt, wenn der Spieler keine Leben mehr hat. Es funktioniert aber einfach nicht. Es stoppt einfach immer viel zu früh, sobald ich Kontakt zum anderen Spieler habe, aber noch nicht schlage.

Ich kann leider nicht den gesamten Code hier reinkopieren, da er die Maximallänge überschreitet. Wer mir so nicht weiterhelfen kann, sich aber nicht mit dem Thema auskennt, der kann mich privat anschreiben. Dann kann ich die ganze Datei rüberschicken.

Hier also nur der wahrscheinlich relevante Teil des Codes:

In fighter1:

public static boolean hit = false;

public void attack1() {
  if (Greenfoot.isKeyDown("h") && !Greenfoot.isKeyDown("k") && !Greenfoot.isKeyDown("b")) {
    setImage("FH.png");
    hit = true;
  }
  else {
    hit = false;
  }

  if (!Greenfoot.isKeyDown("h") && !Greenfoot.isKeyDown("k") && !Greenfoot.isKeyDown("b")) {
    setImage("FN.png");
  }
}

Fighter 2:

public void lifebar() {
  if (Fighter1.hit = true && isTouching(Fighter1.class)) {
    lifebar = lifebar - 50;
  }

  if (lifebar <= 0) {
    Greenfoot.stop();
  }
}
Computer, programmieren, Java, Greenfoot
Wie gebe ich Inhalte korrekt beim Methodenaufruf in BlueJ ein?

Hallo allerseits,

ich hoffe jemand kann mir bei meinem Denkfehler helfen. (Kurzfassung am Ende)

Ich habe Informatik (11.Klasse, 2.Lehrjahr) in der Schule und habe zuhause selbst ein eigenes Projekt in BlueJ begonnen, unabhängig vom Unterricht. Dabei versuche ich neue Inhalte aus dem Unterricht spaßeshalber in dem Projekt zu wiederholen.

Zu meinem Projekt: Ich wollte einen Laden/Supermarkt erstellen, der (recht rudimentär) über die Konsole Feedback gibt und über Methodenaufrufe gesteuert wird.

Vor einiger Zeit haben wir in der Schule mit Strukturen wie Array, List, Stack und Queue abgeschlossen, gehen darauf aber nun mit neuem Wissen zurück ans aktive Programmieren. Deshalb wollte ich meinen Laden nun über List neu programmieren, es sollen also alle möglichen Produkte in einer List gespeichert sein.

Unser Lehrer hat uns eine bereits erstellte Klasse List ausgeteilt, anstatt mit ArrayList zu arbeiten. Ich nutze diese Klasse auch in meinem Projekt, sie besitzt soweit ich weiß auch in etwa dieselben Fähigkeiten wie ArrayList und heißt List<ContentType>.

Also war mein Gedankengang für die neue Umsetzung:

  1. Klasse Produkt erstellen mit den Attributen int Preis, int Warennummer und String Name (bei Preis macht double rückblickend mehr Sinn); siehe Bild

2.Klasse Inventar erstellen, bei der man Produkte in das Inventar einfügen kann, etc.; Sie besitzt eine List<Produkt> produktliste; siehe Bilder (2 und 3)

Insgesamt ist das noch nicht alles durchdacht oder vollständig, und orientiert sich etwas an dem was wir im Unterricht in ähnlicher Form bereits programmiert haben (in Form einer Bibliothek). Ist sicher alles sehr ineffizient und kann besser umgesetzt werden.

Wahrscheinlich lacht ihr über meine Gedankenblockade, aber ich kann mich in keinster Weise mehr daran erinnern, wie ich bei dem Methodenaufruf produktHinzufuegen(Produkt pProdukt) der Klasse Inventar mein nachgefragtes Produkt angebe. Muss ich das mit Schweifklammern angeben, eine bestimmte Methode aufrufen, habe ich etwas bei der Deklarierung etc. vergessen? Ich bin gerade etwas hilflos und habe auch schon verschiedene Eingaben ausprobiert.

Wäre super, wenn jemand mir auf die Sprünge helfen könnte.

Kurzfassung: Laden/Supermarktprojekt in BlueJ, mit einer allgemeinen Klasse Produkt. Über Klasse Inventar können dem Inventar List<Produkt> neue Produkte hinzugefügt werden. Wie gebe ich dieses Produkt bzw. mehrere Produkte bei Methodenaufruf produktHinzufuegen(Produkt pProdukt) korrekt an? Muss ich etwas anders programmieren?

(Netto war das ursprüngliche Projekt mit einer einzigen Klasse und String; die Klasse Laden ist noch leer, abgesehen von der Erzeugung eines Regales vom Typ Inventar)

Gerne nachfragen, falls ich etwas nicht gut erklärt habe oder anderweitig Bilder schicken soll. Für Tipps und allgemeine Verbesserungsvorschläge bin ich immer offen!

Bild zum Beitrag
Schule, programmieren, Java, BlueJ, Informatik
Zugriff auf die Eigenschaften einer inneren Klasse eines JSON Files?

Hy Leude, meine Aufgabenstellung sieht so aus:

Erstellen einer person.json mit einem Object nach dem Schema meiner "Person" Klasse. (siehe Code)

Mittels gson lib gilt es nun das Object in JSON Format auszulesen und ein äquivalentes Object vom Typ "Person" zu generieren, um auf alle Eigenschaften zugreifen zu können.

Mein Problem ist, dass der Aufbau der "Person" Klasse eine innere Klasse "Adresse" mit Daten zu der Adresse beinhaltet. Ich weiß nicht wie ich auf diese Adress-Daten zugreifen kann, die anderen Eigenschaften des "Personen" Objects kann ich problemlos mit der toString ausgeben.

//Code Klasse
class Person {

    String Titel;
    String Vorname;
    String Nachname;
    int Alter;

    public Person(String titel, String vorname, String nachname, int alter) {
        Titel = titel;
        Vorname = vorname;
        Nachname = nachname;
        Alter = alter;
    }

    public class Adresse {
        int PLZ;
        String Ort;
        String Strasse;
        int Hausnummer;

        public Adresse(int PLZ, String ort, String strasse, int hausnummer) {
            this.PLZ = PLZ;
            Ort = ort;
            Strasse = strasse;
            Hausnummer = hausnummer;
        }

        @Override
        public String toString() {
            return "Adresse{" +
                    "PLZ=" + PLZ +
                    ", Ort='" + Ort + '\'' +
                    ", Strasse='" + Strasse + '\'' +
                    ", Hausnummer=" + Hausnummer +
                    '}';
        }
    }


    @Override
    public String toString() {
        return "Person{" +
                "Titel='" + Titel + '\'' +
                ", Vorname='" + Vorname + '\'' +
                ", Nachname='" + Nachname + '\'' +
                ", Alter=" + Alter +
                '}';
    }
}

//JSON File: person.json
{
  "Titel": "Der Gruene",
  "Vorname": "Radar",
  "Nachname": "Gast",
  "Alter": 120,
  "Adresse": {
    "PLZ": 37,
    "Ort": "Der Einsame Berg",
    "Strasse": "Eichenallee",
    "Hausnummer": 7
  }
}
//Main Code
JsonReader reader2 = new JsonReader(new FileReader("person.json"));


//   System.out.println("\nreader of the person.json:\n"+reader2);

Person person = gson.fromJson(reader2, Person.class);


System.out.println("\nfirst object layer of person.json converted to person object\n" + person);
//Output
first object layer of person.json converted to person object
Person{Titel='Der Gruene', Vorname='Radar', Nachname='Gast', Alter=120}


Process finished with exit code 0
Computer, programmieren, Java, JSON

Meistgelesene Fragen zum Thema Java