Key Ideas
1KEYDOWN/KEYUP. Fire once per press/release — correct for one-shot actions like jump or pause, wrong for smooth movement.
2key.get_pressed(). Returns a snapshot of every key's held state each frame — the right tool for continuous movement (WASD/arrows).
3Mouse Position. pygame.mouse.get_pos() returns the current (x,y) every frame; MOUSEMOTION events also carry it.
4Mouse Buttons. MOUSEBUTTONDOWN/UP events carry event.button (1=left, 2=middle, 3=right) and event.pos.
5Dragging. Track a dragging flag: set True on MOUSEBUTTONDOWN over the object, False on MOUSEBUTTONUP, move it on MOUSEMOTION while True.
6Scroll Wheel. MOUSEWHEEL events carry event.y (+1 up, -1 down) — used for zoom or menu scrolling.