Clean Code 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.
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
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
Description
Languages
C#
100%