/
megaokna43
/
TestSchulteTable
Обзор
Документация
Войти
/
megaokna43
/
TestSchulteTable
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/test_interface.py
91 строка
4 KB
megaokna43
mvp_test_shulte, initial Readme.md, requirements.txt
09 апр 2025, 05:33
09 апр 2025, 05:33
1208eb8
Код
Авторство
О чём код?
import os import pygame import time import json from datetime import datetime from table_generation import TableGenerator class TestInterface: def __init__(self, user_name): self.user_name = user_name self.start_time = time.time() self.test_id = datetime.now().strftime("%Y%m%d_%H%M%S") self.tables = [TableGenerator.reshape_to_5x5(table) for table in TableGenerator.generate_tables()] self.log_data = [] self.current_table = 0 self.current_number = 1 def save_results(self): data_dir = os.path.join('src', 'data') os.makedirs(data_dir, exist_ok=True) filename = os.path.join(data_dir, f"test_sulie_{self.test_id}.json") result = { "user": self.user_name, "test_id": self.test_id, "results": self.log_data } with open(filename, 'w', encoding='utf-8') as f: json.dump(result, f, ensure_ascii=False, indent=4) def draw_table(self, screen, table): screen.fill((255, 255, 255)) font = pygame.font.SysFont('Arial', 32) for row in range(5): for col in range(5): pygame.draw.rect(screen, (200, 200, 200), (col*120, row*120, 120, 120), 1) number = font.render(str(table[row][col]), True, (0, 0, 0)) screen.blit(number, (col*120 + 50, row*120 + 50)) pygame.display.flip() def run_test(self): pygame.init() screen = pygame.display.set_mode((600, 600)) pygame.display.set_caption("Тест Шульте") while self.current_table < 5 and time.time() - self.start_time < 600: self.table_start_time = time.time() table = self.tables[self.current_table] self.current_number = 1 self.draw_table(screen, table) while self.current_number <= 25: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() return if event.type == pygame.MOUSEBUTTONDOWN: x, y = pygame.mouse.get_pos() col = x // 120 row = y // 120 if 0 <= row < 5 and 0 <= col < 5: # Check bounds if table[row][col] == self.current_number: self.log_data.append({ "table": self.current_table + 1, "number": self.current_number, "time": time.time() - self.table_start_time, "correct": True }) self.current_number += 1 self.draw_table(screen, table) else: self.log_data.append({ "table": self.current_table + 1, "number": self.current_number, "time": time.time() - self.table_start_time, "correct": False }) pygame.display.flip() self.current_table += 1 if self.current_table < 5: time.sleep(2) pygame.quit() self.save_results() if time.time() - self.start_time >= 600: print("Время закончилось - тест не пройден!")