Ceva de ajutor

Disponibil

1. Moștenirea

Pentru a lucra cu motorul de joc CodeGym, va trebui să utilizați moștenirea . Dar dacă nu știi ce este asta? Pe de o parte, trebuie să înțelegeți și să studiați acest subiect. Pe de altă parte, motorul este conceput special pentru a fi foarte simplu, astfel încât să te poți descurca cu o cunoaștere superficială a moștenirii.

Deci, ce este moștenirea? În termeni simpli, moștenirea este o relație între două clase. Unul dintre ei acționează ca clasa părinte, iar celălalt devine clasa copil (descendent). În plus, o clasă părinte poate nici măcar să nu știe că are clase descendențe. Cu alte cuvinte, părintele nu primește prea multe beneficii de a avea clase de descendenți.

Dar moștenirea oferă multe avantaje clasei de copii. Cel mai important dintre ele este faptul că toate variabilele și metodele clasei părinte apar în clasa copil, ca și cum codul clasei părinte ar fi copiat direct în clasa copil. Acest lucru nu este în întregime exact, dar va fi suficient pentru o înțelegere de bază a moștenirii.

Iată câteva exemple pentru a vă ajuta să înțelegeți mai bine moștenirea.

Exemplul 1 - iată cel mai simplu exemplu

public class Parent
{
}
Clasa Childmoștenește Parentclasa cu ajutorul cuvântului extendscheie.
public class Child extends Parent
{
}

Exemplul 2 — folosind variabilele clasei părinte

public class Parent
{
  public int age;
  public String name;
}
Clasa Childpoate folosi câmpurile ageși nameale clasei Parentca și cum ar fi fost declarate în Childclasa însăși.
public class Child extends Parent
{
  public void printInfo()
  {
    System.out.println(name + " " + age);
  }
}

Exemplul 3 - folosind metodele clasei părinte

public class Parent
{
   public int age;
   public String name;
   public getName() {
      return name;
   }
}
Clasa Childpoate folosi variabilele și metodele clasei Parent ca și cum ar fi fost declarate în Childclasă. În acest exemplu, folosim getName()metoda.
public class Child extends Parent
{
   public void printInfo()
   {
      System.out.println(getName() + " " + age);
   }
}

Omitând câteva detalii, putem spune că din perspectiva compilatorului Java, am copiat pur și simplu codul clasei părinte în codul clasei copil:

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);
   }
}
Iată cum Childapare clasa din punctul de vedere al compilatorului


2. Anularea metodei

Uneori există situații în care facem ca Childclasa noastră să moștenească o clasă foarte utilă Parent, determinând copilul să moștenească toate variabilele și metodele părintelui. Dar este posibil ca unele dintre aceste metode să nu funcționeze așa cum ne dorim sau să nu funcționeze deloc așa cum ne dorim.

Ce faci in acest caz? Putem suprascrie o metodă a cărei implementare nu ne place . Acesta este un lucru simplu de făcut: în Childclasa noastră pur și simplu declarăm o metodă cu aceeași semnătură ca metoda din Parentclasă și apoi scriem propriul cod în ea.

Exemplul 1 — înlocuirea metodei

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

   public getName() {
      return name;
   }
}
Metoda printInfo()va afișa următoarea frază:
Luke, No!!!
public class Child extends Parent
{
   public void setName(String nameNew) {
      name = nameNew + ", No!!!";
   }

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

Simplificand oarecum situația, moștenirea face ca codul clasei părinte să fie copiat în clasa copil. Dar dacă o clasă descendentă este deja o metodă care există într-o clasă strămoșească, atunci acea metodă nu este copiată din clasa strămoșului. Aici spunem că metoda din clasa copil suprascrie metoda din clasa părinte. Uită-te la exemplul de mai jos. Poate vă va ajuta să faceți lucrurile puțin mai clare:

Iată cum apare clasa Child din punctul de vedere al compilatorului:
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());
   }
}

Exemplul 2 - puțină magie de moștenire (și depășirea metodei)

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

Dacă printInfo()metoda este apelată pe un Parenttip, aceasta la rândul său apelează getName()metoda clasei Parent.

Dacă printInfo()metoda este apelată pe un Childobiect, acesta la rândul său apelează getName()metoda clasei Child.

Cu alte cuvinte, printInfo()metoda este declarată numai în Parentclasă, dar apelează getName()metoda clasei Childdacă printInfo()metoda este apelată pe un Childobiect.

Exemplu:

Parent parent = new Parent();
parent.printnInfo();
Acest cod afișează următorul text pe ecran:
Luke
Child child = new Child();
child.printnInfo();
Acest cod afișează următorul text pe ecran:
Luke, I am your father

Și totul pentru că din punctul de vedere al compilatorului (o versiune foarte simplificată a acestuia), codul clasei Childarată astfel:

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

   public void printInfo()
   {
      System.out.println(getName());
   }
}
Iată cum Childapare clasa din punctul de vedere al compilatorului


3. Liste

Iată un scurt memento despre liste ( List). Listele au multe în comun cu tablourile:

  • Ele pot stoca o mulțime de date de un anumit tip.
  • Vă permit să obțineți elemente după indexul lor.
  • Indicii elementelor încep la 0.

Avantajele listelor:

Spre deosebire de matrice, listele pot schimba dinamic dimensiunea. Imediat după creare, dimensiunea unei liste este 0. Pe măsură ce elementele sunt adăugate în listă, dimensiunea acesteia crește. Exemplu de creare a unei liste:

ArrayList<String> myList = new ArrayList<String>();
Crearea unui nouArrayList

Valoarea indicată în parantezele unghiulare este tipul de date pe care lista îl poate stoca.

Iată câteva metode de lucru cu o listă:

Cod Descriere scurta
ArrayList<String> list = new ArrayList<String>();
Crearea unei noi liste de șiruri
list.add("name");
Adăugați un element la sfârșitul listei
list.add(0, "name");
Adăugați un element la începutul listei
String name = list.get(5);
Obțineți un element după indexul său
list.set(5, "new name");
Schimbați un element după indicele său
int count = list.size();
Obțineți numărul de elemente din listă
list.remove(4);
Eliminați un element din listă

Pentru mai multe informații despre liste, puteți citi următoarele articole:



4. Numere aleatorii

Motorul de joc CodeGym are două metode care pot fi folosite pentru a genera numere aleatorii. Aceste metode sunt:

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

Prima metodă — getRandomNumber(int max)— returnează un număr aleatoriu în intervalul 0, 1, 2, ... max-1. Sub capotă, folosește Randomclasa din java.utilpachet, dar asta nu schimbă modul în care folosești un număr aleatoriu.

getRandomNumber(int)acceptă un număr întreg ca argument. Acest număr va fi limita superioară a numerelor pe care le poate returna generatorul de numere aleatorii. Limita inferioară este 0. Atenție! Generatorul de numere aleatoare nu va returna NICIODATĂ valoarea limitei superioare. De exemplu, dacă apelați getRandomNumber(3), va returna aleatoriu fie 0, 1, fie 2. După cum puteți vedea, nu va returna 3. Utilizarea unui generator de numere aleatorii în acest fel este destul de simplă, dar este potrivită pentru multe cazuri.

A doua metodă — getRandomNumber(int min, int max)— returnează un număr întreg aleatoriu în intervalul [min, max-1]. Nu va returna niciodată un număr mai mic decât min, și nu va returna niciodată un număr mai mare de max-1.

Cum pot fi utilizate aceste metode în practică?

1. zaruri

Să presupunem că doriți să simulați aruncarea unui zar și să obțineți un număr aleatoriu în interval 1-6. Cum ai face-o? Acest lucru se poate face cu un cod ca acesta:

int dice = getRandomNumber(1, 7);

Această metodă va returna un număr întreg aleatoriu în intervalul 1-6.

2. Practica țintă

Să presupunem că doriți să simulați tragerea la o țintă, iar acuratețea unei fotografii include o componentă aleatorie care variază în intervalul de la -10la +10inclusiv. Acest lucru se poate face cu un cod ca acesta:

int dx = getRandomNumber(-10, 11);

Această metodă va returna un număr întreg aleatoriu în -10intervalul +10.

Există multe moduri de a folosi numere aleatorii în jocuri. Ești limitat doar de imaginația ta. Scrieți propriile jocuri, rafinați-le și bucurați-vă de proces.

Oricine poate juca jocuri, dar numai programatorii le pot crea.


Comentarii
  • Popular
  • Nou
  • Vechi
Trebuie să fii conectat pentru a lăsa un comentariu
Această pagină nu are încă niciun comentariu