2026-03-08 12:06:47 +01:00
2026-03-08 11:55:18 +01:00
2026-03-08 11:55:18 +01:00
2026-03-08 11:55:18 +01:00
2026-03-08 12:06:47 +01:00

Clean Code Demo (C# Console)

En liten, självständig C#konsolapplikation som demonstrerar ett turordningsbaserat stridssystem mellan en Player och olika Enemytyper. Fokus ligger på enkla domänobjekt, gränssnitt och en tjänst som orkestrerar striden.


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

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

# 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:

  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
Description
No description provided
Readme 36 KiB
Languages
C# 100%