コード例 #1
0
ファイル: sleep.c プロジェクト: cravo/damp
void sleep_init(int mins)
{
   char txt[256];

   LOCK_FUNCTION(sleep_timeout);
   LOCK_FUNCTION(sleep_fadeout);

   /* See if fading is required */

   sprintf(txt,get_config_string("[options]","sleep_fade","yes"));

   if(stricmp(txt,"YES") == 0)
      sleep_want_fade = TRUE;

   install_int_ex(sleep_timeout, SECS_TO_TIMER(mins*60));
}
コード例 #2
0
ファイル: main.c プロジェクト: narukaioh/Space-Invaders
int startGame(){
	configAll();

	BITMAP * nave = load_bitmap("img/35x45/nave.bmp",NULL);
	BITMAP * alien = load_bitmap("img/35x45/alien.bmp", NULL);
	BITMAP * gun = load_bitmap("img/35x45/gun.bmp", NULL);
	BITMAP * init = load_bitmap("img/start.bmp", NULL);
	BITMAP * bg = load_bitmap("img/bartop.bmp", NULL);
	BITMAP * buffer = create_bitmap(SCREEN_W,SCREEN_H);
	SAMPLE * sound = load_wav("wav/tiro.wav");
	SAMPLE * music = load_sample("wav/laserHit.wav");

	initStart(buffer,init);
	install_int_ex(countXa,SECS_TO_TIMER(1));
	install_int_ex(countGun,MSEC_TO_TIMER(1));
	gameControll(nave,buffer,alien,gun,bg,sound,music);
	destroyAll(nave,buffer,alien,gun,init,bg,sound,music);
	return 0;
}
コード例 #3
0
ファイル: humanvspsp.c プロジェクト: rydzus/Aron
int humanvspsp(Player *p1, Player *p2)
{
	BITMAP* buffer_field_game = create_bitmap(MAX_WIDTH, MAX_HEIGTH);
	BITMAP* buffer_border_and_info = create_bitmap(SCREEN_WIDTH, SCREEN_HEIGTH);
	int koniec = -1;

	reset_player(p1, 136, 230, 2);
	reset_player(p2, 136, 245, 3);

	clear_to_color(buffer_field_game, makecol(0, 0, 0));
	rysuj_obramowanie(buffer_border_and_info, p1, p2);
	blit(buffer_border_and_info, screen, 0, 0, 0, 0, buffer_border_and_info->w, buffer_border_and_info->h);
	clear_keybuf();

	odliczanie();

	blit(buffer_border_and_info, screen, 0, 0, 0, 0, buffer_border_and_info->w, buffer_border_and_info->h);

	clear_key();

	blit(buffer_field_game, buffer_border_and_info, 0, 0, 1, 1, buffer_field_game->w, buffer_field_game->h);
	blit(buffer_border_and_info, screen, 0, 0, 0, 0, buffer_border_and_info->w, buffer_border_and_info->h);

	p1_speed = 0;
	p2_speed = 0;
	speed = 25;
	install_int_ex(p1_speed_func, MSEC_TO_TIMER(speed));
	install_int_ex(p2_speed_func, MSEC_TO_TIMER(speed));
	install_int_ex(speed_func, SECS_TO_TIMER(1));

	while(TRUE)
	{
		ai_run(p2, buffer_field_game);
		if((p1->x == p2->x) && (p1->y == p2->y))
		{
			koniec = 0;
			break;
		}


		switch(p1->direction)
		{
			case UP:
				if(getpixel(buffer_field_game, p1->y, p1->x-1) != makecol(0, 0, 0))
				{
					koniec = 1;
				}
			break;
			case DOWN:
				if(getpixel(buffer_field_game, p1->y, p1->x+1) != makecol(0, 0, 0))
				{
					koniec = 1;
				}
			break;
			case LEFT:
				if(getpixel(buffer_field_game, p1->y-1, p1->x) != makecol(0, 0, 0))
				{
					koniec = 1;
				}
			break;
			case RIGHT:
				if(getpixel(buffer_field_game, p1->y+1, p1->x) != makecol(0, 0, 0))
				{
					koniec = 1;
				}
			break;
		}

		switch(p2->direction)
		{
			case UP:
				if(getpixel(buffer_field_game, p2->y, p2->x-1) != makecol(0, 0, 0))
				{
					if(koniec == 1)
					{
						koniec = 0;
						break;
					}
					else
					{
						koniec = 2;
					}
				}
			break;
			case DOWN:
				if(getpixel(buffer_field_game, p2->y, p2->x+1) != makecol(0, 0, 0))
				{
					if(koniec == 1)
					{
						koniec = 0;
						break;
					}
					else
					{
						koniec = 2;
					}
				}
			break;
			case LEFT:
				if(getpixel(buffer_field_game, p2->y-1, p2->x) != makecol(0, 0, 0))
				{
					if(koniec == 1)
					{
						koniec = 0;
						break;
					}
					else
					{
						koniec = 2;
					}
				}
			break;
			case RIGHT:
				if(getpixel(buffer_field_game, p2->y+1, p2->x) != makecol(0, 0, 0))
				{
					if(koniec == 1)
					{
						koniec = 0;
						break;
					}
					else
					{
						koniec = 2;
					}
				}
			break;
		}

		putpixel(buffer_field_game, p1->y, p1->x, makecol(255, 255, 255));
		putpixel(buffer_field_game, p2->y, p2->x, makecol(86, 160, 222));

		if(p1->x < MIN_HEIGTH || p1->x > MAX_HEIGTH-1 || p1->y < MIN_WIDTH || p1->y > MAX_WIDTH-1)
		{
			koniec = 1;
		}

		if(p2->x < MIN_HEIGTH || p2->x > MAX_HEIGTH-1 || p2->y < MIN_WIDTH || p2->y > MAX_WIDTH-1)
		{
			if(koniec == 1)
			{
				koniec = 0;
				break;
			}
			else
			{
				koniec = 2;
			}
		}

		blit(buffer_field_game, screen, 0, 0, 1, 1, buffer_field_game->w, buffer_field_game->h);

		if(koniec != -1)
			break;


		if(key[KEY_ESC])
			break;

		if(key[KEY_ENTER])
		{
			pause_game(0, p1, p2);
			odliczanie();
		}

#ifdef PSP
		if(key[KEY_RSHIFT])
		{
			thid = sceKernelCreateThread("Screenshotpsp", screenshotpsp,
			   0x11, 256 * 1024, PSP_THREAD_ATTR_USER, NULL);
			sceKernelStartThread(thid, 0, NULL);
		}
#else
		if(key[KEY_M])
		{
			screenshot();
		}
#endif

#if PSP
		if(key[KEY_UP])
#else
		if(key[KEY_W])
#endif
		{
			if(p1->direction != DOWN)
				p1->direction = UP;
		}
#if PSP
		else if(key[KEY_DOWN])
#else
		else if(key[KEY_S])
#endif
		{
			if(p1->direction != UP)
				p1->direction = DOWN;
		}
#if PSP
		else if(key[KEY_LEFT])
#else
		else if(key[KEY_A])
#endif
		{
			if(p1->direction != RIGHT)
				p1->direction = LEFT;
		}
#if PSP
		else if(key[KEY_RIGHT])
#else
		else if(key[KEY_D])
#endif
		{
			if(p1->direction != LEFT)
				p1->direction = RIGHT;
		}
		clear_keybuf();
		keypressed();


		while(p1_speed > 0)
		{
			switch(p1->direction)
			{
				case UP:
					p1->x--;
				break;
				case DOWN:
					p1->x++;
				break;
				case LEFT:
					p1->y--;
				break;
				case RIGHT:
					p1->y++;
				break;
			}
			p1_speed--;
		}

		while(p2_speed > 0)
		{
			switch(p2->direction)
			{
				case UP:
					p2->x--;
				break;
				case DOWN:
					p2->x++;
				break;
				case LEFT:
					p2->y--;
				break;
				case RIGHT:
					p2->y++;
				break;
			}
			p2_speed--;
		}

	}

	remove_int(p1_speed_func);
	remove_int(p2_speed_func);
	remove_int(speed_func);

	destroy_bitmap(buffer_field_game);
	destroy_bitmap(buffer_border_and_info);

	return koniec;
}
コード例 #4
0
ファイル: extimer.c プロジェクト: kazzmir/allegro4-to-5
int main(void)
{
    int c;

    if (allegro_init() != 0)
        return 1;
    install_keyboard();
    install_timer();

    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, 320, 200, 0, 0) != 0) {
        if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0) {
            set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
            allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
            return 1;
        }
    }

    set_palette(desktop_palette);
    clear_to_color(screen, makecol(255, 255, 255));

    textprintf_centre_ex(screen, font, SCREEN_W/2, 8, makecol(0, 0, 0),
                         makecol(255, 255, 255), "Driver: %s",
                         timer_driver->name);

    /* use rest() to delay for a specified number of milliseconds */
    textprintf_centre_ex(screen, font, SCREEN_W/2, 48, makecol(0, 0, 0),
                         makecol(255, 255, 255), "Timing five seconds:");

    for (c=1; c<=5; c++) {
        textprintf_centre_ex(screen, font, SCREEN_W/2, 62+c*10,
                             makecol(0, 0, 0), makecol(255, 255, 255), "%d", c);
        rest(1000);
        if (keypressed()) {
            return 0;
        }
    }

    textprintf_centre_ex(screen, font, SCREEN_W/2, 142, makecol(0, 0, 0),
                         makecol(255, 255, 255),
                         "Press a key to set up interrupts");
    readkey();

    /* all variables and code used inside interrupt handlers must be locked */
    LOCK_VARIABLE(x);
    LOCK_VARIABLE(y);
    LOCK_VARIABLE(z);
    LOCK_FUNCTION(inc_x);
    LOCK_FUNCTION(inc_y);
    LOCK_FUNCTION(inc_z);

    /* the speed can be specified in milliseconds (this is once a second) */
    install_int(inc_x, 1000);

    /* or in beats per second (this is 10 ticks a second) */
    install_int_ex(inc_y, BPS_TO_TIMER(10));

    /* or in seconds (this is 10 seconds a tick) */
    install_int_ex(inc_z, SECS_TO_TIMER(10));

    /* the interrupts are now active... */
    while (!keypressed()) {
        textprintf_centre_ex(screen, font, SCREEN_W/2, 176, makecol(0, 0, 0),
                             makecol(255, 255, 255), "x=%d, y=%d, z=%d", x, y, z);
        rest(1);
    }

    return 0;
}
コード例 #5
0
ファイル: game.c プロジェクト: KUNICA/MoneyMan
/* Mode: 0 - Speed mode, 1 - time mode (other settings set globally) */
int game(int mode) {
		/* Vars */
	int i=0,j=0,k=0; /* Multi use variables */
	int x_max=64,y_max=64; /* Max coordinates */
	int step = 8; /* Moneyman pixel per step */
	int padding = 16; /* Field's distance from window edge */

	int starttime=0; /* Start time (saved there later) */
	int currtime=0;

	int p1collectedcoins = 0; /* Number of collected coins */
	int p2collectedcoins = 0;
	int score = 0; /* Score if P1 (in 2P mode no scores) */
	int p1wins=0;
	int p2wins=0;
	int finished = 0; /* Finished (0=none, 1 =p1, 2=p2) */

	/* Moneyman coordinates */
	int p1_x=x_max/2, p2_x=p1_x;
	int p1_y=y_max/2, p2_y=p1_y;


	struct obj_struct *objs=0; /* Dyn. array with coins + exit door */

	BITMAP *buffer=0,*p1pic=0,*p2pic=0,*coinpic=0,*exitpic=0; /* all bitmaps */

	/* Init movement timer */
	install_int_ex(increment_coinmove_counter, SECS_TO_TIMER(relocinterval));

	/* Load bitmaps */
	buffer = create_bitmap(800,600);
	p1pic = load_bitmap("gfx/MoneyMan.bmp",NULL);
	p2pic = load_bitmap("gfx/Player2.bmp",NULL);
	coinpic = load_bitmap("gfx/Coin.bmp",NULL);
	exitpic = load_bitmap("gfx/Exit.bmp",NULL);

	/* Random seed */
	srand(time(NULL));

	/* Init objects */
	objs = malloc(sizeof(*objs)*(coinnumber+1)); /* Allocate */
	if (objs==0) { /* Allocation failed */
		fprintf(stderr,"Memory couldn't be allocated, sorry :( free your RAM!\n");
		return 1;
	}
	init_objs(objs,coinnumber+1); /* Init with 0 */
	objs[0].hidden = 1; /* Door invisible */
	relocate_objs(objs,coinnumber+1,x_max,y_max); /* Random position */

	readysetgo();
	starttime = time(NULL); /* Here it's fair to start time counting */
	while (!key[KEY_ESC] && !close_button_pressed) { /* ESC quits game */
		clear_bitmap(buffer);
		rectfill(buffer,0,0,buffer->w,buffer->h,backcolor);

		while (speed_counter > 0) { /* logical tick event happened */
			/* Collision check */
			for (i=1; i<coinnumber+1; i++) {
			/* For coins - if visible, hide, increase counter */
				if (PicCollision(p1pic,p1_x*step,p1_y*step,
						coinpic,objs[i].x*step,objs[i].y*step)
						&& objs[i].hidden==0) {
					objs[i].hidden=1;
					p1collectedcoins++;
				}
				if (players==2)
					if (PicCollision(p2pic,p2_x*step,p2_y*step,
							coinpic,objs[i].x*step,objs[i].y*step)
							&& objs[i].hidden==0) {
						objs[i].hidden=1;
						p2collectedcoins++;
					}
			}

			/* All coins collected - show door (speed mode) */
			if (mode==0 && p1collectedcoins+p2collectedcoins == coinnumber) {
				objs[0].hidden=0;
			}

			currtime = time(NULL)-starttime;

			/* Calculate current score */
			if (players==1) {
				if (mode==0)
					score = get_score(p1collectedcoins,relocinterval,currtime);
				else if (mode==1)
					score = get_score(p1collectedcoins,relocinterval,ttime);
			}


			if ((mode==0 && PicCollision(p1pic,p1_x*step,p1_y*step,
							exitpic,objs[0].x*step,objs[0].y*step)
							&& objs[0].hidden==0) ||
							(mode==1 && currtime>=ttime)) {
				finished = 1;
			} else if (players == 2)
				if (mode==0 && PicCollision(p2pic,p2_x*step,p2_y*step,
							exitpic,objs[0].x*step,objs[0].y*step)
							&& objs[0].hidden==0)
					finished = 2;

			/* Movement of MoneyMan */
			if(key[KEY_LEFT] && p1_x > 0)
				p1_x--;
			else if(key[KEY_RIGHT] && p1_x < x_max)
				p1_x++;
			if(key[KEY_UP] && p1_y > 0)
				p1_y--;
			else if(key[KEY_DOWN] && p1_y < y_max)
				p1_y++;
			/* Movement of P2 */
			if(key[KEY_A] && p2_x > 0)
				p2_x--;
			else if(key[KEY_D] && p2_x < x_max)
				p2_x++;
			if(key[KEY_W] && p2_y > 0)
				p2_y--;
			else if(key[KEY_S] && p2_y < y_max)
				p2_y++;

			/*Reset tick counter*/
			speed_counter=0;
		}

		/* win count (must be here) */
		if (players==2 && mode==0) { /* More coins + reaches door -> win, else -> draw */
			if (finished==1 && p1collectedcoins>p2collectedcoins)
				p1wins++;
			else if (finished==2 && p2collectedcoins>p1collectedcoins)
				p2wins++;
		} else if (players==2 && mode==1 && finished) { /* more coins -> win, else -> draw */
			if (p1collectedcoins>p2collectedcoins)
				p1wins++;
			else if (p2collectedcoins>p1collectedcoins)
				p2wins++;
		}

		/* Move coins every some secs */
		if (coinmove_counter > 0) {
			relocate_objs(objs,coinnumber+1,x_max,y_max);
			if (mode==1) /* Time mode */
				for(i=1;i<coinnumber+1;i++)  /* Make visible again */
					objs[i].hidden=0;
			coinmove_counter = 0; /* reset interval tick */
		}

		/* Fill buffer */
		if (objs[0].hidden==0) /* index 0 = exit door */
			draw_sprite(buffer,exitpic,step*objs[0].x+padding,step*objs[0].y+padding);
		for(i=1;i<=coinnumber;i++) /* the coins */
			if (objs[i].hidden==0)
				draw_sprite(buffer,coinpic,step*objs[i].x+padding,step*objs[i].y+padding);

		/* Draw money man */
		draw_sprite(buffer,p1pic,step*p1_x+padding,step*p1_y+padding);
		if (players==2)
			draw_sprite(buffer,p2pic,step*p2_x+padding,step*p2_y+padding);

		/* Borders of game field */
		i=(x_max+p1pic->w/step)*step+padding;
		j=(y_max+p1pic->h/step)*step+padding;

		/* Draw borders */
		for (k=0;k<5;k++)
			rect(buffer,padding-k,padding-k,i+k,j+k,makecol(0,0,255-k*20));


		/* Print info */
		textprintf_ex(buffer,myfont,i+padding,32,titlecol,-1,"MoneyMan");
		textprintf_ex(buffer,myfont,i+padding,fontpxsize * 2,
			menuselcol,-1,
			(mode==0) ? "Time: %d" : "Time left: %d",
			(mode==0) ? currtime : ttime-currtime );
		textprintf_ex(buffer,myfont,i+padding,fontpxsize * 3,
				menuselcol,-1,
				(mode==0) ? "Coins left: %d" : "P1 Coins: %d" ,
				(mode==0) ? coinnumber-(p1collectedcoins+p2collectedcoins) : p1collectedcoins );
		if (players==2 && mode==1)
			textprintf_ex(buffer,myfont,i+padding,fontpxsize * 4,
				menuselcol,-1, "P2 Coins: %d" , p2collectedcoins );
		if (players==1)
			textprintf_ex(buffer,myfont,
						(x_max+p1pic->w/step)*step+2*padding,fontpxsize*5,
						menuselcol,-1,
						"Score: %d",score);
		/* Draw wins info */
		if (players==2) {
			textprintf_ex(buffer,myfont,
				(x_max+p1pic->w/step)*step+2*padding,fontpxsize*11,
				infocol,backcolor,
				"P1 wins: %d",p1wins);
			textprintf_ex(buffer,myfont,
				(x_max+p1pic->w/step)*step+2*padding,fontpxsize*12,
				infocol,backcolor,
				"P2 wins: %d",p2wins);
		}

		/* Apply on screen */
		blit(buffer,screen,0,0,0,0,800,600); /*Copy buffer to screen*/

		/* If win */
		if (finished) {
			if (mode==0)
				textprintf_ex(screen,myfont,
					(x_max+p1pic->w/step)*step+2*padding,fontpxsize*6,
					infocol,-1,
					"Finished!");
			else if (mode==1)
				textprintf_ex(screen,myfont,
					(x_max+p1pic->w/step)*step+2*padding,fontpxsize*6,
					infocol,-1,
					"Time is over!");
				if (players==1)
				add_if_highscore(score);
				textprintf_ex(screen,myfont,
				(x_max+p1pic->w/step)*step+2*padding,fontpxsize*8,
				infocol,-1,
				"ENTER=retry");
			textprintf_ex(screen,myfont,
				(x_max+p1pic->w/step)*step+2*padding,fontpxsize*9,
				infocol,-1,
				"ESC=quit");
			while(!(key[KEY_ENTER] || key[KEY_ESC]));
			if (key[KEY_ENTER]) {
				readysetgo();
				finished = 0;
				p1collectedcoins = 0;
				p2collectedcoins = 0;
				init_objs(objs,coinnumber+1);
				relocate_objs(objs,coinnumber+1,x_max,y_max);
				objs[0].hidden = 1; /* hide door again */
				remove_int(increment_coinmove_counter);
				install_int_ex(increment_coinmove_counter, SECS_TO_TIMER(relocinterval));
				starttime = time(NULL);
			}
		}
	}

	/* clean up on finish */
	remove_int(increment_coinmove_counter);
	destroy_bitmap(exitpic);
	destroy_bitmap(coinpic);
	destroy_bitmap(p1pic);
	destroy_bitmap(p2pic);
	destroy_bitmap(buffer);
	free(objs); objs=0;
	clear_bitmap(screen);
	rectfill(screen,0,0,screen->w,screen->h,backcolor);
	return 0;
}
コード例 #6
0
ファイル: main.cpp プロジェクト: hugodanieleng/Snake
void main() 
{	
	allegro_init();
	install_keyboard();
	set_color_depth(32);
	set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1000, 600, 0, 0);
	install_int_ex(ContaMsec, MSEC_TO_TIMER(1));
	install_int_ex(ContaSec, SECS_TO_TIMER(1));	
	install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL);
	MIDI* bgSound = load_midi("sounds/BGM.mid");
	SAMPLE* snakeHit = load_wav("sounds/cobraDamage.wav");
	SAMPLE* snakeHitSelf = load_wav("sounds/cobraDamage2.wav");
    SAMPLE* snakeDeath = load_wav("sounds/cobraDeath.wav");	
    SAMPLE* gameOver = load_wav("sounds/gameOver.wav");	
	InicializaPP();

	int swt = 0;
	

	
	struct Cobra snake[500]; //Estrutura que representa a cobra e suas bmpPartes.

	int xst=0, yst=10, xst2=190, yst2 = 40; //Coordenadas de referência da área de Status do jogo
	int xL = 0, yL = 425, xL2 = 190, yL2 = 590; //Coordenadas de referência da Tabela de Comidas
	
	buffer = create_bitmap(800,600); //Bitmap principal de desenho
	status = create_bitmap(200,600); //Bitmap principal de desenho
	clear_to_color(status, makecol(0,0,0));
	clear_to_color(buffer, makecol(0,0,0));

	//INICIO: Inicializacao Sprites
	bmpSapo = load_bitmap("images/sapo_20x20.bmp",pallet);
	bmpAranha = load_bitmap("images/ARANHA_20X20.bmp",pallet);
	bmpMaca = load_bitmap("images/MACA_20x20.bmp",pallet);
	bmpMilho = load_bitmap("images/milho_20X20.bmp",pallet);
	bmpCobraHead = load_bitmap("images/cobraHeadVerde.bmp",pallet);
	bmpFundo = load_bitmap("images/fundoAreia.bmp",pallet);
	bmpCobrinha = load_bitmap("images/cobrinha.bmp",pallet);
	bmpParte = load_bitmap("images/cobraCorpo2.BMP",pallet);
	bmpBordaVert = load_bitmap("images/bordaVert.bmp",pallet);
	bmpBordaHoriz = load_bitmap("images/bordaHoriz.bmp",pallet);
	myfont = load_font("Terminal.pcx", pallet, NULL); //Fonte personalizada
	//FIM: Inicializacao Sprites



	//INICIO: Comidas
	Comida	cmdSapo;
	cmdSapo.x = 300;
	cmdSapo.y = 400;
	cmdSapo.bmp = bmpSapo;
	cmdSapo.spStand = load_wav("sounds/sapoStand.wav");
	cmdSapo.spDie = load_wav("sounds/sapoDie.wav");
	cmdSapo.visible = true;
	cmdSapo.ponto = 50;
	cmdSapo.taman = 1;
	
	Comida	cmdAranha;
	cmdAranha.x = 60;
	cmdAranha.y = 500;	
	cmdAranha.bmp = bmpAranha;
	cmdAranha.spStand = load_wav("sounds/sapoStand.wav");
	cmdAranha.spDie = load_wav("sounds/aranhaDie.wav");	
	cmdAranha.visible = true;
	cmdAranha.ponto = 30;
	cmdAranha.taman = 3;
		
	Comida	cmdMaca;
	cmdMaca.x = 100;
	cmdMaca.y = 100;
	cmdMaca.bmp = bmpMaca;
    cmdMaca.spStand = load_wav("sounds/sapoStand.wav");
	cmdMaca.spDie = snakeBit;
	cmdMaca.visible = true;
	cmdMaca.ponto = 20;
	cmdMaca.taman = 4;
	
	
	Comida	cmdMilho;
	cmdMilho.x = 600;
	cmdMilho.y = 100;	
	cmdMilho.bmp = bmpMilho;
	//cmdmilho.spStand = load_wav("sounds/sapoStand.wav");
	cmdMilho.spDie = snakeBit;	
	cmdMilho.visible = true;
	cmdMilho.ponto = 10;
	cmdMilho.taman = 5;
	
	Comida	cmdCobrinha;	
	cmdCobrinha.x = 600;
	cmdCobrinha.y = 480;	
	cmdCobrinha.bmp = bmpCobrinha;
	cmdCobrinha.spStand = load_wav("sounds/cobrinhaStand.wav");
	cmdCobrinha.spDie = load_wav("sounds/cobrinhaDie.wav");	
	cmdCobrinha.visible = true;
	cmdCobrinha.ponto = 40;
	cmdCobrinha.taman = 2;
	
	Comida comidas[20];
	comidas[0] = cmdSapo;
	comidas[1] = cmdAranha;
	comidas[2] = cmdMaca;
	comidas[3] = cmdMilho;
	comidas[4] = cmdCobrinha;
	comidas[5] = cmdAranha;
	comidas[6] = cmdMilho;
	comidas[7] = cmdMilho;
	comidas[8] = cmdMilho;
	comidas[9] = cmdCobrinha;
	comidas[10] = cmdSapo;
	comidas[11] = cmdAranha;
	comidas[12] = cmdMaca;
	comidas[13] = cmdMilho;
	comidas[14] = cmdCobrinha;
	comidas[15] = cmdAranha;
	comidas[16] = cmdMilho;
	comidas[17] = cmdMilho;
	comidas[18] = cmdMilho;
	comidas[19] = cmdCobrinha;
	//FIM: Comidas
	
	Vida vidas[6];
    for (int i = 0;i < 6; i++){
        vidas[i].x = i*30; 
        vidas[i].y = 0;
        vidas[i].bmp = bmpCobraHead;
        vidas[i].visible = true;
    }
    	
	//INICIO: Desenho da área de status do jogo. Pontos, Fase, Tamanho, Tempo, Vidas
	for (int i = -1;i<2;i++){rect(status, xst+i, yst+i, xst2-i, 40-i, makecol(210,192,152));}
	
	textprintf_ex(status, myfont, xst+5,68, makecol(255,0,0), -1,"Fase: 1" );
	for (int i = -1;i<2;i++){rect(status, xst+i, yst+50+i, xst2-i, yst2+50-i, makecol(210,192,152));}
		
	for (int i = -1;i<2;i++){rect(status, xst+i, yst+100+i, xst2-i, yst2+100-i, makecol(210,192,152));}
	
	for (int i = -1;i<2;i++){rect(status, xst+i, yst+150+i, xst2-i, yst2+150-i, makecol(210,192,152));}
	
	for (int i = 0;i < 6; i++){
        if (vidas[i].visible){
           draw_sprite(status, vidas[i].bmp, vidas[i].x, vidas[i].y+195);
        }
    }
	//FIM: Desenho da área status do jogo. Pontos, Fase, Tamanho, Tempo, Vidas
		
	//INICIO: Desenho da Tabela de Comida do jogo.
	textprintf_ex(status, myfont, xL,yL-20, makecol(255,0,0 ), -1,"Comidas" );
	for (int i = -1;i<2;i++){rect(status, xL+i, yL+i, xL2-i, yL2-i, makecol(210,192,152));}
	draw_sprite(status, bmpMilho, xL+10, yL+10);
	textprintf_ex(status, font, xL+40,yL+20, makecol(255,255,0 ), -1,"10 pontos" );
	draw_sprite(status, bmpMaca, xL+10, yL+40);
	textprintf_ex(status, font, xL+40,yL+50, makecol(255,0,0 ), -1,"20 pontos" );
	draw_sprite(status, bmpAranha, xL+10, yL+70);
	textprintf_ex(status, font, xL+40,yL+80, makecol(153,0,255 ), -1,"30 pontos" );
	draw_sprite(status, bmpCobrinha, xL+10, yL+100);
	textprintf_ex(status, font, xL+40,yL+110, makecol(255,255,153 ), -1,"40 pontos" );
	draw_sprite(status, bmpSapo, xL+10, yL+130);
	textprintf_ex(status, font, xL+40,yL+140, makecol(110,220,0 ), -1,"50 pontos " );
	//FIM: Desenho da Tabela de Comida do jogo.


	//INICIO: Desenho do campo de ação da cobra.
    draw_sprite(buffer, bmpFundo, xC,yC);
	draw_sprite(buffer, bmpBordaVert, xC,yC);
	draw_sprite(buffer, bmpBordaVert, xC2-20,yC);
	draw_sprite(buffer, bmpBordaHoriz, xC,xC);
	draw_sprite(buffer, bmpBordaHoriz, xC,yC2-20);
	//FIM: Desenho do campo de ação da cobra
	

	//INICIO: Desenho da cobra
	snake[0].bmp = bmpCobraHead;  		     		
	for (int i = 1;i<tamCobra;i++){
			snake[i].bmp = bmpParte;  		   
	}
	//FIM: Desenho da cobra	
	
    char control;
    int veloc;
 control = menu_inicial();
  if (control == 'j'){veloc = 120;}else{veloc = 50;}
	
	play_midi(bgSound,0);		
	
	draw_sprite(screen,status,800,0);
	
	DesenhaCampoAcao();
		int x=20, y=20 , xx, yy;
		int dirx = 20, diry = 0;		
		int tipoCol = 0;
		int tamComida; //Tamanho que a comida capturada aumentará a cobra
		int ptsComida; //Quantidade de pontos que a comida vale
		int pontosAtual = 0; //Quantidade de pontos
	
	
	

	
		while (!key[KEY_ESC]) {

			DesenhaCampoAcao();		
			

 if(control == 't'){
			if (key[KEY_UP]){
		 	   if (dirx != 0) {
	 	  		  diry = -20;
		 	   	  dirx = 0;
	  			  }
			}
			
			if (key[KEY_DOWN]){
			   if (dirx != 0) {
				   diry = 20;
				   dirx = 0;
			   }
			}
			if (key[KEY_LEFT]){
			   if (diry != 0) {
				   dirx = -20;
				   diry = 0;
			   }
			}
			if (key[KEY_RIGHT]){
			   if (diry != 0) {
		  		  dirx = 20;
			   	  diry = 0;
	  			  }
			}

}
else if(control = 'j') {
     
 swt = inp32(0x379);
                 
         if (swt == 95){
		       if ((countMsecCmd / 100) > 1){
     		 	   if (dirx == 20 && diry == 0) {
		              diry = 20;
				      dirx = 0;
 			        }
		 	        else if (dirx == 0 && diry == 20) {
	                  dirx = -20;
				      diry = 0;
			        }	  			  
		 	        else if (dirx == -20 && diry == 0) {
	  		          diry = -20;
		 	   	      dirx = 0;
                    }	 
		 	        else if (dirx == 0 && diry == -20) {
                      dirx = 20;
			   	      diry = 0;
	  			    }	            
                    countMsecCmd = 0;  
               }       			  	  			  
			}
			
            if (swt == 63){
		       if ((countMsecCmd / 100) > 1){
     		 	   if (dirx == 0 && diry == 20) {
		              diry = 0;
				      dirx = 20;
 			        }
		 	        else if (dirx == 20 && diry == 0) {
	                  dirx = 0;
				      diry = -20;
			        }	  			  
		 	        else if (dirx == 0 && diry == -20) {
	  		          diry = 0;
		 	   	      dirx = -20;
                    }	 
		 	        else if (dirx == -20 && diry == 0) {
                      dirx = 0;
			   	      diry = 20;
	  			    }	            
                    countMsecCmd = 0;  
               }       			  	  			  
			}    
}     
			
		if ((countMsec / veloc) > 1){
		   			   
			x += dirx;
			y += diry;

			if (VerifCollision(snake, comidas, x, y, &xx, &yy, tamCobra, &tipoCol, &ptsComida, &tamComida)){
	           switch (tipoCol){
			   		  case 0:
					  	   break;
				  	   case 1://colisao com corpo
		           	   		textprintf_ex(screen, font, 0,560, makecol(255,0,0 ), -1,"Colisao Em   : x: %d  y: %d TipoCol: %d", xx, yy, tipoCol); 
				   			tipoCol = 0;
				   			ResetaPosicaoCobra(snake, tamCobra);
				   			play_sample(snakeHitSelf,255,90,1000,0);				   			
				   			if (qtdVidas > 1){qtdVidas=0;} else {qtdVidas = -1;}
                            MostraVidas(qtdVidas,vidas);
 				   			x=20; 
				   			y=20; 
				   			dirx = 20; 
				   			diry = 0;
				   			
				   			AcendeLuzes(); 
				   				
				  	   break;
			 		   case 2://colisao obstaculos
		           	   		textprintf_ex(screen, font, 0,560, makecol(255,0,0 ), -1,"Colisao Em   : x: %d  y: %d TipoCol: %d", xx, yy, tipoCol); 
				   			tipoCol = 0;
				   			ResetaPosicaoCobra(snake, tamCobra);
				   			play_sample(snakeHit,255,90,1000,0);
				   			qtdVidas--;
				   			MostraVidas(qtdVidas,vidas);				   			
 				   			x=20; 
				   			y=20; 
				   			dirx = 20; 
				   			diry = 0;
				   			
      				        AcendeLuzes(); 
                            						
					   break;
				  	   case 3: //colisao comida
					   		textprintf_ex(screen, font, 0,560, makecol(255,0,0 ), -1,"Colisao Em   : x: %d  y: %d TipoCol: %d", xx, yy, tipoCol); 
					   		AumentaCobra(snake, &tamCobra, tamComida, bmpParte);
					   		pontosAtual += ptsComida;
					   		tipoCol = 0;
					   		CriaComida(comidas);
				  	   break;					   
				  	  
	  			}
	  			
				 			
	  		}
	  		
	   			   
		   MoveSnake(snake, x, y, tamCobra); 
		   
		   MostraStatus(pontosAtual, tamCobra);
		   draw_sprite(screen,status,800,0);
		   countMsec = 0;
	  		
			
			for (int i = 0;i < tamCobra;i++){
		  		draw_sprite(buffer, snake[i].bmp, snake[i].x,snake[i].y);
			}



			for (int i = 0;i < 10;i++){
		 		if (comidas[i].visible){
				   	 draw_sprite(buffer, comidas[i].bmp, comidas[i].x,comidas[i].y);
				}
			}			
			
			

			draw_sprite(screen,buffer,0,0);
				
 		    IntercalaLeds();
			
		  }
        else if(qtdVidas < 0)
        {
            play_sample(snakeDeath,255,90,1000,0);
  			stop_midi();
 			play_sample(gameOver,255,90,1000,0);
            GravaRank(pontosAtual, countSec, tamCobra);
            clear_to_color(buffer, makecol(165,229,101));
            clear_to_color(screen, makecol(165,229,101));
            MostraRank();
            textprintf_ex(buffer, myfont, 300,500, makecol(255,0,0), -1,"Aperte ESC para sair...." );
            draw_sprite(screen,buffer,0,0);        
  			break;
        }
        }

        while (!key[KEY_ESC]) {}
        FinalizaPP();
}