feat(vida): 20 atividades e necessidades no estilo The Sims
Quatorze cenas novas para o bonequinho: cochilar na caminha (cobertor respirando e Zzz), café (vapor e gole), cozinhar (vira a panqueca no fogão), regar a plantinha (cresce e dá flor), violão, dançar (globo espelhado), pular corda, meditar flutuando, telescópio (céu estrelado e estrela cadente), pipa com rabiola, bolhas de sabão, skate (com ollie), computador (código aparecendo) e pescar (o peixe pula preso na linha). Necessidades puxam comportamento, como no The Sims: - energia < 40%: às vezes cochila; < 20%: dorme de verdade com sono respeitado (som comum, movimento e PIR não acordam) até 95%; acordar de propósito (toque, painel) encerra o sono pesado; - alegria abaixo de 60%: o rosto vai ficando emburrado (zanga 0 a 1: testa franzida, boca para baixo, olhos bravos); < 30%: mal-humorado; - diversão < 45%: faz uma atividade de 2 a 5 min escolhida pelo pique (cansado prefere calmas, café dá energia); pode ser interrompido; - durante a atividade a diversão sobe e a energia cai conforme o tipo. Com o modo vida ligado o celular não adormece mais por 20 s de silêncio: quem decide o sono é a energia. A cor escolhida nunca muda com a zanga. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+49
-3
@@ -100,11 +100,14 @@ class VidaTest(unittest.TestCase):
|
||||
self.v.celular_online = lambda: True
|
||||
self.v.necessidades.update(energia=80, alegria=70, social=70, diversao=10) # entediado
|
||||
self.v.rng.random = lambda: 0.0 # sorteio sempre "sim"
|
||||
ato = self.v.agir(DIA)
|
||||
ato = self.v.agir(DIA) # entediado: vai fazer algo
|
||||
self.assertTrue(ato.startswith('atividade '))
|
||||
self.assertIn(ato.split()[1], ('videogame', 'bola', 'pintar', 'ler'))
|
||||
self.assertEqual(self.ordens[-1], ato)
|
||||
nome, segundos = self.ordens[-1].split()[1:]
|
||||
self.assertEqual(ato, 'atividade ' + nome)
|
||||
self.assertTrue(120 <= float(segundos) <= 300) # por alguns minutos
|
||||
self.assertEqual(self.v.diario[0]['tipo'], 'atividade')
|
||||
self.v.celular_atividade = lambda: nome # fazendo: diversão sobe
|
||||
self.v.passar_tempo(DIA + 180)
|
||||
self.assertGreater(self.v.necessidades['diversao'], 10)
|
||||
self.v.celular_atividade = lambda: 'videogame' # ocupado: não interrompe
|
||||
self.assertIsNone(self.v.agir(DIA + 60))
|
||||
@@ -113,6 +116,49 @@ class VidaTest(unittest.TestCase):
|
||||
self.v.config['noite'] = False
|
||||
self.assertFalse(str(self.v.agir(noite)).startswith('atividade')) # de madrugada, nunca
|
||||
|
||||
def test_exausto_dorme_e_o_sono_e_respeitado(self):
|
||||
self.v.necessidades['energia'] = 15
|
||||
self.assertEqual(self.v.agir(DIA), 'dormir')
|
||||
self.assertTrue(self.v.sono_profundo)
|
||||
self.assertIn('sono profundo', self.ordens)
|
||||
self.v.necessidades['energia'] = 60
|
||||
self.assertIsNone(self.v.agir(DIA + 60)) # ainda não descansou
|
||||
self.v.necessidades['energia'] = 96
|
||||
self.assertEqual(self.v.agir(DIA + 120), 'acordar')
|
||||
self.assertFalse(self.v.sono_profundo)
|
||||
self.assertIn('sono leve', self.ordens)
|
||||
|
||||
def test_acordado_de_proposito_encerra_o_sono_pesado(self):
|
||||
self.v.necessidades['energia'] = 15
|
||||
self.v.agir(DIA)
|
||||
self.v.celular_dormindo = lambda: False # tocaram na tela
|
||||
self.v.tick(DIA + 30)
|
||||
self.assertFalse(self.v.sono_profundo)
|
||||
self.assertEqual(self.v.diario[0]['texto'], 'Acordou antes de descansar')
|
||||
|
||||
def test_cochilo_quando_cansado(self):
|
||||
self.v.celular_online = lambda: True
|
||||
self.v.rng.random = lambda: 0.0
|
||||
self.v.necessidades.update(energia=35, diversao=80)
|
||||
self.assertEqual(self.v.agir(DIA), 'atividade dormir')
|
||||
self.v.celular_atividade = lambda: 'dormir' # na caminha: recupera
|
||||
antes = self.v.necessidades['energia']
|
||||
self.v.passar_tempo(DIA + 300)
|
||||
self.assertGreater(self.v.necessidades['energia'], antes)
|
||||
|
||||
def test_alegria_caindo_deixa_bravo(self):
|
||||
self.v.necessidades.update(energia=80, social=80, diversao=80, alegria=100)
|
||||
self.assertEqual(self.v.zanga(), 0.0)
|
||||
self.v.necessidades['alegria'] = 42
|
||||
self.assertEqual(self.v.zanga(), 0.4)
|
||||
self.v.tick(DIA + 5)
|
||||
self.assertIn('zanga 0.4', self.ordens)
|
||||
self.v.necessidades['alegria'] = 20
|
||||
self.assertEqual(self.v.humor(), 'bravo')
|
||||
self.assertEqual(self.v.zanga(), 0.9)
|
||||
self.v.dormindo_proprio = True # dormindo, sem cara feia
|
||||
self.assertEqual(self.v.zanga(), 0.0)
|
||||
|
||||
def test_horario_da_madrugada(self):
|
||||
from controle_pc import madrugada
|
||||
h = lambda hora: time.mktime((2026, 10, 6, hora, 10, 0, 0, 0, -1))
|
||||
|
||||
Reference in New Issue
Block a user