From d5fcc47bce1abcc6cce2b0988e9deac94717e0bf Mon Sep 17 00:00:00 2001 From: Christian Ohlsson Date: Sun, 8 Mar 2026 12:04:35 +0100 Subject: [PATCH] Update README --- README.md | 191 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) diff --git a/README.md b/README.md index e69de29..6a00fdb 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,191 @@ + +# 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*