# TextRPG Demo (C# Console) En liten, självständig C#‑konsolapplikation som demonstrerar ett turordningsbaserat stridssystem mellan en **Player** och olika **Enemy**‑typer. Fokus ligger på enkla domänobjekt, gränssnitt och en tjänst som orkestrerar striden. > **Byt gärna rubriken** till ditt projektnamn. --- ## Innehåll - Strider mellan spelare och fiender (med boss‑modifierad skada) - Enkelt loot‑system (t.ex. *gold*, *dragon_scale*) - Inventarie som påverkar skada (*sword*) och helning (*potion*) - Klara, separata ansvarsområden via gränssnitt (`IAttackable`, `IDescribable`) --- ## Arkitekturöversikt ```mermaid classDiagram class Player { +string Name +bool IsDead +void TakeDamage(int) +void Heal() +int CalculateDamage() +void AddToInventory(string) +void Describe() } class Enemy { +string Name +bool IsDead +int Damage +EnemyType Type +void TakeDamage(int) +string GetLoot() +void Describe() } class BattleService { +void PlayerAttacks(Player, Enemy) +void EnemyAttacks(Enemy, Player) } class GameRunner { +static void Main(string[]) } IAttackable <|.. Player IAttackable <|.. Enemy IDescribable <|.. Player IDescribable <|.. Enemy EnemyType <.. Enemy EnemyType <.. BattleService GameRunner --> Player GameRunner --> Enemy GameRunner --> BattleService ``` - **`GameRunner`** skapar spelare och fiender och kör igenom några rundor. - **`BattleService`** innehåller stridslogik åt båda håll och hanterar boss‑modifierad skada. - **`Player`** och **`Enemy`** implementerar **`IAttackable`** (kan ta skada) och **`IDescribable`** (kan beskrivas/skrivas ut). - **`EnemyType`** skiljer på vanliga fiender och bossar för skaleffekt i skada. --- ## Projektstruktur ``` . ├─ GameRunner.cs ├─ BattleService.cs ├─ Player.cs ├─ Enemy.cs ├─ EnemyType.cs ├─ IAttackable.cs └─ IDescribable.cs ``` **Kort om filerna** - `GameRunner.cs` – Programstart; sätter upp spelare/fiender och kör exempelstrider. - `BattleService.cs` – Metoder för spelar‑ och fiendeattacker, inklusive boss‑modifiering av skada. - `Player.cs` – Spelarens HP, bas‑skada, inventarie (t.ex. `potion`, `sword`), helning och damage‑beräkning. - `Enemy.cs` – Fiendens HP, skada, typ och loot‑logik (`gold` eller `dragon_scale`). - `EnemyType.cs` – Enum: `Normal` eller `Boss`. - `IAttackable.cs` – Gränssnitt för entiteter som kan ta skada. - `IDescribable.cs` – Gränssnitt för entiteter som kan beskrivas/skrivas ut. --- ## Kom igång ### Förutsättningar - **.NET SDK 6.0+** (fungerar fint även på nyare versioner). ### Klona och kör ```bash # Klona repo git clone cd # Bygg & kör (i en mapp med .csproj) dotnet build dotnet run ``` > **Saknas .csproj?** Skapa ett nytt konsolprojekt och lägg in filerna: ```bash # Skapa nytt projekt mkdir TextRpgDemo && cd TextRpgDemo dotnet new console -n TextRpgDemo # Flytta in källfilerna i projektmappen (TextRpgDemo/) # … och kör sedan cd TextRpgDemo dotnet run ``` --- ## Exempel: flöde och utdata Körningen i `GameRunner` gör ungefär detta: 1. Skapa `Player("Hero", 100, 15)` och lägg till `potion` och `sword` i inventariet. 2. Skapa `Enemy("Goblin", 40, 8, Normal)` och `Enemy("Dragon", 120, 25, Boss)`. 3. Spelaren och goblinen slåss tills goblinen dör och droppar `gold`. 4. Spelaren helar sig med `potion`. 5. Kort boss‑fight mot draken (boss‑skada är 1.5× avrundat nedåt). **Typisk konsolutskrift** (förkortad): ``` === GAME START === --- Hero --- HP: 100 Base DMG: 15 Inventory: potion, sword --- Goblin (enemy) --- HP: 40 Type: Normal -- Round 1 -- Hero attackts Goblin for 25 Goblin attackts Hero for 8 Hero attackts Goblin for 25 Goblin is dead Hero received: gold -- Round 2 -- --- Hero --- HP: 92 Base DMG: 15 Inventory: potion, sword, gold Hero healed to 122 -- Boss Fight -- --- Dragon (enemy) --- HP: 120 Type: Boss Hero attackts Dragon for 25 Dragon attackts Hero for 37 Hero attackts Dragon for 25 Dragon attackts Hero for 37 Hero attackts Dragon for 25 === RESULT === --- Hero --- HP: 48 Base DMG: 15 Inventory: sword, gold ``` > Notera stavningen `attackts` i loggraden – det speglar koden och kan enkelt rättas i `BattleService` om du vill. --- ## Designval och utbyggnad - **Enkla gränssnitt** gör det lätt att lägga till fler typer av entiteter som kan delta i strid. - **Inventarie‑påverkan** visar hur utrustning och konsumtionsobjekt kan förändra beteende (skada/helning). - **Tjänstlager (`BattleService`)** samlar stridsreglerna och gör dem testbara. **Möjliga förbättringar** - Enhetstester för `BattleService`, `Player` och `Enemy`. - Bättre utskrift/loggning och lokalisering. - Gränser för max‑HP och skydd mot negativa värden. - Mer avancerat loot‑ och status‑effektsystem. --- ## Licens Ange licens här (t.ex. MIT). Lägg gärna till en `LICENSE`‑fil i repo. ## Kontakt Ägare/underhållare: *ersätt med ditt namn/GitHub‑användare*