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