To a certain kind of person, all these things seem very intuitive. Not
all types of design and/or programming challenges are appropriate for
all types of people. If you’re a good abstract thinker, there is
probably no other activity more rewarding than figuring all these
things out for yourself. Good maths skills help.
Le me add a bit to what Donny said. Since the 1940s (you can look it
up if you want to) many large, rich, and powerful organizations
including the US-DOD and IBM have spent a lot of time and effort to
come up with a way to identify people who are likely to be able to
become good programmers quickly. They identified three critical
talents.
(I’m, defining a talent as the rate at which an individual can learn a
skill. For example, the first time I ever tried to hit a duck on the
wind with a shot gun, I fired three shots and knocked down 2 birds.
That kind of shooting comes easily to me. I am (or was) what is called
a natural shot. OTOH, I never could hit a target
On the third
hand, I have earned a brown belt in a martial art. It has taken me
about three times longer than most people take to achieve that goal.
Clearly, I have little talent for martial arts. So, a talent measures
the rate at which you can acquire a skill, not the level of skill you
have acquired.) They are mathematics, mechanics, and language. People
who rapidly learn in those three areas seem to learn programming
quickly. Other people have other opinions. Edsger Dijkstra, on of the
grand old men and founders of computer science was of the opinion that
exceptional skill with your native language was the key indicator.
Ok, so those are talents that are held by people who are likely to
learn programing quickly. The other side of this is recent work done
on what makes a person an expert. The answer was pretty surprising. If
you spend part of every day for 10 years thinking about, learning
about, and working on a subject. You will be an expert. The same
number shows up in ancient stories about people who want to become
masters of a martial art…
Ten years. That is what it takes to become an expert in a subject. In
the bad old days that was about how long it took to become a
journeyman in a trade. Now days it is about how long it takes most
people to get a Ph.D. Ten years seems to be how long it takes to
become an expert. Modern psychology, modern and historical practice,
and even the mythology of martial arts all back up that 10 year
number.
You been frustrated for two years. Man, you are just at the point
where you can actually start learning this stuff. The books and links
that people have pointed you too are a good start. Please, keep at it.
I have found that in the long run my head is harder than a brick wall.
You just have to keep pounding your head against the wall until the
wall breaks. No, it is not pretty nor pleasant. But, it can be worth
it.
The other day in class I was helping a student debug a script for his
game project. Another student was watching. The script compiler was
giving us a totally useless error message so I started commenting out
code essentially doing a binary search to narrow in on the actual
cause of the error message. One of the students said something like,
“I’ve been studying C and C++ and programming for 3 years and I never
thought of doing that.” I looked at him and simply said, “I’ve been
studying programming for 38 years”. He got the point. It takes a while
to learn all this stuff.
I’ve added some other comments further down.
(originally posted in the Game Development forum, but after 3 days and 50+
views no one has responded so I’m posting it here)
I started out on game development thanks to LazyFoo’s tutorials. From there
I’ve tried to program an RPG. Yes, I know it’s not the best type of game to
start out on, but I didn’t want to create yet another Tetris clone. Plus,
this way I’m more motivated to work on it, as it’s something I want to make.
I’ve run into problems, though. There is very, very little information on
game development that isn’t for beginners or advanced developers. When it
comes to creating an RPG, you find a lot of message board threads, but no
answers at all.
There is a reason for that. I’ve taught game development class for
people who already had CS degrees and for people who are freshmen in
college. Most of real game programming takes a level of knowledge
roughly equivalent to a BS or even MS in computer science. But,
because of tools like UDK and even the old NWN toolset you can teach
people with almost no math or CS knowledge to develop some sort of
game. If you stick to basic things like Pong and Tetris you can teach
people with only a minimal (1 or 2 years) of education in programming
to write a game.
What I currently have is a character walking around on a generated (read
from a file) tiled map with two NPCs randomly walking around. Collision
detection and handling has been implemented.
So you are about 80% done. Not bad. Not bad at all.
Things I struggle with:
- A kind of event system for my game. I need to detect when the main
character talks to a NPC, when it tries to enter a house, etc. Currently the
first is just a block of code after all the collision detection and
handling. I haven’t implemented anything else, not even a house.
- A caterpillar system for a party of more than one person. I had this
implemented using a linked list of the main character’s coordinates of each
frame that the second character would start using once the distance between
the two was more than 16 pixels. But the distance between the two once this
behaviour had kicked in always varied, probably due to the variable frame
rate.
Yep, you need to do all this kind of stuff based on what I call
instantaneous distance, not actual locations on the screen. What you
see on the screen is just an approximation of the real game state. It
can’t be exact. You should just draw it and forget about it. It never
figures in to computing the next state of the game.
It really helps to learn calculus through at least integrals. Having
said that I’ll say that just taking calculus is not that helpful. You
have to understand the physical problems that lead to the invention of
calculus. Most importantly, you need to have a feel for the numeric
methods that are used to approximate the solutions of those physical
problems. It is very hard to find a class or a book that address the
math in a way that is meaningful to game developers.
Yeah, its a bitch.
- I have no idea how to even start work on a battle system with menus, and
the like. If I could at least know how you start doing this, that’d be
helpful.
Just pointing me to a register/dispatch event model doesn’t cut it, as a
game is something wildly different than some business application. Which is
part of the reason why I struggle with all this in the first place.
Ok, you need to rethink that. People seem to have forgotten that
object oriented programming and event based programming were invented
to support discrete event simulation programming. Discrete event
simulation is the core of game programming. All the GUIs in the world
adopted the event model and OOP because it also happens to match the
problems of GUI programming. But, GUIs came along much later. The
first programming language to include objects was the designed for
doing discrete event simulation. Look up Simula. From wikipeida
“Simula 67 introduced objects[1]:2, 5.3, classes[1]:1.3.3, 2,
subclasses[1]:2.2.1, virtual methods[1]:2.2.3, coroutines[1]:9.2,
discrete event simulation[1]:14.2, and features garbage
collection[1]:9.1.” Which matches my memory of SImula 67. (I learned
Simula around 73 or 74.)
So, OOP and event based programming were invented for discrete event
simulation. They were adopted into GUIs because they work well there
too. From there they were adopted into the Mac and Windows OSes and
into UNIX via X11. They moved into business applications because they
were the only way to write GUI programs and it turns out they are
pretty good for doing all sorts of transaction based applications.
So… Games are exactly a form of simulation and simulations are
where all this stuff came from.
BTW, to really understand all this you need to learn about finite
state machines.
I’m not trying to put you down or demotivate you. Donny wasn’t trying
to demotivate you either. Both of us in our own way are laying out the
world as we see. And, I can tell you that Donny and I do not always
see eye to eye. If it demotivates you to learn that it may take you
several more years to finish your first project, well, so be it.
Reality is a bitch.
On the other hand, I’ve outlined at least two years worth of studying
and book reading that will help you get a long way toward your goal.
Bob PendletonOn Tue, Mar 16, 2010 at 5:27 PM, Donny Viszneki <donny.viszneki at gmail.com> wrote:
On Wed, Mar 10, 2010 at 8:17 PM, BenoitRen wrote:
SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
–
http://codebad.com/
SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org
–
±----------------------------------------------------------