Update README
This commit is contained in:
191
README.md
191
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 <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 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*
|
||||||
|
|||||||
Reference in New Issue
Block a user