If-satser används definitivt! Men det går att använda dem olika snyggt beroende på hur du strukturerar din kod i övrigt. Det viktiga är att föreställa sig olika system med tydligt definierat ansvar, som kommunicerar på en mer abstrakt nivå, än att man gör det enkelt för sig och låter alla variabler/data vara synligt för allt annat, och i en stor loop hejvilt utökar funktionalitet genom att lägga till fler och fler if/switch-satser. För ett Tetris eller liknande spel, med ganska begränsad logik, så fungerar det, men till större projekt, så tappar man bort sig totalt.
Har du det i dig att sitta och nöta tills du själv kommer på "design patterns", så är det bra. Då kommer du få mycket gjort. Är du istället som jag, som är för nitisk när det gäller designbiten, så kommer du att sitta och teoretisera fram en "perfekt design", som du sedan inte orkar knacka färdigt.
Kan varmt rekommendera gamedev.net (deras forum om denna typ av frågor) och allegro.cc, som har mycket matnyttigt gällande koddesign, med stort fokus på just de system som 2D-spel ofta har gemensamt.