Update README

This commit is contained in:
2026-03-08 12:04:35 +01:00
parent f966c97d32
commit d5fcc47bce

191
README.md
View File

@@ -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 bossmodifierad skada)
- Enkelt lootsystem (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 bossmodifierad 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 bossmodifiering av skada.
- `Player.cs` Spelarens HP, basskada, inventarie (t.ex. `potion`, `sword`), helning och damageberäkning.
- `Enemy.cs` Fiendens HP, skada, typ och lootlogik (`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 <din-repo-url>
cd <din-repo-mapp>
# 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 bossfight mot draken (bossskada ä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.
- **Inventariepå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 maxHP och skydd mot negativa värden.
- Mer avancerat loot och statuseffektsystem.
---
## 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/GitHubanvändare*