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
|
Klassen Child ärver Parent klassen med hjälp av nyckelordet extends . |
|
Exempel 2 — med hjälp av variablerna för den överordnade klassen
|
Klassen Child kan använda fälten age och för klassen som om de deklarerades i själva klassen.name Parent Child |
|
Exempel 3 — med metoder från den överordnade klassen
|
Klassen Child kan 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. |
|
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);
}
}
2. Åsidosättande av metod
Ibland finns det situationer där vi får vår Child
klass att ärva en mycket användbar Parent
klass, 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 Child
klass deklarerar vi helt enkelt en metod med samma signatur som metoden i klassen Parent
och skriver sedan vår egen kod i den.
Exempel 1 — metod åsidosättande
|
Metoden printInfo() kommer att visa följande fras:
|
|
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: |
---|
|
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 Parent
typ anropar den i sin tur getName()
klassens metod Parent
.
Om printInfo()
metoden anropas på ett Child
objekt anropar den i sin tur getName()
klassens metod Child
.
printInfo()
Metoden deklareras med andra ord endast i Parent
klassen, men den anropar getName()
klassens metod Child
om printInfo()
metoden anropas på ett Child
objekt.
Exempel:
|
Denna kod visar följande text på skärmen:
|
|
Denna kod visar följande text på skärmen:
|
Och allt för att från kompilatorns synvinkel (en mycket förenklad version av det), Child
ser 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());
}
}
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>();
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 |
---|---|
|
Skapa en ny lista med strängar |
|
Lägg till ett element i slutet av listan |
|
Lägg till ett element i början av listan |
|
Få ett element genom dess index |
|
Ändra ett element med dess index |
|
Få antalet element i listan |
|
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 Random
klassen från java.util
paketet, 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 -10
till och +10
med. Detta kan göras med kod så här:
int dx = getRandomNumber(-10, 11);
Denna metod returnerar ett slumpmässigt heltal i intervallet -10
till +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.
GO TO FULL VERSION