User Interface
Dr. Scott Schaefer
User Interface
•
•
•
•
Make it simple/easy to do common tasks
Don’t obscure the FOV
Simpler is typically better
Consistency is important!
Diablo
Warcraft 3
Starcraft 2
World of Warcraft
Quake 3
Quake 4
Madden ‘09
Game Control
• Must consider single/multi-player aspect
• Single player?
• Networked multi-player?
• Multi-player same machine?
• Platform limitations
Game Control: Keyboard/Mouse
• Connected to every PC but lacking on most
other platforms
• Fine for single player or
multi-player networked
• Lots of buttons!
Game Control: Joystick
• Found on most consoles
• Can also be connect to
PC via USB
• Win NT supports 2 joysticks
• Later versions support 16 joysticks
• If you want to use joysticks for your
game, you can check out Xbox
controllers from me for the
semester. I only have 16 though.
Game Control: Others
Joystick Programming with Win32
#include <windows.h>
#include <mmsystem.h>
int joyGetNumDevs ( void )
• Returns: number of joysticks supported by driver
(not number connected to machine)
Joystick Programming with Win32
MMResult joyGetDevCaps ( int id, JOYCAPS* cap,
int size )
• id: id of the joystick being tested (-1 through 15)
• cap: pointer to a JOYCAP structure
• size: size of structure pointed to by cap
• Returns: JOYERR_NOERROR if no error
Joystick Programming with Win32
•
typedef struct {
short wMid;
short wPid;
char szPname[MAXPNAMELEN];
unsigned int wXmin, wXmax, wYmin, wYmax, wZmin, wZmax;
unsigned int wNumButtons;
unsigned int wPeriodMin, wPeriodMax;
unsigned int wRmin, wRmax, wUmin, wUmax, wVmin, wVmax;
unsigned int wCaps;
unsigned int wMaxAxes;
unsigned int wNumAxes;
unsigned int wMaxButtons;
char szRegKey[MAXPNAMELEN];
char szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
} JOYCAPS;
Joystick Programming with Win32
•
typedef struct {
short wMid;
short wPid;
char szPname[MAXPNAMELEN];
unsigned int wXmin, wXmax, wYmin, wYmax, wZmin, wZmax;
unsigned int wNumButtons;
unsigned int wPeriodMin, wPeriodMax;
unsigned int wRmin, wRmax, wUmin, wUmax, wVmin, wVmax;
unsigned int wCaps;
unsigned int wMaxAxes;
unsigned int wNumAxes;
number of
unsigned int wMaxButtons;
char szRegKey[MAXPNAMELEN];
char szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
} JOYCAPS;
buttons
Joystick Programming with Win32
•
typedef struct {
short wMid;
short wPid;
char szPname[MAXPNAMELEN];
unsigned int wXmin, wXmax, wYmin, wYmax, wZmin, wZmax;
unsigned int wNumButtons;
unsigned int wPeriodMin, wPeriodMax;
unsigned int wRmin, wRmax, wUmin, wUmax, wVmin, wVmax;
unsigned int wCaps;
unsigned int wMaxAxes;
unsigned int wNumAxes;
min/max bounds
unsigned int wMaxButtons;
char szRegKey[MAXPNAMELEN];
“hat” controllers
char szOEMVxD[MAX_JOYSTICKOEMVXDNAME];
} JOYCAPS;
for
Joystick Programming with Win32
MMResult joyGetPosEx ( int id, JOYINFOEX*
info)
• id: id of the joystick being tested (-1 through 15)
• info: pointer to a JOYINFOEX structure
• Returns: JOYERR_NOERROR if no error
JOYERR_UNPLUGGED if joystick not
connected
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
int dwReserved1;
int dwReserved2;
} JOYINFOEX;
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
MUST be sizeof( JOYINFOEX)
int dwReserved1;
int dwReserved2;
} JOYINFOEX;
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
SHOULD be JOY_RETURNALL
int dwReserved1;
int dwReserved2;
} JOYINFOEX;
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
position of “hat” controllers
int dwReserved1;
int dwReserved2;
} JOYINFOEX;
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
bit array with bit set if
int dwReserved1;
button currently pressed
int dwReserved2;
} JOYINFOEX;
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
number of buttons pressed
int dwReserved1;
int dwReserved2;
} JOYINFOEX;
Joystick Programming with Win32
•
typedef struct {
int dwSize;
int dwFlags;
int dwXpos, dwYpos, dwZpos;
int dwRpos, dwUpos, dwVpos;
int dwButtons;
int dwButtonNumber;
int dwPOV;
angle of POV controller
int dwReserved1;
int dwReserved2;
} JOYINFOEX;
© Copyright 2026 Paperzz