Holy Cripes!
The guy just learned the fundamentals of programming, and most of you are already suggesting he get into things like OpenGL and DirectX. You're going to make his brain explode
You're probably going to want to stay away from those things for now, because they can be quite advanced, even when performing seemingly simple tasks. And just a quick example of how complicated it can get, putting a simple pixel on the screen using DirectX is a matter of initializing DirectDraw, setting the drawing mode, creating a primary surface (and any optional clippers), getting a pointer to the surface, locking it, and knowing where to enter the value representing the colour into the surface's buffer. Not something you should be doing when you're just learning the fundamentals of programming, especially when you add the fact that DirectX is written entirely using COM.
Instead, what you should really do is start out with simple programs. I think that <B>Edvard_Grieg</B> was on the right track with his hangman game, but I just think it uses too much file accessing and parsing, which tend to be more novice skills. If you're only at the point where you've just learned abstract data fundamentals and multidimensional arrays, I would start out even simpler.
You could start out by writing a calculator that takes in a formula and spits out a response. Then when you've done that, try writing a calculator that takes input in Polish notation (you'll have to look that one up on the Internet). However, this idea is almost too simple, and won't keep you busy for long.
Instead, a good suggestion would be to write a text based program that simulates a scenario of some sort. Simulations tend to be more focussed on the thought process (i.e. figuring out how to simulate the scenario), but still use a lot of fundamental programming skills during the implementation.
Two good suggestions from my college days:
=-=-=-=-=-=-=-=-=-=-=-=-=-=-
1) A line at a bank.
Create a single queue at a bank, with X amount of tellers open to serve the bank customers. Each teller takes a random amount of time (say between 1 to 10 minutes) to serve a customer before they can service another customer.
Give the bank line twenty customers, and see how long on average it takes for the 20th customer to be served if there are 2 tellers, 3 tellers, 4 tellers, etc. up to 10 tellers.
This actually becomes an interesting exercise, because you should be able to see a point where the efficiency of the bank peaks, and adding more tellers no longer improves efficiencies.
2) The life of a forest
This one is nice, because it actually uses two dimensional arrays. Basically, the idea is to create a two dimensional array (the size is up to you), and each element in the array represents an area in a forest. The areas can have three states: T = Full of green trees, I = Infested with insects, and D = Deforested
When the forest is displayed on the screen, you advance the forest through time periods by pressing a key. The rules for moving the forest through a time period are as follows:
- any 'T' that has an adjacent 'I' will become an 'I'
- any 'I' will be changed into a 'D'
- any 'D' will be changed into a 'T' (I believe you're only supposed to change the 'D' after <B>two</B> time periods have elapsed, but if this doesn't give you desirable results, try switching it back to one time period)
You decide what I mean by 'adjacent', whether it's only on the four major compass points (N, E, W, S), or if it's all eight points. To start the simulation, initialize several different arrays with different scenarios, such as:
T T T T T
T T I T T
T I D I T
T T I T T
T T T T T
or
T T T T T
T I D I T
T D T D T
T I D I T
T T T T T
And let them run, outputting the new forest after every time period. You could even create a user interface that allows the user to choose amongst several scenarios, and keeps track of how many time periods have elapsed.
As an extended challenge, if you know how to do text programming, you could give each forest state its own colour (i.e. T is green, I is purple, and D is brown), and instead of drawing a new array on the screen underneath the old array everytime a time period elapses, overwrite the old array on the screen. This method actually gives a stunning effect of animation if you just skip the key pressing, and let it run automatically (with a delay() to slow things down a bit).
=-=-=-=-=-=-=-=-=-=-=-=-=-
These are just a couple of ideas that I could think of off the top of my head. I'm hoping I was clear enough in my examples, but if you need any elaboration, just let me know, and I'll try to give a better description.