from fastapi import FastAPI from fastapi.responses import HTMLResponse, JSONResponse from fastapi.staticfiles import StaticFiles import random, threading, time app = FastAPI() # Serve static and HTML files app.mount("/static", StaticFiles(directory="static"), name="static") # Initialize game grid GRID = [random.randint(0,9) for _ in range(9)] LOCK = threading.Lock() # Track start time to gradually reduce the interval START_TIME = time.time() # Get interval from 3s down to 0.5s over 120s # Then remain at 0.5s thereafter def get_interval(): elapsed = time.time() - START_TIME # linear from t=0 => 3s, t=120 => 0.5s # interval(t) = -1/48 * t + 3, clamped to min 0.5 return max(0.5, -elapsed / 48 + 3) # Randomly change one number every get_interval() seconds def change_number(): global GRID while True: print("Changing a number in flipnum...") with LOCK: idx = random.randint(0, 8) old_num = GRID[idx] new_num = random.choice([x for x in range(10) if x != old_num]) GRID[idx] = new_num time.sleep(get_interval()) @app.on_event("startup") def startup_event(): threading.Thread(target=change_number, daemon=True).start() @app.get("/", response_class=HTMLResponse) def index(): with open("static/index.html") as f: return f.read() @app.get("/get_grid") def get_grid(): with LOCK: return JSONResponse(GRID)