Clean-up and README

This commit is contained in:
KuMiShi
2026-01-30 16:31:38 +01:00
parent 351f676611
commit f2f8af3aec
11 changed files with 38 additions and 22 deletions

2
.gitignore vendored
View File

@@ -2,7 +2,7 @@
.venv/ .venv/
.python-version .python-version
__pycache__/ __pycache__/
uv.lock *.lock
# Save/Load files for testing # Save/Load files for testing
*.json *.json

View File

@@ -1,13 +1,15 @@
# Wyvern&Castle # Wyvern&Castle
Projet de NLP 2025-2026. Modèle MCP de D&D. Ceci est un projet de **modèle MCP** ([Model Context Protocol](https://modelcontextprotocol.io/docs/getting-started/intro)) pour le cours de **Natural Language Programming** de l'année 2025-2026.
L'objectif du projet a été de concevoir une **version simplifié du jeu Donjon & Dragon** avec un LLM capable de générer des parties et des scénarios qui n'ont de limite que votre imagination (et celles du LLM aussi!).
Le projet contient un serveur (`server.py`) qui intéragit avec notre API de jeu (`game.py`).
# Initialisation du jeu ## Initialisation du projet
Pour lancer une partie de notre jeu, nous vous conseillons d'installer **[Claude Desktop](https://claude.com/fr-fr/download)** (disponible sur Windows
et Mac) qui va servir de LLM. Nous n'avons pas essayé mais il serait aussi possible d'utiliser la **version Desktop de ChatGPT**
Pour lancer la partie il faut tout d'abord installer [Claude Desktop](https://claude.com/fr-fr/download) (disponible sur Windows 1. Installer l'utilitaire python UV :
et Mac).
## Installer l'utilitaire python UV :
```bash ```bash
# Mac/Linux # Mac/Linux
curl -LsSf https://astral.sh/uv/install.sh | sh curl -LsSf https://astral.sh/uv/install.sh | sh
@@ -15,14 +17,14 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
``` ```
## Initialiser le dossier pour l'installation 2. Initialiser le dossier pour l'installation
Creer un dossier et cloner le projet : Creer un dossier et cloner le projet :
```bash ```bash
uv init wyvern-castle mkdir wyvern_castle
cd wyvern-castle cd wyvern_castle
git clone "https://gitea.galaxynoliro.fr/KuMiShi/Wyvern-Castle.git" git clone "https://gitea.galaxynoliro.fr/KuMiShi/Wyvern-Castle.git"
``` ```
## Creation de l'environnement virtuel 3. Creation de l'environnement virtuel
```bash ```bash
uv venv uv venv
``` ```
@@ -35,18 +37,24 @@ Windows
.\.venv\Scripts\activate .\.venv\Scripts\activate
``` ```
## Installation du client mcp 4. Installation des dependances/requirements
```bash ```bash
uv add mcp[cli] httpx # Synchronise l'environnement virtuel du dossier avec les dependances du projet
uv pip sync pyproject.toml
# Si cela ne fonctionne pas correctement, vous pouvez le générer un fichier de dependances avec la commande suivante à partir du .toml:
uv pip compile --upgrade pyproject.toml -o uv.lock
# Puis synchroniser à nouveau (avec le nouveau fichier cette fois)
uv pip sync uv.lock
``` ```
## Changement de la config de Claude Desktop 5. Changement de la config de Claude Desktop
Modifier le fichier `claude_desktop_config.json` Modifier le fichier `claude_desktop_config.json`
```json ```json
{ {
"mcpServers": { "mcpServers": {
"weather": { "wyvern_castle": {
"command": "uv", "command": "uv",
"args": [ "args": [
"--directory", "--directory",
@@ -59,3 +67,5 @@ Modifier le fichier `claude_desktop_config.json`
} }
``` ```
## Utilisation
Le projet est assez simple d'utilisation car une fois le serveur lancé, il vous suffit d'écrire des prompts à l'aide de votre application Desktop de LLM. Il est aussi possible d'avoir accès à une aide de génération de prompt intégrée.

View File

@@ -1,6 +1,6 @@
# Game imports # Game imports
from serializable import Serializable from utils.serializable import Serializable
from items.item import Item from utils.item import Item
# Native imports # Native imports
import uuid import uuid

View File

@@ -1,3 +1,4 @@
# Game imports
from entities.entity import Entity from entities.entity import Entity
class NPC(Entity): class NPC(Entity):

View File

@@ -1,3 +1,4 @@
# Game imports
from entities.entity import Entity from entities.entity import Entity
class Player(Entity): class Player(Entity):

View File

@@ -1,5 +1,5 @@
# Game imports # Game imports
from serializable import Serializable from utils.serializable import Serializable
from entities.entity import Entity from entities.entity import Entity
from turn import Turn, TurnAction from turn import Turn, TurnAction

View File

@@ -1,5 +1,5 @@
# Game import # Game import
from serializable import Serializable from utils.serializable import Serializable
# Native imports # Native imports
from enum import Enum from enum import Enum

View File

@@ -1,11 +1,13 @@
# Game imports
from serializable import Serializable from serializable import Serializable
from dice import Dice from dice import Dice
from events.event import Event from events.event import Event
from entities.player import Player from entities.player import Player
from entities.npc import NPC from entities.npc import NPC
from items.item import Item from utils.item import Item
from events.turn import TurnAction from events.turn import TurnAction
# Native imports
from enum import IntEnum from enum import IntEnum
class Stat(IntEnum): class Stat(IntEnum):

View File

@@ -1,10 +1,11 @@
from typing import Dict # Game imports
from serializable import Serializable from serializable import Serializable
# Native imports
import uuid import uuid
class Item(Serializable): class Item(Serializable):
def __init__(self,name:str, description:str, stat_modifier:Dict[str, int]): def __init__(self,name:str, description:str, stat_modifier:dict[str, int]):
super().__init__() super().__init__()
self.id = str(uuid.uuid4()) self.id = str(uuid.uuid4())
self.name = name self.name = name

View File

@@ -1,3 +1,4 @@
# Native imports
import json import json
from typing import Any, Dict, List, Type, TypeVar from typing import Any, Dict, List, Type, TypeVar