Thread: added start menu crashes game

  1. #1
    NotSoAvgProgrammer
    Join Date
    Jul 2007
    Location
    Virginia, U.S.
    Posts
    57

    added start menu crashes game

    Hey guys, everything was ok untill I added start(). I can't figure out whats wrong. Start() is supposed to be a start menu, but it's a very new addition, and I'm just focusing on getting it to display before I actually make it so it has clickable buttons, and works properly, if you're wondering what it's use is.
    Here's the code
    Code:
    //The headers
    #include "SDL/SDL.h"
    #include "SDL/SDL_image.h"
    #include <string>
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    //Screen attributes
    const int SCREEN_WIDTH = 640;
    const int SCREEN_HEIGHT = 480;
    const int SCREEN_BPP = 32;
    
    //The surfaces
    SDL_Surface *background = NULL;
    SDL_Surface *pong = NULL;
    SDL_Surface *screen = NULL;
    SDL_Surface *paddle = NULL;
    
    // pong cords
    int speed_x = 2;
    int speed_y = 2;
    int pong_x = 140;
    int pong_y = 200;
    
    //use paddle cordinates
    int paddle_y = 200, aipaddle_y = 50;
    const int paddle_x = 620;
    const int aipaddle_x = 20;
    int random[10]  = { 0, 50, 100, 150, 200, 250, 300, 400, 410, 125};
    int x = 0;
    
    
    // collision (fixes glitch of ball staying on paddle)
    bool hit = true, loss = false, ai_top = true, ai_bottom = true;
    
    
    //The event structure
    SDL_Event event;
    Uint8 *keystate;
    
    bool start()
    {
        bool game = true;
        // initialize SDL video
        if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
        {
            printf( "Unable to init SDL: &#37;s\n", SDL_GetError() );
            return false;
        }
    
        // make sure SDL cleans up before exit
        atexit(SDL_Quit);
    
        // create a new window
        SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
                                               SDL_HWSURFACE|SDL_DOUBLEBUF);
        if ( !screen )
        {
            printf("Unable to set 640x480 video: %s\n", SDL_GetError());
            return false;
        }
    
    
    
        // quit button
        SDL_Surface* quit_temp = IMG_Load("quit.png");
        if (!quit_temp)
        {
            printf("Unable to load image: %s\n", SDL_GetError());
            return false;
        }
        SDL_Surface* quit = SDL_DisplayFormat( quit_temp);
    
        SDL_Surface* quit_rollover_temp = IMG_Load("quit_rollover.png");
        if (!quit_rollover_temp)
        {
            printf("Unable to load image: %s\n", SDL_GetError());
            return false;
        }
        SDL_Surface* quit_rollover = SDL_DisplayFormat( quit_rollover_temp );
    
        SDL_Surface* start_temp = IMG_Load("start.png");
        if (!start_temp)
        {
            printf("Unable to load image: %s\n", SDL_GetError());
            return false;
        }
        SDL_Surface* start = SDL_DisplayFormat( start_temp );
    
        SDL_Surface* start_rollover_temp = IMG_Load("start_rollover.png");
        if (!quit_rollover_temp)
        {
            printf("Unable to load image: %s\n", SDL_GetError());
            return false;
        }
        SDL_Surface* start_rollover = SDL_DisplayFormat( start_rollover_temp );
    
         // free loaded image
        SDL_FreeSurface(quit_temp);
        SDL_FreeSurface(start_temp);
        SDL_FreeSurface(quit_rollover_temp);
        SDL_FreeSurface(start_rollover_temp);
    
        // center the bitmap on screen
        SDL_Rect quitrect;
        quitrect.x = (screen->w - quit->w) / 2;
        quitrect.y = (screen->h - quit->h);
    
        SDL_Rect startrect;
        startrect.x = (screen->w - start->w) / 2;
        startrect.y = (screen->h - start->h) / 2;
        // program main loop
        bool done = false;
        while (!done)
        {
            // message processing loop
            SDL_Event event;
            while (SDL_PollEvent(&event))
            {
                // check for messages
                switch (event.type)
                {
                    // exit if the window is closed
                case SDL_QUIT:
                    done = true;
                    game = false;
                    break;
    
                    // check for keypresses
                case SDL_KEYDOWN:
                    {
                        // exit if ESCAPE is pressed
                        if (event.key.keysym.sym == SDLK_ESCAPE)
                            done = true;
                            game = false;
                        break;
                    }
                } // end switch
            } // end of message processing
    
            // DRAWING STARTS HERE
    
            // clear screen
            SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 230, 230, 230));
    
            // draw image
            SDL_BlitSurface(quit, 0, screen, &quitrect);
            SDL_BlitSurface(start, 0, screen, &startrect);
    
            // DRAWING ENDS HERE
    
            // finally, update the screen :)
            SDL_Flip(screen);
        } // end main loop
    
        // free loaded bitmap
        SDL_FreeSurface(quit);
        SDL_FreeSurface(start);
        SDL_FreeSurface(quit_rollover);
        SDL_FreeSurface(start_rollover);
    
        // all is well ;)
        printf("Exited cleanly\n");
        return game;
    }
    
    
    SDL_Surface *load_image( std::string filename )
    {
        //The image that's loaded
        SDL_Surface* loadedImage = NULL;
    
        //The optimized image that will be used
        SDL_Surface* optimizedImage = NULL;
    
        //Load the image
        loadedImage = IMG_Load( filename.c_str() );
    
        //If the image loaded
        if( loadedImage != NULL )
        {
            //Create an optimized image
            optimizedImage = SDL_DisplayFormat( loadedImage );
    
            //Free the old image
            SDL_FreeSurface( loadedImage );
    
            //If the image was optimized just fine
            if( optimizedImage != NULL )
            {
                //Map the color key
                Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 255, 255, 255 );
    
                //Set all pixels of color R 0, G 0xFF, B 0xFF to be transparent
                SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, colorkey );
            }
        }
    
        //Return the optimized image
        return optimizedImage;
    }
    
    void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
    {
        //Temporary rectangle to hold the offsets
        SDL_Rect offset;
    
        //Get the offsets
        offset.x = x;
        offset.y = y;
    
        //Blit the surface
        SDL_BlitSurface( source, NULL, destination, &offset );
    }
    
    
    
    bool init()
    {
        //Initialize all SDL subsystems
        if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
        {
            return 1;
        }
    
        //Set up the screen
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
    
        //If there was an error in setting up the screen
        if( screen == NULL )
        {
            return 1;
        }
    
        //Set the window caption
        SDL_WM_SetCaption( "Foo says \"Hello!\"", NULL );
    
        //If everything initialized fine
        return true;
    }
    
    bool load_files()
    {
        //Load the background image
        background = load_image( "gamebg.bmp" );
    
        //If the background didn't load
        if( background == NULL )
        {
            return false;
        }
    
        //Load the pong figure
        pong = load_image( "pong.png" );
    
        //If the stick figure didn't load
        if( pong == NULL )
        {
            return false;
        }
    
    
            //Load the paddle figure
        paddle = load_image( "paddle.png" );
    
        //If the stick figure didn't load
        if( paddle == NULL )
        {
            return false;
        }
    
    
    
        return true;
    }
    
    void clean_up()
    {
        //Free the surfaces
        SDL_FreeSurface( background );
        SDL_FreeSurface( pong );
        SDL_FreeSurface(paddle);
    
        //Quit SDL
        SDL_Quit();
    }
    
    
    int main( int argc, char* args[] )
    {
    
        if(start())
        {
        //Quit flag
        bool quit = false;
    
        //Initialize
        if( init() == false )
        {
            return 1;
        }
    
        //Load the files
        if( load_files() == false )
        {
            return 1;
        }
    
    
    
        //While the user hasn't quit
        while( quit == false )
        {
            //While there's events to handle
            while( SDL_PollEvent( &event ) )
                {
                    //If the user has Xed out the window
                    if( event.type == SDL_QUIT )
                    {
                        //Quit the program
                        quit = true;
                    } // end if statement
                }   // end event loop
    
    /****************************************************************
    /      if someone loses, reset game with delay and random pong_x
    /*******************************************************************/
    
            if(loss)
                {
                    pong_x = 100;
                    pong_y = random[x];
                    paddle_y = 200;
                    aipaddle_y = 50;
                    loss = false;
                    speed_x = 2;
                    speed_y = 2;
                    hit = true;
                    SDL_Delay( 1000 );
                }
    
                srand((unsigned)time(0));
                x = (rand()%10)+1;
    
    
    
    
    /************************************************
    /
    /        check if ball is touching screen
    *************************************************/
            if (pong_x <= 10) {loss = true;}
            // image is 30 pixels wide
            if (pong_x >= 610) {loss = true;}
            if (pong_y <= 0) {speed_y = 2;}
            // image is 30 pixels high
            if (pong_y >= 450) {speed_y = -2;}
    
            pong_x += speed_x;
            pong_y += speed_y;
    
    
    /**********************************************
    /       check for paddle movement
    /**********************************************/
    
            keystate = SDL_GetKeyState(NULL);
    
                if (keystate[SDLK_UP] & paddle_y >= 0)
                    {
                        paddle_y -= 2;
                    }
    
                else if (keystate[SDLK_DOWN] & paddle_y <= 430)
                    {
                        paddle_y += 2;
                    }
    
    
    /********************************************
    /             Check if pong is touching paddle
    /********************************************/
    
            if( hit & pong_y >= paddle_y & pong_y <= paddle_y + 40 & pong_x + 30 >= paddle_x & pong_x + 30 <= paddle_x + 10)
                {
                    speed_x = - speed_x;
                    hit = false;
                }
    
            if(hit & pong_y + 30 >= paddle_y & pong_y + 30 <= paddle_y + 40 & pong_x + 30 >= paddle_x & pong_x + 30 <= paddle_x + 10)
                {
                    speed_x = - speed_x;
                    hit = false;
                }
    
    /******************************************
    /              ai paddle proccess
    /*****************************************/
    
            // if paddle is on screen
    
            if(aipaddle_y >= 0)
            {
                ai_top = true;
            }
            else {ai_top = false;}
    
            if(aipaddle_y <= 440)
            {
                ai_bottom = true;
            }
            else {ai_bottom = false;}
            // puase for to make ai look more human
            if(pong_x < 360)
            {
                if(pong_y > aipaddle_y & ai_bottom) {aipaddle_y += 3;}
                if(pong_y < aipaddle_y & ai_top) {aipaddle_y -= 3;}
            }
            else if(pong_x > 300 & pong_y > 460 & ai_top)
            {
                aipaddle_y -= 3;
            }
            else if(pong_x > 300 & pong_y < 200 & ai_bottom)
            {
                aipaddle_y += 3;
            }
    
    
    
            if( pong_y >= aipaddle_y & pong_y <= aipaddle_y + 40 & pong_x >= aipaddle_x & pong_x <= aipaddle_x + 10)
                {
                    speed_x = - speed_x;
                    hit = true;
                }
    
            if(pong_y + 30 >= aipaddle_y & pong_y + 30 <= aipaddle_y + 40 & pong_x >= aipaddle_x & pong_x <= aipaddle_x + 10)
                {
                    speed_x = - speed_x;
                    hit = true;
                }
    
    
    
            pong_x += speed_x;
            pong_y += speed_y;
    
    
            //Apply the surfaces to the screen
            apply_surface( 0, 0, background, screen );
            apply_surface( pong_x, pong_y, pong, screen );
            apply_surface(paddle_x, paddle_y, paddle, screen);
            apply_surface(aipaddle_x, aipaddle_y, paddle, screen);
    
    
    
            //Update the screen
            if( SDL_Flip( screen ) == -1 )
                {
                    return 1;
                } // end update statement
        } //end while loop
    
        //Free the surfaces and quit SDL
        clean_up();
    
        return 0;
        }
    }
    Thanks for any help,

    Joe

    P.S. Is their a bbcode for real long projects to put them in an inline box?
    Last edited by avgprogamerjoe; 08-28-2007 at 09:57 AM.

  2. #2
    Registered User
    Join Date
    Apr 2006
    Posts
    43
    Try to run it in debug mode and report the place where the program crashes.
    Crash bugs are among the easiest to find as a debugger almost always can point out directly the part that is causing the crash.

    Just posting lots of code is a good way of not getting any help at all...it takes a lot of time to look through other peoples code.

    Give the debugger a shot, look at the backtrace, if you don't understand the output, post it here.

    /f

  3. #3
    NotSoAvgProgrammer
    Join Date
    Jul 2007
    Location
    Virginia, U.S.
    Posts
    57
    Selecting target: default
    Compiling: done
    Starting debugger: done
    Adding source dir: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Adding file: SDLapp.exe
    No source file named pong_game.cpp.
    error
    error
    error
    error
    error
    error
    error
    error
    error
    error
    error
    error
    error
    exited 0
    Debugger finished with status 0

    Was the debugging message, but I did not get anything out of that. I found the can not find source file interesting though, as if I put in a program that ran fine, and went through debug, it gave that same message, yet the program ran fine.


    I also got this
    Code:
    Loading lexer_cg.xml
    Loading lexer_cpp.xml
    Loading lexer_f77.xml
    Loading lexer_gm.xml
    Loading lexer_hitasm.xml
    Loading lexer_lua.xml
    Loading lexer_prg.xml
    Loading lexer_rc.xml
    Loading lexer_xml.xml
    Loading toolbar...
    Added compiler "GNU GCC Compiler"
    Added compiler "Microsoft Visual C++ Toolkit 2003"
    Added compiler "Borland C++ Compiler 5.5"
    Added compiler "Digital Mars Compiler"
    Added compiler "OpenWatcom (W32) Compiler"
    Added compiler "SDCC Compiler"
    Source code formatter (AStyle) plugin loaded
    C::B Profiler plugin loaded
    Class wizard plugin loaded
    Code completion plugin loaded
    Code Statistics plugin loaded
    Compiler plugin loaded
    GDB Debugger plugin loaded
    Default MIME handler plugin loaded
    Dev-C++ DevPak updater/installer plugin loaded
    Source HTML, RTF and ODT exporter plugin loaded
    Help plugin plugin loaded
    Code::Blocks Plugin wizard plugin loaded
    To-Do List plugin loaded
    Windows XP Look'n'Feel plugin loaded
    Loading workspace "C:\Documents and Settings\Owner.YOUR-99DDF15D27\.CodeBlocks\default.workspace"
    Loading project file...
    Parsing project file...
    Loading project files...
    Project's base path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Project's common toplevel path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Start parsing project 
    Concurrent threads for pool set to 2
    End parsing project  (no files found?)
    Setting up compiler environment...
    Setting up compiler environment...
    Loading project file...
    Parsing project file...
    Loading target default
    Loading project files...
    Project's base path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Project's common toplevel path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Start parsing project SDL Application
    Concurrent threads for pool set to 2
    Setting up compiler environment...
    Done parsing project SDL Application (1 total parsed files, 15 tokens in 0.31 seconds).
    Updating class browser...
    Class browser updated.
    project data set for C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\game.cpp
    Top Editor: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\game.cpp
    Loading project file...
    Parsing project file...
    Loading target default
    Loading project files...
    Project's base path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Project's common toplevel path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Start parsing project SDL Application
    Concurrent threads for pool set to 2
    Setting up compiler environment...
    Done parsing project SDL Application (1 total parsed files, 30 tokens in 0.31 seconds).
    Updating class browser...
    Class browser updated.
    project data set for C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\lesson05.cpp
    Top Editor: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\lesson05.cpp
    Setting up compiler environment...
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Project's base path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Project's common toplevel path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Done parsing project SDL Application (1 total parsed files, 30 tokens in 102.15 seconds).
    Updating class browser...
    Class browser updated.
    Scanned 0 files for #includes, cache used 0, cache updated 0
    Setting up compiler environment...
    Setting up compiler environment...
    Scanned 1 files for #includes, cache used 0, cache updated 1
    Project's base path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Project's common toplevel path: C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\
    Done parsing project SDL Application (1 total parsed files, 30 tokens in 134.671 seconds).
    Updating class browser...
    Class browser updated.
    found C:\Documents and Settings\Owner.YOUR-99DDF15D27\My Documents\myprograms\pong_game.cpp
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 0 files for #includes, cache used 1, cache updated 0
    Scanned 1 files for #includes, cache used 0, cache updated 1
    Setting up compiler environment...
    Setting up compiler environment...
    Scanned 0 files for #includes, cache used 0, cache updated 0
    Done parsing project SDL Application (1 total parsed files, 29 tokens in 0.31 seconds).
    Updating class browser...
    Class browser updated.
    Setting up compiler environment...
    Setting up compiler environment...
    Scanned 1 files for #includes, cache used 0, cache updated 1
    Scanned 0 files for #includes, cache used 0, cache updated 0
    Done parsing project SDL Application (1 total parsed files, 59 tokens in 0.31 seconds).
    Updating class browser...
    Class browser updated.
    Setting up compiler environment...
    Scanned 0 files for #includes, cache used 0, cache updated 0
    Done parsing project SDL Application (1 total parsed files, 30 tokens in 0.32 seconds).
    Updating class browser...
    Class browser updated.
    Setting up compiler environment...
    Setting up compiler environment...
    I hope that helps you, is there another way for me to debug and try and figure it out myself.

    Thanks,

    Joe

  4. #4
    Registered User
    Join Date
    Apr 2006
    Posts
    43
    Ok, what program are you using to do this?
    It was a long time ago that I last used anything on Windows unfortunately...
    Perhaps someone who uses the same program can step in and tell you how to set it up correctly?

    Read the documentation for the program and find out where you set the path to the source code (though it looked ok to me) so that the debugger can find it, then the output will probably be much more helpful.

    /f

  5. #5
    Registered User
    Join Date
    Apr 2006
    Posts
    43
    Hmm, surfed around a little, you seems to be using Code::Blocks?

    That program suite might install gdb, if you just can get gdb to run your program then I can help you...
    Are you sure your install isn't broken, others postings of debug runnings from Code::Blocks looked different from yours, especially all those error lines could point to some kind of internal error from the Code::Blocks suite when trying to use the debugger?

    /f

  6. #6
    Frequently Quite Prolix dwks's Avatar
    Join Date
    Apr 2005
    Location
    Canada
    Posts
    8,057
    I think this is your problem. You're calling start(), which calls SDL_Init() and SDL_SetVideoMode(), etc; and then you call init(), which does the same. I don't think the SDL takes kindly to being initialized twice.

    Code:
    srand((unsigned)time(0));
    You're supposed to call srand() only once during the execution of a program.

    Code:
                case SDL_KEYDOWN:
                    {
                        // exit if ESCAPE is pressed
                        if (event.key.keysym.sym == SDLK_ESCAPE)
                            done = true;
                            game = false;
                        break;
                    }
    You do realize that game=false is outside the if statement? This means that every time you press a key, game will be set to false. I suggest adding curly braces ({}) around the code.

    I see that you're going to actually draw your own clickable buttons, using images created with an external program. But if you don't want to do that, you could use SDL_ttf, which is a truetype font library for the SDL. It lets you display text with ordinary fonts. (But fonts have tricky copyrights, so be careful which ones you use.)

    The SDL_gfx library also has some built-in bitmap font support. The text doesn't look so good with bitmap fonts, though. There are other font libraries around too, but SDL_ttf and SDL_gfx are the only ones I have experience with.

    I often use SDL_gfx anyway, however, because it has some incredible graphics primitives functions: circles, polygons, lines, with filled and anti-aliased versions of just about everything. It also has some framerate functions, which I suggest you use -- or implement your own. Try running your program on a slower computer and you'll see what I mean.

    There are also lots of ready-made GUI libraries if you want to use those, though I've never used them because I like making my own GUI libraries as well.

    Anyway, all the libraries I mentioned and more can be found here: libsdl.org/libraries.php

    Your code is execellent, BTW. You'll have to post it in the games sticky when it's finished . . . what license do you intend to release it under, if any?
    dwk

    Seek and ye shall find. quaere et invenies.

    "Simplicity does not precede complexity, but follows it." -- Alan Perlis
    "Testing can only prove the presence of bugs, not their absence." -- Edsger Dijkstra
    "The only real mistake is the one from which we learn nothing." -- John Powell


    Other boards: DaniWeb, TPS
    Unofficial Wiki FAQ: cpwiki.sf.net

    My website: http://dwks.theprogrammingsite.com/
    Projects: codeform, xuni, atlantis, nort, etc.

  7. #7
    Frequently Quite Prolix dwks's Avatar
    Join Date
    Apr 2005
    Location
    Canada
    Posts
    8,057
    Code:
    int random[10]  = { 0, 50, 100, 150, 200, 250, 300, 400, 410, 125};
    There's a function called random() that is reasonably widespread. I'm not sure exactly which standard it's part of, if any; probably POSIX or GNU-specific. But anyway, you might not want to have a global array by the same name.

    You seem to be doing this often enough to warrant a function for it.
    Code:
    SDL_Surface *image_temp = IMG_Load("image.png");
    if(!image_temp) {
        printf("Unable to load image: &#37;s\n", SDL_GetError());
        return false;
    }
    
    SDL_Surface *image = SDL_DisplayFormat(image_temp);
    
    SDL_FreeSurface(image_temp);
    I'd also suggest printing messages to stderr -- perhaps with cerr, since you seem to be using C++; or fprintf(stderr, ...) if you want to stick with C functions.

    Code:
    // From start():
        SDL_Surface* screen = SDL_SetVideoMode(640, 480, 16,
                                               SDL_HWSURFACE|SDL_DOUBLEBUF);
    // From init():
        screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );
    Perhaps you want to combine those; as you're using SDL_Flip() which implies SDL_DOUBLEBUF, I'd go with
    Code:
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,
                                                SDL_HWSURFACE|SDL_DOUBLEBUF);
    dwk

    Seek and ye shall find. quaere et invenies.

    "Simplicity does not precede complexity, but follows it." -- Alan Perlis
    "Testing can only prove the presence of bugs, not their absence." -- Edsger Dijkstra
    "The only real mistake is the one from which we learn nothing." -- John Powell


    Other boards: DaniWeb, TPS
    Unofficial Wiki FAQ: cpwiki.sf.net

    My website: http://dwks.theprogrammingsite.com/
    Projects: codeform, xuni, atlantis, nort, etc.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. How to build a flexible Game Menu..
    By ThLstN in forum Game Programming
    Replies: 1
    Last Post: 12-13-2008, 10:53 AM
  2. How to start a game...?
    By TaraTheCasper in forum Game Programming
    Replies: 30
    Last Post: 10-24-2004, 09:20 PM
  3. Game programming ........ Where is good place to start?
    By 3DPhreak in forum Game Programming
    Replies: 4
    Last Post: 06-17-2004, 10:54 AM
  4. number guessing game, no idea where to start
    By karin in forum C Programming
    Replies: 9
    Last Post: 03-18-2004, 09:49 PM
  5. Where to start game development
    By NeoBunny in forum Game Programming
    Replies: 4
    Last Post: 09-25-2002, 05:42 PM