Files
snatchgame/gameRules.md

138 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Snatch or Share - Game Logic
## Game Overview
Snatch or Share is a multiplayer game that simulates governance evolution in decentralized exchanges, based on Elinor Ostrom's "Snatch Game".
## Game State Structure
### Main Game State
```typescript
GameState {
round: number (1-5)
groups: Group[] // Groups of 3 players
currentPhase: 'waiting' | 'trading' | 'judging' | 'results'
}
Group {
id: string
players: Player[3]
currentJudge?: Player // Only in Round 5
activeTradeOffers: TradeOffer[] // Multiple simultaneous offers
}
Player {
id: string
name: string
producerRole: 'turkey' | 'coffee' | 'corn'
tokens: {
turkey: number
coffee: number
corn: number
}
points: number // Calculated: own_tokens * 1 + other_tokens * 2
shameTokens: number // For Round 4
isSuspended: boolean // For Round 5
role: 'trader' | 'judge' // Only relevant in Round 5
}
TradeOffer {
id: string
offererId: string
targetId: string
offering: { turkey: number, coffee: number, corn: number }
requesting: { turkey: number, coffee: number, corn: number }
status: 'pending' | 'accepted' | 'rejected' | 'snatched' | 'cancelled'
}
```
## Game Initialization
### Room Configuration
- **Exactly 3 players required** to start the game
- **Maximum 3 players** per room
### Producer Role Assignment
- Each player is randomly assigned **one unique producer role**:
- **Turkey Producer**: Starts with 5 turkey tokens
- **Coffee Producer**: Starts with 5 coffee tokens
- **Corn Producer**: Starts with 5 corn tokens
- **Roles cannot be repeated** - exactly one producer of each type per game
### Judge Role (Round 5)
- In Round 5, one player becomes **Judge** (rotates each round)
- **Judge role is decorative** - player keeps their original producer role
- Judge has additional responsibilities but maintains their trading capabilities
## Round Flow (Focus: Round 1)
### Round 1: State of Nature
- **No time limits** on turns
- **Simultaneous trading**: All players can make offers at the same time
- **Offer limit**: Each player can make maximum 2 offers to each opponent
- **Offer format**: "I give X tokens in exchange for Y tokens"
- **Offer responses**: Target player can Accept, Reject, or Snatch
### Trading Mechanics
#### Making Offers
- Players can offer and request **any amount** of tokens (even more than they have)
- Offers are made simultaneously to multiple players
- Format: `offering: {turkey: X, coffee: Y, corn: Z}` for `requesting: {turkey: A, coffee: B, corn: C}`
- **All trade offers are public** - visible to all players in the room, not just offerer and target
#### Resolving Offers
- **Accept**: Trade executed to the extent possible with available tokens
- **Reject**: Offer cancelled, no exchange
- **Snatch**: Receiver gets offered tokens (up to what offerer has) without giving anything in return
- **Cancel**: Offerer can cancel pending offers
#### Partial Fulfillment
- All trades execute with available tokens only
- Example: Offer "6 corn for 6 coffee" but only have 5 corn → Execute "5 corn for 5 coffee"
- Example: Accept offer for 8 tokens but only have 3 → Give 3 tokens, receive offered amount
- **No negative consequences** for partial fulfillment - it's part of the game
## Rules by Round
### Round 1-2: State of Nature / Anarchy
- No special rules
- All players are Traders
- No enforcement mechanisms
### Round 3: Counterproductive Rule
- **Mandatory Rule**: "All trade offers must be accepted"
- Players still have freedom to snatch
- Reduces agency, invites exploitation
### Round 4: Soft Norms (Shame Tokens)
- Each player can assign 1 shame token per round
- If player starts round with 2+ shame tokens:
- Loses 2 tokens before round begins
- Barred from offering trades (can only respond)
### Round 5: Governance Rules (Ostrom Adapted)
- **Group Roles**: Two Traders and One Judge
- **Judge Role**: Rotates each round
- **Applied Rules**:
- **Position Rule**: Judge oversees fairness and conflict resolution
- **Boundary Rule**: Only group members can trade; Judge may suspend rule-breaker for 1 round
- **Choice Rule**: Trades are voluntary; Players can report snatching to Judge
- **Enforcement Rule**: If Judge confirms snatch → goods returned + snatcher forfeits 3 tokens to victim
- **Aggregation Rule**: Trade only completes with explicit mutual consent
## Key Mechanics
### Trading
- **Exchange Amount**: Always 5 tokens of player's own type
- **Value System**: own_tokens × 1 + other_tokens × 2
- **Snatch**: Take opponent's tokens without giving anything in return
### Point Calculation Examples
- Holding 10 of own = 10 points
- Holding 5 of own + 5 of other = 15 points
- Holding 10 of own + 5 snatched = 20 points
### Governance Evolution
- **Round 1-2**: No trust → no cooperation → suboptimal outcomes
- **Round 4**: Social deterrents emerge
- **Round 5**: Governance stabilizes expectations → trust emerges → optimal outcomes through fair trades