Spaces:
Runtime error
Runtime error
Create cooperative_system.py
Browse files- cooperative_system.py +93 -0
cooperative_system.py
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# cooperative_system.py
|
| 2 |
+
import time
|
| 3 |
+
from typing import Dict, Optional
|
| 4 |
+
from uuid import uuid4
|
| 5 |
+
from game_engine import Vector2D, GauchoCharacter, PhysicsEngine
|
| 6 |
+
|
| 7 |
+
class CompanionSystem:
|
| 8 |
+
"""Sistema de compa帽ero de mate para combate cooperativo"""
|
| 9 |
+
def __init__(self):
|
| 10 |
+
self.pairs: Dict[str, dict] = {}
|
| 11 |
+
self.session_timeout = 300 # 5 minutos
|
| 12 |
+
|
| 13 |
+
def create_session(self, player1: GauchoCharacter) -> str:
|
| 14 |
+
session_id = str(uuid4())
|
| 15 |
+
self.pairs[session_id] = {
|
| 16 |
+
'player1': player1,
|
| 17 |
+
'player2': None,
|
| 18 |
+
'last_activity': time.time(),
|
| 19 |
+
'combos': {
|
| 20 |
+
'mate_sync': False,
|
| 21 |
+
'asado_power': 0.0,
|
| 22 |
+
'cultural_chain': 0
|
| 23 |
+
}
|
| 24 |
+
}
|
| 25 |
+
return session_id
|
| 26 |
+
|
| 27 |
+
def join_session(self, session_id: str, player2: GauchoCharacter) -> bool:
|
| 28 |
+
if session_id in self.pairs and self.pairs[session_id]['player2'] is None:
|
| 29 |
+
self.pairs[session_id]['player2'] = player2
|
| 30 |
+
self.pairs[session_id]['last_activity'] = time.time()
|
| 31 |
+
return True
|
| 32 |
+
return False
|
| 33 |
+
|
| 34 |
+
def calculate_cultural_synergy(self, session_id: str) -> float:
|
| 35 |
+
"""Calcula la sinergia basada en valores argentinos compartidos"""
|
| 36 |
+
session = self.pairs.get(session_id)
|
| 37 |
+
if not session:
|
| 38 |
+
return 0.0
|
| 39 |
+
|
| 40 |
+
common_values = sum(
|
| 41 |
+
1 for valor in session['player1'].inventory['cristales']
|
| 42 |
+
if session['player1'].inventory['cristales'][valor] and
|
| 43 |
+
session['player2'].inventory['cristales'][valor]
|
| 44 |
+
)
|
| 45 |
+
return min(1.0, common_values / 7) # Normalizado a 7 valores
|
| 46 |
+
|
| 47 |
+
def update_combat_state(self, session_id: str, player_inputs: dict):
|
| 48 |
+
"""Actualiza el estado del combate cooperativo"""
|
| 49 |
+
session = self.pairs.get(session_id)
|
| 50 |
+
if not session:
|
| 51 |
+
return
|
| 52 |
+
|
| 53 |
+
# L贸gica de combos culturales
|
| 54 |
+
if player_inputs['player1'].get('action') == 'mate' and \
|
| 55 |
+
player_inputs['player2'].get('action') == 'mate':
|
| 56 |
+
session['combos']['mate_sync'] = True
|
| 57 |
+
session['combos']['asado_power'] += 0.1
|
| 58 |
+
|
| 59 |
+
# Resetear si hay desincronizaci贸n
|
| 60 |
+
if time.time() - session['last_activity'] > self.session_timeout:
|
| 61 |
+
self.pairs.pop(session_id, None)
|
| 62 |
+
|
| 63 |
+
class AlienAlgorithmEnemy:
|
| 64 |
+
"""IA para enemigos algor铆tmicos con patrones adaptativos"""
|
| 65 |
+
def __init__(self, difficulty: str):
|
| 66 |
+
self.difficulty = difficulty
|
| 67 |
+
self.patterns = {
|
| 68 |
+
'homogenization_wave': self._homogenization_pattern,
|
| 69 |
+
'cultural_erasure': self._erasure_pattern,
|
| 70 |
+
'identity_fragmentation': self._fragmentation_pattern
|
| 71 |
+
}
|
| 72 |
+
self.current_pattern = None
|
| 73 |
+
|
| 74 |
+
def _homogenization_pattern(self, player_pos: Vector2D) -> Vector2D:
|
| 75 |
+
"""Patr贸n de ataque que busca limitar movimiento"""
|
| 76 |
+
return Vector2D(
|
| 77 |
+
math.copysign(2.5, player_pos.x),
|
| 78 |
+
math.copysign(1.8, player_pos.y)
|
| 79 |
+
)
|
| 80 |
+
|
| 81 |
+
def _cultural_erasure(self, player: GauchoCharacter) -> dict:
|
| 82 |
+
"""Ataque que reduce habilidades culturales"""
|
| 83 |
+
return {
|
| 84 |
+
'disable_abilities': [
|
| 85 |
+
ability for ability, unlocked in player.abilities.items()
|
| 86 |
+
if unlocked
|
| 87 |
+
][:1]
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
def update_ai(self, players: list, physics: PhysicsEngine):
|
| 91 |
+
"""Actualiza la IA basada en el estado de los jugadores"""
|
| 92 |
+
# L贸gica compleja de selecci贸n de patrones
|
| 93 |
+
pass
|