Ett bullet hell-spel byggt med MonoGame och .NET 9.0. Projektet följer clean architecture-principer med separation av concerns och dependency injection.
Ett klassiskt bullet hell space shooter-spel där spelaren styr ett rymdskepp och skjuter projektiler. Projektet är byggt med modern C#-arkitektur och inkluderar en REST API för highscore-hantering.
- Spelarstyrning med tangentbord
- Skjutmekanik med projektiler
- Dependency injection för testbarhet
- REST API för highscore-hantering
- SQLite-databas för persistence
- Enhetstest med xUnit
- Clean architecture med separerade lager
- .NET 9.0 - Ramverk
- MonoGame 3.8 - Spelutvecklingsramverk
- MonoGame.Extended - Utökad funktionalitet för MonoGame
- ASP.NET Core - Web API
- Entity Framework Core - ORM
- SQLite - Databas
- xUnit - Testramverk
BulletHellSpaceShooter/
├── BulletHell/ # Huvudspelprojekt
│ ├── Models/ # Spelmodeller (Player, Bullet)
│ ├── Interfaces/ # Abstraktioner (IInputProvider, ISpriteHelper)
│ ├── Inputs/ # Input-providers
│ ├── Helpers/ # Hjälpklasser
│ ├── Configurations/ # Konfigurationsfiler
│ └── Content/ # Spelresurser (sprites, texturer)
├── Api/ # REST API för highscores
│ └── Models/ # API-modeller
├── Domain/ # Domänentiteter
│ └── Entities/ # User, HighScore
├── Repository/ # Datalager
│ ├── Data/ # DbContext och databas
│ ├── Interfaces/ # Repository-interfaces
│ └── Repositories/ # Repository-implementationer
├── BulletHell.test/ # Speltester
└── Api.test/ # API-tester
- .NET 9.0 SDK
- Linux, macOS eller Windows
- Klona repositoryt:
git clone <repository-url>
cd bullethell- Återställ NuGet-paket:
dotnet restore- Bygg projektet:
dotnet buildcd BulletHell
dotnet run- Piltangenter - Rörelse
- Mellanslag - Skjut
- Escape - Avsluta spelet
cd Api
dotnet runAPI:et kommer att vara tillgängligt på https://localhost:5001 (eller den port som anges i launchSettings.json).
Kör alla tester:
dotnet testKör specifika testprojekt:
dotnet test BulletHell.test/BulletHell.test.csproj
dotnet test Api.test/Api.test.csprojProjektet använder dependency injection för att möjliggöra testbarhet och loose coupling:
- IInputProvider - Abstraktion för input (tangentbord, gamepad, etc.)
- ISpriteHelper - Abstraktion för sprite-hantering
- IRepository - Abstraktion för dataaccess
Huvudspelklassen som hanterar:
- Game loop (Update/Draw)
- Spelarhantering
- Bullet-hantering
- Kollisionsdetektering
Spelarklass med:
- Rörelse baserad på input
- Skjutmekanik
- Position och hastighet
Projektilklass med:
- Rörelselogik
- Livstid
- Ritning
Spelkonfiguration finns i Configurations/-mappen:
- PlayerConfig.cs - Spelarinställningar
- BulletConfig.cs - Projektilsinställningar
- SpriteDefaults.cs - Standardvärden för sprites
API:et exponerar följande endpoints (exempel):
GET /weatherforecast- Exempel-endpoint (kommer att ersättas med highscore-endpoints)
Projektet använder SQLite för lokal datalagring. Databasen innehåller:
- Users - Användarinformation
- HighScores - Highscore-poster
- Skapa modeller i
BulletHell/Models/ - Definiera interfaces i
BulletHell/Interfaces/ - Implementera logik i lämpliga klasser
- Uppdatera
Game1.csför att integrera nya features - Lägg till tester i
BulletHell.test/
Projektet använder:
- Nullable reference types aktiverat
- .NET 9.0 conventions
- Dependency injection pattern
- Repository pattern för dataaccess
Projektet använder xUnit för enhetstester. Tester finns i:
BulletHell.test/- SpeltesterPlayer.test.cs- SpelartesterInputHandlerTests.cs- Input-tester
Api.test/- API-tester
- Forka projektet
- Skapa en feature branch (
git checkout -b feature/AmazingFeature) - Committa dina ändringar (
git commit -m 'Add some AmazingFeature') - Pusha till branchen (
git push origin feature/AmazingFeature) - Öppna en Pull Request
Genererad med hjälp av Jojo's README Generator MCP Server