I can't figure it out, but I think at the end of the switch statement for the Menu it's not registering the fact that I declare gamemode as anything. I know it exits the switch statement because when I place the exit(1); command the program closes after hitting enter on the quit image.
I haven't been able to improve my C++ very much lately and resulted to trying to learn allegro, and eventually when I am capable of it switching to SDL & OpenGL
#include <allegro.h>
void mainMenu();
void playGame();
int gamemode;
Also, in the section I just listed, you set gamemode to 0 if choicechosen equals 1. Then immediately after that section of code, you try to say that gamemode equals choicechosen. I say try to because instead of gamemode = choicechosen, you have gamemode == choicechosen, which does nothing,
By the way, your code has a HUGE memory leak. You reload bitmaps every time a key is pressed, but only delete two of them when enter is pressed. Plus, you initially load two as well. You also never check the return values of your load_bitmap() calls to make sure that the bitmaps load correctly.
What I would suggest you do is have six BITMAP pointers, four of which will hold the four images you load, and two which will be used to point to which two of the four images you currently want to display.
So, something like this:
BITMAP *newgame, *quit, *ng_img, *ng_imgc, *q_img, *q_imgc;
ng_img = load_bitmap("newgame.bmp", NULL);
if (!ng_img) {
// there was an error, so do something
}
q_img = load_bitmap("quit.bmp", NULL);
if (!q_img) {
// there was an error, so do something
}
ng_imgc = load_bitmap("newgamec.bmp", NULL);
if (!ng_imgc) {
// there was an error, so do something
}
q_imgc = load_bitmap("quitc.bmp", NULL);
if (!q_imgc) {
// there was an error, so do something
}
newgame = ng_img;
quit = q_img;
Now, when you have keys pressed, just switch which images are being used:
You'll notice I took the blitting operations out of there. This is because it's a bad idea to mix your logic and drawing together. Do all your logic first, then draw the results. You also shouldn't draw directly to the screen in the way that you are, as this will cause flickering. Instead, create a bitmap the size of the screen, and do all your drawing to it. Then, when you've finished drawing a frame, blit this bitmap to the screen. This technique is known as double buffering.