Jump to content

  • Log In with Google      Sign In   
  • Create Account

Creating a Game Menu in Allegro(help)


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Jdfskitz   Members   -  Reputation: 105

Like
0Likes
Like

Posted 03 September 2012 - 01:54 PM

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;

int main()
{
	allegro_init();
	install_keyboard();
	set_gfx_mode(GFX_AUTODETECT_WINDOWED, 640, 480, 0, 0);
	clear_to_color(screen, makecol(100, 224, 100));
	set_color_depth(32);
	gamemode = 1;
	do{
	switch(gamemode)
	{
		case 0:
		playGame();
		textout_ex(screen,
				   font,
				   "hello world",
				   20,
				   30,
				   makecol(255,0,0),
				   -1);
		break;
		case 1:
		mainMenu();
		break;
	}
	}while(gamemode != 2);
}
END_OF_MAIN();

void mainMenu()
{
	BITMAP *newgame, *quit;
	newgame = load_bitmap("newgame.bmp", NULL);
	quit = load_bitmap("quit.bmp", NULL);
	blit(newgame, screen, 0, 0, 0, 0, 230, 60);
	blit(quit, screen, 0, 0, 0, 60, 230, 60);
	int choice;
	choice = 0;
	int choicechosen;
/*	while(!key[KEY_ESC])
	{
	do{
	if(key[KEY_S])choice++;
	else if(key[KEY_W])choice--;
	while(choice >= 3)
	{
		choice--;
	}
	while(choice <= 0)
	{
		choice++;
	}

switch(choice)
{
	case 1:
		newgame = load_bitmap("newgamec.bmp", NULL);
		quit = load_bitmap("quit.bmp", NULL);
		blit(newgame, screen, 0, 0, 0, 0, 230, 60);
		blit(quit, screen, 0, 0, 0, 60, 230, 60);
		break;
case 2:
		quit = load_bitmap("quitc.bmp", NULL);
		newgame = load_bitmap("newgame.bmp", NULL);
		blit(newgame, screen, 0, 0, 0, 0, 230, 60);
		blit(quit, screen, 0, 0, 0, 60, 230, 60);
		break;

if(key[KEY_ENTER])
			{
			choicechosen = choice;
			destroy_bitmap(newgame);
			destroy_bitmap(quit);
			}
if(choicechosen == 1)
			{
				gamemode = 0;
			}
rest(5);
	}while(choicechosen != 2);
	gamemode == choicechosen;
	if(choicechosen == 2)
	{
		exit(1);
	}
   }
}	 */
void playGame()
{
}

Edited by Jdfskitz, 03 September 2012 - 01:57 PM.


Sponsor:

#2 Jdfskitz   Members   -  Reputation: 105

Like
0Likes
Like

Posted 03 September 2012 - 01:56 PM

the position where I think the issue is happening is now commented out.

#3 Jdfskitz   Members   -  Reputation: 105

Like
0Likes
Like

Posted 04 September 2012 - 12:23 PM

still not solved :\

#4 LennyLen   Crossbones+   -  Reputation: 4023

Like
0Likes
Like

Posted 06 September 2012 - 07:57 AM

Part of the problem is that you have the following section of code inside your switch statement in the commented out section:


if(key[KEY_ENTER])
					    {
					    choicechosen = choice;
					    destroy_bitmap(newgame);
					    destroy_bitmap(quit);
					    }
if(choicechosen == 1)
					    {
							    gamemode = 0;
					    }
rest(5);

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:


switch(choice)
{
    case 1:
	    newgame = ng_imgc;
	    quit = q_img;
	    break;
    case 2:
	    quit = q_imgc;
	    newgame = ng_img;
	    break;
}

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.




Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS