28 lines
1.3 KiB
Haskell
28 lines
1.3 KiB
Haskell
-- 1. Definition der magischen Wesen
|
|
data MagicalCreature = Dragon String Int Int
|
|
| Unicorn String Int Int
|
|
| Wizard String Int Int
|
|
deriving (Show)
|
|
|
|
-- 2. Beschreibung der magischen Wesen
|
|
describeMagicalCreature :: MagicalCreature -> String
|
|
describeMagicalCreature (Dragon name level experience) = name ++ " ist ein Drache mit Magielevel " ++ show level ++ " und " ++ show experience ++ " Erfahrungspunkten."
|
|
describeMagicalCreature (Unicorn name level experience) = name ++ " ist ein Einhorn mit Magielevel " ++ show level ++ " und " ++ show experience ++ " Erfahrungspunkten."
|
|
describeMagicalCreature (Wizard name level experience) = name ++ " ist ein Zauberer mit Magielevel " ++ show level ++ " und " ++ show experience ++ " Erfahrungspunkten."
|
|
|
|
-- 3. Kräfte
|
|
class Fighter a where
|
|
power :: a -> Int
|
|
|
|
instance Fighter MagicalCreature where
|
|
power (Dragon _ level experience) = (level + experience) * 3
|
|
power (Unicorn _ level experience) = (level + experience) * 4
|
|
power (Wizard _ level experience) = (level + experience) * 5
|
|
|
|
-- 4. Magisches Duell
|
|
duel :: (Fighter a) => a -> a -> Either String a
|
|
duel fighter1 fighter2
|
|
| power fighter1 > power fighter2 = Right fighter1
|
|
| power fighter1 < power fighter2 = Right fighter2
|
|
| otherwise = Left "Unentschieden!"
|