# Programmering 2 Uppgiftsblad Arv
1. **Lärare och elev**
Skapa en grundklass `Person` med attribut som namn och ålder. Utvidga denna klass för att skapa två subklasser: `Student` och `Teacher`. Lägg till egenskaper specifika för varje underklass, som årskurs för `Student` och ämne för `Teacher`. Skapa instanser av varje klass och skriv ut deras detaljer.
2. **RPG Karaktärer**
Skapa en grundklass `Character` med attribut som namn, hälsa och nivå. Utvidga denna klass för att skapa specifika karaktärsklasser som `Warrior`, `Wizard` och `Rouge`. Varje klass bör ha unika attribut och metoder som printar vad de gör. Skapa instanser av varje klass och demonstrera deras förmågor.
3. **Former**
Skapa en grundklass `Shape` med attributet färg. Utvidga denna klass för att skapa subklasser för specifika former: `Circle`, `Rectangle` och `Triangle`. Implementera metoder för att beräkna arean för varje form. Skapa objekt av varje form, beräkna och visa deras ytor.
4. **Sten sax påse spelare**
Utgå från följande kod för att bygga ett litet sten-sax-påse spel.
* Skapa en klass `Player` som innehåller ett attribut som heter `score` och en metod `makeMove` som returnerar en string ("rock", "paper", eller "scissors").
* Implementera metoden så att den returnerar ett slumpmässigt resultat.
* Skapa en ny klass `HumanPlayer` som extendar `Player` och "overida" metoden `makeMove` så att den istället använder en scanner så användaren får skriva in vilket drag den ska göra.
```java
public class RockPaperScissors {
Player botPlayer = new Player();
HumanPlayer humanPlayer = new HumanPlayer();
public static void main(String[] args) {
RockPaperScissors game = new RockPaperScissors();
game.run();
}
void run(){
System.out.println("Rock paper scissors");
System.out.println("-------------------");
System.out.println("First to 5 points win!");
while(botPlayer.score < 5 && humanPlayer.score < 5){
String botMove = botPlayer.makeMove();
String humanMove = humanPlayer.makeMove();
int result = result(botMove, humanMove);
if (result == 0){
System.out.println("Bot scored");
botPlayer.score++;
}else if (result == 2){
System.out.println("Human scored");
humanPlayer.score++;
}
}
if(botPlayer.score > humanPlayer.score){
System.out.println("The bot won!");
}else{
System.out.println("The human won!");
}
}
int result(String p1Move, String p2Move){
if (p1Move.equals(p2Move)){
return 1;
}
if ((p1Move.equals("rock") && p2Move.equals("scissors")) ||
(p1Move.equals("paper") && p2Move.equals("rock")) ||
(p1Move.equals("scissors") && p2Move.equals("paper"))) {
return 0;
} else {
return 2;
}
}
}
```
5. **Frågesportsspel**
Bygg ett litet frågesportsspel som ställer frågor och kollar om man svarar rätt. Programmet ska använda sig av en superklass `Question` som innehåller:
* En String för frågan
* En String för korrekt svar
* En metod `printQuestion()` som skriver ut frågan.
* En metod `boolean checkAnswer(String answer)` som returnerar sant om `answer` är korrekt och falskt om det är fel.
Skapa sedan följande subklasser till `Question`:
* `MultipleChoiceQuestion` som overidar `printQuestion` och skriver ut svarsalternativ
* `YesNoQuestion` som man bara kan svara "yes" eller "no" på.
* `NumberQuestion` som man bara kan svara med en siffra, och korrekt svar är inom ett givet intervall.
* Fler subklasser om du kan komma på fler varianter på quiz-frågor.