Initial commit
**Motivations:** - Initialisation du versionning git pour le projet **Root causes:** - N/A (Nouveau projet) **Correctifs:** - N/A **Evolutions:** - Structure initiale du projet - Ajout du .gitignore **Pages affectées:** - Tous les fichiers
This commit is contained in:
142
docs/specs/enchere_generique.md
Normal file
142
docs/specs/enchere_generique.md
Normal file
@@ -0,0 +1,142 @@
|
||||
# Spécifications : Enchère (Générique)
|
||||
|
||||
## Définition
|
||||
Mécanisme de vente entre joueurs/bots sur la Carte du Monde.
|
||||
|
||||
## Fonctionnement
|
||||
1. **Mise en vente** : Le vendeur place un animal/bébé sur la case Camion/Vente de son zoo. Définit un prix initial.
|
||||
2. **Offre** : Visible sur la Carte du Monde (slot sous le zoo).
|
||||
3. **Enchères** : Les acheteurs (joueurs/bots) proposent des prix.
|
||||
4. **Validation** : Le vendeur accepte une offre ou laisse courir.
|
||||
5. **Sécurisation** : Une fois l'offre acceptée/validée, un **délai de 10 minutes** (Sablier) s'enclenche.
|
||||
6. **Finalisation** : À la fin du sablier, le transfert de propriété et de fonds est effectué (anti-race condition).
|
||||
|
||||
## Types
|
||||
- Vente de Bébés
|
||||
- Vente d'Animaux Adultes
|
||||
|
||||
# Annexes Techniques
|
||||
|
||||
## 1. Données et États
|
||||
### Modèle de Données (JSON)
|
||||
```json
|
||||
{
|
||||
"id": "uuid",
|
||||
"seller_id": "uuid",
|
||||
"animal_ref": "uuid",
|
||||
"start_price": "integer",
|
||||
"current_bid": "integer",
|
||||
"highest_bidder_id": "uuid | null",
|
||||
"end_time": "timestamp",
|
||||
"status": "enum ('active', 'pending_validation', 'finalizing', 'completed', 'cancelled')",
|
||||
"finalization_timer": "timestamp (end)"
|
||||
}
|
||||
```
|
||||
|
||||
### Caractéristiques Initiales
|
||||
N/A
|
||||
|
||||
## 8. Logique et Interfaces
|
||||
### Pseudo-code Impacts
|
||||
```
|
||||
function placeBid(auction, bidder, amount):
|
||||
if amount <= auction.current_bid: return Error
|
||||
if bidder.coins < amount: return Error
|
||||
|
||||
auction.current_bid = amount
|
||||
auction.highest_bidder_id = bidder.id
|
||||
|
||||
function finalizeAuction(auction):
|
||||
if now < auction.finalization_timer: return
|
||||
|
||||
transferCoins(auction.highest_bidder_id, auction.seller_id, auction.current_bid)
|
||||
transferAnimal(auction.seller_id, auction.highest_bidder_id, auction.animal_ref)
|
||||
auction.status = 'completed'
|
||||
```
|
||||
|
||||
### Messages d'Infos / Alerte
|
||||
| ID | Niveau | Message |
|
||||
| :--- | :--- | :--- |
|
||||
| `BID_PLACED` | Info | "Offre placée avec succès." |
|
||||
| `OUTBID` | Alerte | "Vous avez été surenchéri !" |
|
||||
| `AUCTION_WON` | Succès | "Vous avez remporté l'enchère ! Livraison en cours..." |
|
||||
|
||||
# Annexes UX/UI
|
||||
|
||||
## 1. Expérience Utilisateur (UX)
|
||||
### Consultation des Offres (Consultation)
|
||||
**Description UX** : Le joueur survole les zoos sur la carte du monde pour voir les offres.
|
||||
**Description UI** : Tooltip ou Slot sous le zoo affichant l'icône de l'animal et le prix actuel.
|
||||
**Emplacement** : Carte Monde.
|
||||
**Intégration** : Overlay Zoo.
|
||||
**Navigation** : Survol -> Info.
|
||||
**Événements** : `HOVER_OFFER`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `hover_soft.mp3`.
|
||||
- **Graphiques** : Cadre Offre (Doré si rare).
|
||||
- **Images** : Icône Animal.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Prix qui clignote si nouvelle enchère.
|
||||
- **Couleurs** : Vert (Abordable), Rouge (Trop cher).
|
||||
- **Textes** : "Lapin Rare - 500$".
|
||||
- **Formes** : Rectangle arrondi.
|
||||
|
||||
### Enchérir (Action)
|
||||
**Description UX** : Le joueur clique sur une offre pour ouvrir le détail et placer une enchère.
|
||||
**Description UI** : **Bottom Sheet** d'enchère. Infos complètes de l'animal. Champ de saisie "Votre offre" ou boutons rapides (+10, +50, +100).
|
||||
**Emplacement** : Modal Enchère.
|
||||
**Intégration** : Modal centrée.
|
||||
**Navigation** : Clic Offre -> Modal -> Enchérir.
|
||||
**Événements** : `PLACE_BID`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `bid_placed.mp3` (bruit de marteau).
|
||||
- **Graphiques** : Icône Marteau.
|
||||
- **Images** : Portrait Animal HD.
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Compteur prix qui monte.
|
||||
- **Couleurs** : Bouton Vert.
|
||||
- **Textes** : "Enchérir".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Sablier de Validation (Attente)
|
||||
**Description UX** : L'enchère est remportée, le transfert est en cours (10 min).
|
||||
**Description UI** : Icône Sablier sur l'offre et dans le HUD de l'acheteur.
|
||||
**Notification Push** : "Enchère remportée ! Animal livré." à la fin du timer.
|
||||
**Emplacement** : Carte Monde & HUD.
|
||||
**Intégration** : Statut "En cours".
|
||||
**Navigation** : N/A
|
||||
**Événements** : `TIMER_START`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `tick_tock.mp3` (ambiance très discrète si focus).
|
||||
- **Graphiques** : Sablier animé.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Sable qui coule.
|
||||
- **Couleurs** : Orange.
|
||||
- **Textes** : "Validation : MM:SS".
|
||||
- **Formes** : N/A
|
||||
|
||||
### Activité "Clic" (Gameplay)
|
||||
**Description UX** : Pendant les 10 min, le joueur peut cliquer sur le sablier pour "accélérer" (symboliquement) ou gagner un petit bonus (XP/Pièce) pour patienter.
|
||||
**Description UI** : Le sablier réagit au clic (secousse).
|
||||
**Emplacement** : Modal Validation.
|
||||
**Intégration** : Mini-jeu.
|
||||
**Navigation** : Clic Sablier.
|
||||
**Événements** : `CLICK_HOURGLASS`.
|
||||
|
||||
#### Assets
|
||||
- **Musiques** : N/A
|
||||
- **Sons** : `sand_shake.mp3`. **Design ASMR** : Bruit de sable qui crisse ou petit choc mat.
|
||||
- **Graphiques** : Particules de sable.
|
||||
- **Images** : N/A
|
||||
- **Vidéos** : N/A
|
||||
- **Animations** : Secousse.
|
||||
- **Couleurs** : N/A
|
||||
- **Textes** : "+1 XP".
|
||||
- **Formes** : N/A
|
||||
Reference in New Issue
Block a user