Doc_code
 
Cargando...
Buscando...
Nada coincide
eyepop_game.py
Ir a la documentación de este archivo.
1# eyepop_game.py
2import random
3import constants
4from pygaze import libscreen
5from pygaze import libtime
6from pygaze import liblog
7from pygaze import libinput
8from pygaze import eyetracker
9
10# Configuración inicial
11disp = libscreen.Display()
12tracker = eyetracker.EyeTracker(disp)
13keyboard = libinput.Keyboard(keylist=['space'], timeout=None)
14log = liblog.Logfile()
15log.write(["trialnr", "targetpos", "reaction_time", "success"])
16
17# Pantallas
18inscreen = libscreen.Screen()
19inscreen.draw_text(text="¡Mira los círculos lo más rápido que puedas!\n(espacio para comenzar)", fontsize=24)
20resultscreen = libscreen.Screen()
21feedbackscreens = {
22 1: libscreen.Screen(),
23 0: libscreen.Screen()
24}
25feedbackscreens[1].draw_text(text="¡Buen reflejo!", colour=(0, 255, 0), fontsize=32)
26feedbackscreens[0].draw_text(text="¡Muy lento!", colour=(255, 0, 0), fontsize=32)
27
28# Calibración
29tracker.calibrate()
30
31# Mostrar instrucciones
32disp.fill(inscreen)
33disp.show()
34keyboard.get_key()
35
36# Juego: 15 rondas
37score = 0
38for trialnr in range(1, 16):
39 # Generar posición del objetivo
40 x = random.randint(200, constants.DISPSIZE[0] - 200)
41 y = random.randint(150, constants.DISPSIZE[1] - 150)
42 targetpos = (x, y)
43
44 # Dibujar pantalla con objetivo
45 targetscreen = libscreen.Screen()
46 targetscreen.draw_circle(pos=targetpos, r=30, fill=True)
47
48 # Corrección de deriva
49 checked = False
50 while not checked:
51 disp.fill(libscreen.Screen())
52 disp.show()
53 checked = tracker.drift_correction()
54
55 # Iniciar grabación
56 tracker.start_recording()
57 disp.fill(targetscreen)
58 t0 = disp.show()
59 tracker.log(f"round_{trialnr}_shown")
60
61 # Esperar a que la mirada llegue al círculo
62 success = 0
63 reaction_time = -1
64 timeout = 1000 # 1 segundo máximo
65
66 start = libtime.get_time()
67 while libtime.get_time() - start < timeout:
68 gaze = tracker.sample()
69 dx = gaze[0] - x
70 dy = gaze[1] - y
71 dist = (dx ** 2 + dy ** 2) ** 0.5
72
73 if dist < 60:
74 success = 1
75 reaction_time = libtime.get_time() - t0
76 score += 1
77 break
78
79 tracker.stop_recording()
80
81 # Feedback
82 disp.fill(feedbackscreens[success])
83 disp.show()
84 libtime.pause(600)
85
86 # Registro
87 log.write([trialnr, targetpos, reaction_time, success])
88
89# Mostrar resultado final
90resultscreen.draw_text(text=f"Juego terminado\nPuntuación: {score}/15", fontsize=32)
91disp.fill(resultscreen)
92disp.show()
93libtime.pause(4000)
94
95# Finalizar
96log.close()
97tracker.close()
98disp.close()
99libtime.expend()