Ett klassiskt bullet hell space shooter-spel med en REST API backend för highscore-hantering. Projektet är byggt med MonoGame och ASP.NET Core enligt Clean Architecture-principer.
Detta repository innehåller två huvudkomponenter:
- BulletHell - Ett action-packat space shooter-spel med bullet hell-gameplay, vågbaserade fiender, parallax scrolling och explosion-animationer
- Api - En REST API för användarhantering och highscore-funktionalitet
Båda komponenterna kan köras oberoende av varandra. Spelet kan spelas offline utan API:n, men highscore-funktionalitet kräver att API:n körs.
cd BulletHell
dotnet runSe BulletHell/README.md för detaljerad information om spelmekanik, kontroller och funktioner.
cd Api
dotnet runSe Api/README.md för API-dokumentation, endpoints och användning.
- .NET 9.0 SDK
- OpenGL-kompatibelt grafikkort (för spelet)
- Linux, macOS eller Windows
BulletHellSpaceShooter/
├── BulletHell/ # 🎮 MonoGame-baserat space shooter-spel
│ ├── Scenes/ # Spelscener (Menu, Battle, GameOver)
│ ├── Models/ # Spelentiteter (Player, Enemy, Bullet)
│ ├── Managers/ # Spelsystem (Collision, Enemy, Bullet)
│ ├── Graphics/ # Kamera och renderingssystem
│ ├── UI/ # Användargränssnitt
│ ├── Content/ # Spelresurser (sprites, ljud, fonts)
│ └── README.md # Detaljerad speldokumentation
│
├── Api/ # 🌐 REST API för highscores och användare
│ ├── Endpoints/ # API-endpoints
│ │ ├── UserEndpoints.cs
│ │ └── HighScoreEndpoints.cs
│ └── README.md # API-dokumentation och endpoints
│
├── Application/ # 💼 Affärslogik och services
│ ├── Services/ # Service-implementationer
│ ├── Interfaces/ # Service-interfaces
│ └── Mapping/ # Objektmappning
│
├── Domain/ # 📦 Domänmodeller
│ └── Entities/ # User, HighScore
│
├── Repository/ # 💾 Dataåtkomstlager
│ ├── Data/ # DbContext
│ ├── Interfaces/ # Repository-interfaces
│ └── Repositories/ # Repository-implementationer
│
├── Contracts/ # 📋 API-kontrakt
│ ├── Requests/ # Request DTOs
│ └── Responses/ # Response DTOs
│
├── BulletHell.test/ # ✅ Speltester
└── Api.test/ # ✅ API-tester
- MonoGame 3.8 - Cross-platform 2D-spelramverk
- .NET 9.0 - Modern C# runtime
- BCrypt.Net - Lösenordshashning
- StyleCop - Kodkvalitetsanalys
- ASP.NET Core 9.0 - Web API-ramverk med Minimal APIs
- Entity Framework Core - ORM
- SQLite - Lokal databas
- OpenAPI/Swagger - API-dokumentation
- Clean Architecture - Separation av concerns med tydliga lager
- Dependency Injection - För testbarhet och loose coupling
- Repository Pattern - Abstraktion för dataåtkomst
- xUnit - Testramverk
# Klona repository
git clone <repository-url>
cd BulletHell
# Återställ dependencies
dotnet restore
# Bygg alla projekt
dotnet build
# Kör alla tester
dotnet testDebug (standardläge med debuginformation):
dotnet buildRelease (optimerad för produktion):
dotnet build -c Releasecd BulletHell
dotnet runKontroller:
- Piltangenter / WASD - Rörelse
- Automatisk skjutning
- Escape - Pausa/Tillbaka
För fullständig spelguide, se BulletHell/README.md
cd Api
dotnet runAPI:n kommer att vara tillgänglig på https://localhost:5001
Huvudendpoints:
/api/users- Användarhantering/api/highscores- Highscore-hantering/openapi/v1.json- OpenAPI-specifikation (endast development)
För fullständig API-dokumentation, se Api/README.md
Kör alla tester:
dotnet testKör specifika testprojekt:
dotnet test BulletHell.test/BulletHell.test.csproj
dotnet test Api.test/Api.test.csprojMed kodtäckning:
dotnet test --collect:"XPlat Code Coverage"Projektet följer Clean Architecture med tydlig separation mellan lager:
- Presentation Layer (BulletHell, Api) - UI och API-endpoints
- Application Layer (Application) - Affärslogik och use cases
- Domain Layer (Domain, Contracts) - Domänmodeller och kontrakt
- Infrastructure Layer (Repository) - Dataåtkomst och externa tjänster
BulletHell ──┐
├──> Application ──> Domain
Api ─────────┘ ↑
│
Repository ─────────────────────────┘
- Dependency Injection - All beroende hantering
- Repository Pattern - Abstraktion för datalagring
- Service Layer Pattern - Affärslogik isolerad från presentation
- Scene Pattern - Spelstatus-hantering (Menu, Battle, GameOver)
Projektet använder SQLite för lokal datalagring. Databasen skapas automatiskt vid första körningen av API:n.
Tabeller:
- Users - Användarinformation med hashade lösenord
- HighScores - Poängrekord kopplade till användare
Databasfilen lagras enligt MyDbContext.GetDefaultDatabasePath().
- StyleCop Analyzers - Kodkvalitet enforced vid build
- Nullable Reference Types - Aktiverat i alla projekt
- .editorconfig - Enhetlig formattering
- C# 13 / .NET 9.0 - Moderna språkfunktioner
För spelet:
- Se utvecklingsguiden i BulletHell/README.md
För API:n:
- Se utvecklingsguiden i Api/README.md
Visual Studio:
- Öppna
BulletHellSpaceShooter.sln - Sätt önskat startprojekt (BulletHell eller Api)
JetBrains Rider:
- Öppna
BulletHellSpaceShooter.sln - Full IntelliSense och debugging-stöd
Visual Studio Code:
- Installera C# Dev Kit
- Använd
dotnet runför att starta projekt
- Forka projektet
- Skapa en feature branch (
git checkout -b feature/AmazingFeature) - Följ befintlig kodstil (StyleCop enforced)
- Skriv tester för ny funktionalitet
- Committa dina ändringar (
git commit -m 'Add some AmazingFeature') - Pusha till branchen (
git push origin feature/AmazingFeature) - Öppna en Pull Request
- Kontrollera att .NET 9.0 SDK är installerat:
dotnet --version - Verifiera att OpenGL-drivrutiner är uppdaterade
- Kör
dotnet cleanföljt avdotnet build
- Kontrollera att rätt port används (standard: 5001 för HTTPS)
- Verifiera att SQLite-databas kan skapas i målmappen
- Granska loggar för felmeddelanden
- Kör
dotnet restoreför att säkerställa alla dependencies - Rensa tidigare builds:
dotnet clean - Kontrollera att inga andra instanser av API:n körs (för API-tester)
Lägg till licensinformation här
För detaljerad dokumentation:
- 🎮 Spel: BulletHell/README.md
- 🌐 API: Api/README.md