4.9 KiB
4.9 KiB
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
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
GameRunnerskapar spelare och fiender och kör igenom några rundor.BattleServiceinnehåller stridslogik åt båda håll och hanterar boss‑modifierad skada.PlayerochEnemyimplementerarIAttackable(kan ta skada) ochIDescribable(kan beskrivas/skrivas ut).EnemyTypeskiljer 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 (goldellerdragon_scale).EnemyType.cs– Enum:NormalellerBoss.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
# 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:
# 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:
- Skapa
Player("Hero", 100, 15)och lägg tillpotionochswordi inventariet. - Skapa
Enemy("Goblin", 40, 8, Normal)ochEnemy("Dragon", 120, 25, Boss). - Spelaren och goblinen slåss tills goblinen dör och droppar
gold. - Spelaren helar sig med
potion. - 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
attacktsi loggraden – det speglar koden och kan enkelt rättas iBattleServiceom 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,PlayerochEnemy. - 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