---
# System prepended metadata

title: Programmering 2 Uppgiftsblad Arv

---

# 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.


