Något nyttigt

All lectures for SV purposes
Nivå , Lektion
Tillgängliga

1. Arv

För att arbeta med spelmotorn CodeGym måste du använda arv . Men vad händer om du inte vet vad det är? Å ena sidan måste du förstå och studera detta ämne. Däremot är motorn specialdesignad för att vara väldigt enkel, så man klarar sig med en ytlig kunskap om arv.

Så vad är arv? Enkelt uttryckt är arv ett förhållande mellan två klasser. En av dem fungerar som föräldraklass och den andra blir barnklassen (ättling). Dessutom kanske en föräldraklass inte ens vet att den har underklasser. Föräldern har med andra ord ingen större nytta av att ha ättlingklasser.

Men arv ger många fördelar för barnklassen. Den viktigaste av dem är att alla variabler och metoder för föräldraklassen visas i barnklassen, som om koden för föräldraklassen kopierades direkt till barnklassen. Detta är inte helt korrekt, men det räcker för en grundläggande förståelse av arv.

Här är några exempel som hjälper dig att bättre förstå arv.

Exempel 1 - här är det enklaste exemplet

public class Parent
{
}
Klassen Childärver Parentklassen med hjälp av nyckelordet extends.
public class Child extends Parent
{
}

Exempel 2 — med hjälp av variablerna för den överordnade klassen

public class Parent
{
  public int age;
  public String name;
}
Klassen Childkan använda fälten ageoch för klassen som om de deklarerades i själva klassen.nameParentChild
public class Child extends Parent
{
  public void printInfo()
  {
    System.out.println(name + " " + age);
  }
}

Exempel 3 — med metoder från den överordnade klassen

public class Parent
{
   public int age;
   public String name;
   public getName() {
      return name;
   }
}
Klassen Childkan använda variablerna och metoderna i klassen Parent som om de deklarerades i klassen Child. I det här exemplet använder vi getName()metoden.
public class Child extends Parent
{
   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}

Om vi ​​utelämnar några detaljer kan vi säga att ur Java-kompilatorns perspektiv kopierade vi helt enkelt koden för föräldraklassen till koden för underklassen:

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);
   }
}
Så här Childser klassen ut från kompilatorns synvinkel


2. Åsidosättande av metod

Ibland finns det situationer där vi får vår Childklass att ärva en mycket användbar Parentklass, vilket gör att barnet ärver alla förälderns variabler och metoder. Men vissa av dessa metoder kanske inte fungerar riktigt som vi vill att de ska eller inte alls som vi vill att de ska.

Vad gör du i det här fallet? Vi kan åsidosätta en metod vars implementering vi inte gillar . Detta är en enkel sak att göra: i vår Childklass deklarerar vi helt enkelt en metod med samma signatur som metoden i klassen Parentoch skriver sedan vår egen kod i den.

Exempel 1 — metod åsidosättande

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

   public getName() {
      return name;
   }
}
Metoden printInfo()kommer att visa följande fras:
Luke, No!!!
public class Child extends Parent
{
   public void setName(String nameNew) {
      name = nameNew + ", No!!!";
   }

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

För att förenkla situationen något gör arvet att koden för föräldraklassen kopieras till underklassen. Men om en descendant-klass redan är en metod som finns i en förfaderklass, kopieras inte den metoden från förfaderklassen. Här säger vi att metoden i barnklassen åsidosätter metoden i föräldraklassen. Titta på exemplet nedan. Kanske hjälper det att göra saker lite tydligare:

Så här ser Child-klassen ut från kompilatorns synvinkel:
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());
   }
}

Exempel 2 - lite arvsmagi (och överordnad metod)

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";
   }
}

Om printInfo()metoden anropas på en Parenttyp anropar den i sin tur getName()klassens metod Parent.

Om printInfo()metoden anropas på ett Childobjekt anropar den i sin tur getName()klassens metod Child.

printInfo()Metoden deklareras med andra ord endast i Parentklassen, men den anropar getName()klassens metod Childom printInfo()metoden anropas på ett Childobjekt.

Exempel:

Parent parent = new Parent();
parent.printnInfo();
Denna kod visar följande text på skärmen:
Luke
Child child = new Child();
child.printnInfo();
Denna kod visar följande text på skärmen:
Luke, I am your father

Och allt för att från kompilatorns synvinkel (en mycket förenklad version av det), Childser klassens kod ut så här:

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

   public void printInfo()
   {
      System.out.println(getName());
   }
}
Så här Childser klassen ut från kompilatorns synvinkel


3. Listor

Här är en kort påminnelse om listor ( List). Listor har mycket gemensamt med arrayer:

  • De kan lagra mycket data av en viss typ.
  • De låter dig få element efter deras index.
  • Elementens index börjar vid 0.

Fördelar med listor:

Till skillnad från arrayer kan listor dynamiskt ändra storlek. Omedelbart efter skapandet är storleken på en lista 0. När objekt läggs till i listan ökar dess storlek. Exempel på att skapa en lista:

ArrayList<String> myList = new ArrayList<String>();
Skapar en nyArrayList

Värdet som anges inom vinkelparenteserna är den datatyp som listan kan lagra.

Här är några metoder för att arbeta med en lista:

Koda Kort beskrivning
ArrayList<String> list = new ArrayList<String>();
Skapa en ny lista med strängar
list.add("name");
Lägg till ett element i slutet av listan
list.add(0, "name");
Lägg till ett element i början av listan
String name = list.get(5);
Få ett element genom dess index
list.set(5, "new name");
Ändra ett element med dess index
int count = list.size();
Få antalet element i listan
list.remove(4);
Ta bort ett element från listan

För mer information om listor kan du läsa följande artiklar:



4. Slumptal

CodeGym-spelmotorn har två metoder som kan användas för att generera slumptal. Dessa metoder är:

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

Den första metoden — getRandomNumber(int max)— returnerar ett slumptal i intervallet 0, 1, 2, ... max-1. Under huven använder den Randomklassen från java.utilpaketet, men det ändrar inte hur du använder ett slumptal.

getRandomNumber(int)accepterar ett heltal som ett argument. Detta nummer kommer att vara den övre gränsen för talen som slumptalsgeneratorn kan returnera. Den nedre gränsen är 0. OBS! Slumptalsgeneratorn returnerar ALDRIG värdet på den övre gränsen. Till exempel, om du anropar getRandomNumber(3), kommer den slumpmässigt att returnera antingen 0, 1 eller 2. Som du kan se kommer den inte att returnera 3. Att använda en slumptalsgenerator på detta sätt är ganska enkelt, men det är lämpligt för många fall.

Den andra metoden — getRandomNumber(int min, int max)— returnerar ett slumpmässigt heltal i intervallet [min, max-1]. Det kommer aldrig att returnera ett nummer som är mindre än min, och det kommer aldrig att returnera ett nummer som är större än max-1.

Hur kan dessa metoder användas i praktiken?

1. Tärningar

Anta att du vill simulera tärningskastet och få ett slumptal i intervallet 1-6. Hur skulle du göra det? Detta kan göras med kod så här:

int dice = getRandomNumber(1, 7);

Denna metod returnerar ett slumpmässigt heltal i intervallet 1-6.

2. Målträning

Anta att du vill simulera att skjuta mot ett mål, och att ett skotts noggrannhet inkluderar en slumpmässig komponent som varierar i intervallet från -10till och +10med. Detta kan göras med kod så här:

int dx = getRandomNumber(-10, 11);

Denna metod returnerar ett slumpmässigt heltal i intervallet -10till +10.

Det finns många sätt att använda slumptal i spel. Du är bara begränsad av din fantasi. Skriv dina egna spel, förfina dem och njut av processen.

Alla kan spela spel, men bara programmerare kan skapa dem.


Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION