Clean-up and README
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -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
|
||||||
38
README.md
38
README.md
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# Game imports
|
||||||
from entities.entity import Entity
|
from entities.entity import Entity
|
||||||
|
|
||||||
class NPC(Entity):
|
class NPC(Entity):
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
# Game imports
|
||||||
from entities.entity import Entity
|
from entities.entity import Entity
|
||||||
|
|
||||||
class Player(Entity):
|
class Player(Entity):
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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):
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
Reference in New Issue
Block a user