Traffic Light Controller
This isn't a direct answer to the question, but something you need to know that you haven't even realized is a issue yet.

You want something to happen where individual button pushes are individual events.  However, real mechanical buttons don't work that way.  They "bounce".  What is a single button push to you, can actually be 10s of individual connections and disconnections until the button finally comes to rest and stays steady in the new state.  If you just hook up a button with a pullup resistor to a digital logic input, each button press will actually be interpreted as many.  The digital logic is fast enough to process individual bounces.

To fix this, you do something called debouncing.  There are a number of ways, but with that search term you should be able to find plenty on the subject.

The simplest way is to not consider the new state valid until it has been steady for the debounce interval.  This needs to be long enough to wait for the switch to stop bouncing.  That's usually 10-20 ms.  However, I like to use 50 ms debounce time.  That's about the longest that humans won't notice.  Some switches do bounce nearly that, so you might as well since it's free in terms of human perception.