 <p>A compiler and a text editor. Using the standard library, you can write a basic text adventure.</p> <p>A debugger is relatively key, so you can see the state of your program in the middle of execution. Some people program without using one much.</p> <p>Having a solution system (be it make and makefiles or whatever) makes building less of a pain. Having a source control repository and utilities will allow you to reverse changes when you make serious screwups, provide a backup for your local source when your system dies half way through the project. Diff tools to see what you did in a particular changeset can be useful to track down bugs.</p> <p>If you want a graphical game, you'll need a graphics library, or a library that includes a graphics library, for your platform of choice. This may or may not imply an application architecture (like a message pump). Different styles of graphics (hypercard-esque, 2d sidescroller, isometric, 3d free-move, etc) can find different graphical libraries useful.</p> <p>If you want a traditional GUI with buttons, text rendered from fonts, and scroll bars and the like, reinventing the wheel will take a bunch of time, and early prototypes (where you care less about look&amp;feel than you do about other problems) will take longer. So a framework that provides for that can be useful.</p> <p>An IDE (integrated development environment) like MSVC or Eclipse usually hooks together a solution building system (including compiler) with a text editor and a debugger, and can have hooks to attach to a source control system and changeset difference viewer. The functions an IDE provide are available piecemeal: IDEs just integrate them all into one package.</p>