Etwas Hilfreiches

Verfügbar

1. Vererbung

Um mit der CodeGym-Spiel-Engine arbeiten zu können, müssen Sie Vererbung verwenden . Aber was ist, wenn Sie nicht wissen, was das ist? Einerseits müssen Sie dieses Thema verstehen und studieren. Andererseits ist die Engine speziell darauf ausgelegt, sehr einfach zu sein, sodass Sie mit einem oberflächlichen Wissen über Vererbung auskommen können.

Was ist also Vererbung? Vereinfacht ausgedrückt ist Vererbung eine Beziehung zwischen zwei Klassen. Eine von ihnen fungiert als übergeordnete Klasse und die andere wird zur untergeordneten (nachkommenden) Klasse. Darüber hinaus weiß eine übergeordnete Klasse möglicherweise nicht einmal, dass sie Nachkommenklassen hat. Mit anderen Worten: Die übergeordneten Klassen haben keinen großen Nutzen aus der Existenz untergeordneter Klassen.

Aber die Vererbung bietet der untergeordneten Klasse viele Vorteile. Das Wichtigste davon ist, dass alle Variablen und Methoden der übergeordneten Klasse in der untergeordneten Klasse angezeigt werden, als ob der Code der übergeordneten Klasse direkt in die untergeordnete Klasse kopiert würde. Das ist nicht ganz richtig, reicht aber für ein grundlegendes Verständnis der Vererbung aus.

Hier sind einige Beispiele, die Ihnen helfen sollen, die Vererbung besser zu verstehen.

Beispiel 1 – hier ist das einfachste Beispiel

public class Parent
{
}
Die ChildKlasse erbt die ParentKlasse mithilfe des extendsSchlüsselworts.
public class Child extends Parent
{
}

Beispiel 2 – Verwendung der Variablen der übergeordneten Klasse

public class Parent
{
  public int age;
  public String name;
}
Die Klasse kann die Felder und der Klasse so Childverwenden , als ob sie in der Klasse selbst deklariert wären.agenameParentChild
public class Child extends Parent
{
  public void printInfo()
  {
    System.out.println(name + " " + age);
  }
}

Beispiel 3 – Verwendung von Methoden der übergeordneten Klasse

public class Parent
{
   public int age;
   public String name;
   public getName() {
      return name;
   }
}
Die ChildKlasse kann die Variablen und Methoden der übergeordneten Klasse so verwenden, als wären sie in der ChildKlasse deklariert. In diesem Beispiel verwenden wir die getName()Methode.
public class Child extends Parent
{
   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}

Wenn wir einige Details weglassen, können wir sagen, dass wir aus Sicht des Java-Compilers einfach den Code der übergeordneten Klasse in den Code der untergeordneten Klasse kopiert haben:

public class Child extends Parent
{
   public int age;        // An inherited variable
   public String name;    // An inherited variable
   public getName() {     // An inherited method
      return name;
   }

   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}
So Childsieht die Klasse aus Sicht des Compilers aus


2. Methodenüberschreibung

Manchmal gibt es Situationen, in denen wir unsere ChildKlasse dazu bringen, eine sehr nützliche ParentKlasse zu erben, was dazu führt, dass die untergeordnete Klasse alle Variablen und Methoden der übergeordneten Klasse erbt. Einige dieser Methoden funktionieren jedoch möglicherweise nicht ganz so, wie wir es uns wünschen, oder überhaupt nicht so, wie wir es uns wünschen.

Was machen Sie in diesem Fall? Wir können eine Methode überschreiben, deren Implementierung uns nicht gefällt . Das geht ganz einfach: In unserer ChildKlasse deklarieren wir einfach eine Methode mit derselben Signatur wie die Methode in der ParentKlasse und schreiben dann unseren eigenen Code hinein.

Beispiel 1 – Methodenüberschreibung

public class Parent
{
   public String name;
   public void setName(String nameNew) {
      name = nameNew;
   }

   public getName() {
      return name;
   }
}
Die printInfo()Methode zeigt den folgenden Satz an:
Luke, No!!!
public class Child extends Parent
{
   public void setName(String nameNew) {
      name = nameNew + ", No!!!";
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

Vereinfacht man die Situation etwas zu stark, führt die Vererbung dazu, dass der Code der übergeordneten Klasse in die untergeordnete Klasse kopiert wird. Wenn eine Nachkommenklasse jedoch bereits eine Methode hat, die in einer Vorgängerklasse vorhanden ist, wird diese Methode nicht von der Vorgängerklasse kopiert. Hier sagen wir, dass die Methode in der untergeordneten Klasse die Methode in der übergeordneten Klasse überschreibt. Schauen Sie sich das Beispiel unten an. Vielleicht hilft es, die Sache etwas klarer zu machen:

So sieht die Child-Klasse aus Sicht des Compilers aus:
public class Child extends Parent
{
   public String name;    // An inherited variable

   public void setName(String nameNew)  // The overridden method replaces the inherited one
   {
      name = nameNew + ", No!!!";
   }

   public getName()    // An inherited method
   {
      return name;
   }

   public void printInfo()
   {
      setName("Luke");
      System.out.println(getName());
   }
}

Beispiel 2 – ein wenig Vererbungsmagie (und Methodenüberschreibung)

public class Parent
{
   public getName() {
      return "Luke";
   }

   public void printInfo()
   {
      System.out.println( getName() );
   }
}
public class Child extends Parent
{
   public getName() {
      return "Luke, I am your father";
   }
}

Wenn die printInfo()Methode für einen Typ aufgerufen wird Parent, ruft sie wiederum die getName()Methode der ParentKlasse auf.

Wenn die printInfo()Methode für ein Objekt aufgerufen wird Child, ruft sie wiederum die getName()Methode der ChildKlasse auf.

Mit anderen Worten: Die printInfo()Methode wird nur in der ParentKlasse deklariert, ruft jedoch die getName()Methode der ChildKlasse auf, wenn die printInfo()Methode für ein Objekt aufgerufen wird Child.

Beispiel:

Parent parent = new Parent();
parent.printnInfo();
Dieser Code zeigt den folgenden Text auf dem Bildschirm an:
Luke
Child child = new Child();
child.printnInfo();
Dieser Code zeigt den folgenden Text auf dem Bildschirm an:
Luke, I am your father

Und das alles, weil aus Sicht des Compilers (eine sehr vereinfachte Version davon) der Code der ChildKlasse so aussieht:

public class Child extends Parent
{
   public getName() {
      return "Luke, I am your father";
   }

   public void printInfo()
   {
      System.out.println(getName());
   }
}
So Childsieht die Klasse aus Sicht des Compilers aus


3. Listen

Hier ist eine kurze Erinnerung an Listen ( List). Listen haben viel mit Arrays gemeinsam:

  • Sie können viele Daten eines bestimmten Typs speichern.
  • Sie ermöglichen es Ihnen, Elemente anhand ihres Index abzurufen.
  • Die Indizes der Elemente beginnen bei 0.

Vorteile von Listen:

Im Gegensatz zu Arrays können Listen ihre Größe dynamisch ändern. Unmittelbar nach der Erstellung beträgt die Größe einer Liste 0. Je mehr Elemente zur Liste hinzugefügt werden, desto größer wird sie. Beispiel für die Erstellung einer Liste:

ArrayList<String> myList = new ArrayList<String>();
Ein Neues erstellenArrayList

Der in den spitzen Klammern angegebene Wert ist der Datentyp, den die Liste speichern kann.

Hier sind einige Methoden zum Arbeiten mit einer Liste:

Code Kurze Beschreibung
ArrayList<String> list = new ArrayList<String>();
Erstellen einer neuen Liste von Zeichenfolgen
list.add("name");
Fügen Sie am Ende der Liste ein Element hinzu
list.add(0, "name");
Fügen Sie am Anfang der Liste ein Element hinzu
String name = list.get(5);
Holen Sie sich ein Element anhand seines Index
list.set(5, "new name");
Ändern Sie ein Element anhand seines Index
int count = list.size();
Ermitteln Sie die Anzahl der Elemente in der Liste
list.remove(4);
Entfernen Sie ein Element aus der Liste

Weitere Informationen zu Listen finden Sie in den folgenden Artikeln:



4. Zufallszahlen

Die CodeGym-Spiel-Engine verfügt über zwei Methoden, mit denen Zufallszahlen generiert werden können. Diese Methoden sind:

int getRandomNumber(int max)
int getRandomNumber(int min, int max)

Die erste Methode — getRandomNumber(int max)— gibt eine Zufallszahl im Bereich 0, 1, 2, ... zurück max-1. Unter der Haube wird die RandomKlasse aus dem java.utilPaket verwendet, aber das ändert nichts an der Art und Weise, wie Sie eine Zufallszahl verwenden.

getRandomNumber(int)akzeptiert eine ganze Zahl als Argument. Diese Zahl stellt die Obergrenze für die Zahlen dar, die der Zufallszahlengenerator zurückgeben kann. Die Untergrenze liegt bei 0. Achtung! Der Zufallszahlengenerator gibt NIEMALS den Wert der Obergrenze zurück. Wenn Sie beispielsweise aufrufen getRandomNumber(3), wird zufällig entweder 0, 1 oder 2 zurückgegeben. Wie Sie sehen, wird nicht 3 zurückgegeben. Die Verwendung eines Zufallszahlengenerators auf diese Weise ist recht einfach, eignet sich jedoch für viele Fälle.

Die zweite Methode — getRandomNumber(int min, int max)— gibt eine zufällige Ganzzahl im Bereich zurück [min, max-1]. Es wird niemals eine Zahl kleiner als zurückgegeben min, und es wird niemals eine Zahl größer als zurückgegeben max-1.

Wie können diese Methoden in der Praxis eingesetzt werden?

1. Würfel

Angenommen, Sie möchten den Wurf eines Würfels simulieren und eine Zufallszahl im Bereich erhalten 1-6. Wie würdest du es machen? Dies kann mit Code wie diesem erfolgen:

int dice = getRandomNumber(1, 7);

Diese Methode gibt eine zufällige Ganzzahl im Bereich zurück 1-6.

2. Schießübungen

Angenommen, Sie möchten das Schießen auf ein Ziel simulieren und die Genauigkeit eines Schusses enthält eine Zufallskomponente, die im Bereich von -10bis +10einschließlich variiert. Dies kann mit Code wie diesem erfolgen:

int dx = getRandomNumber(-10, 11);

Diese Methode gibt eine zufällige Ganzzahl im Bereich -10bis zurück +10.

Es gibt viele Möglichkeiten, Zufallszahlen in Spielen zu verwenden. Sie sind nur durch Ihre Vorstellungskraft begrenzt. Schreiben Sie Ihre eigenen Spiele, verfeinern Sie sie und genießen Sie den Prozess.

Jeder kann Spiele spielen, aber nur Programmierer können sie erstellen.


Kommentare
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Auf dieser Seite gibt es noch keine Kommentare