Пример #1
0
void Core::run()
{
  if (this->_lib->initWindow(this->_width, this->_height) == EXIT_FAILURE)
    return ;
  initSnake();
  addItem(FOOD);
  displaySnake();
  while (this->_isRunning == true)
    {
      if ((this->_key = this->_lib->getKey()) != -1)
	handleKey();
      HandleDirection();
      this->_lib->clearScreen();
      addItem(FOOD); 
      displaySnake();
      isOnFood();
      usleep(50000);
    }
  this->_lib->gameOver(this->_score);
}
Пример #2
0
void	RunKey( void )
{
	Sprite	*s;
	int			nac;
	int			sel_type=0;
	unsigned long	otype;

	switch( actcode )
	{
#ifdef KEY_TOPLEFT
	case KEY_TOPLEFT:
	case KEY_TOPRIGHT:
	case KEY_BOTTOMLEFT:
	case KEY_BOTTOMRIGHT:
#endif
	case RC_LEFT :
	case RC_RIGHT :
	case RC_UP :
	case RC_DOWN :
		HandleDirection ( actcode );
		break;
	case RC_RED :		// kill all lemmings
		if ( pause || (action!=2) || !in_level )
			break;
		SoundPlay( SND_OHNO );
		FBGetImage( 11*32+32, 384, 32, 48, svdimage[11] );
		FBDrawRect( 11*32+32, 384, 31, 47, RED );
		FBDrawRect( 11*32+33, 385, 29, 45, RED );
		killall=1;
		break;
	case RC_BLUE :		// PAUSE - GO
		if ( action!=2 )
			return;
		if ( pause == 1 )
			FBCopyImage( 10*32+32, 384, 32, 48, svdimage[10] );
		pause = pause ? 0 : 1;
		if ( pause )
		{
			FBGetImage( 10*32+32, 384, 32, 48, svdimage[10] );
			FBDrawRect( 10*32+32, 384, 31, 47, BLUE );
			FBDrawRect( 10*32+33, 385, 29, 45, BLUE );
		}
		break;
	case RC_1 :
	case RC_2 :
	case RC_3 :
	case RC_4 :
	case RC_5 :
	case RC_6 :
	case RC_7 :
	case RC_8 :	// select lemm-action
		if ( pause || !action || (action>2))
			break;
		nac=actcode-1;
		if ( afunc == actcode-1 )
			break;
		if ( !portfolio[ actcode-1 ] )
			break;
		FBGetImage( (nac+2)*32+32, 384, 32, 48, svdimage[nac+2] ); // save
		if ( afunc != -1 )
		{
			FBCopyImage( (afunc+2)*32+32, 384, 32, 48, svdimage[afunc+2] );
			DrawNumber( 106+afunc*32, 389, portfolio[afunc] );
		}
		FBDrawRect( (nac+2)*32+32, 384, 31, 47, YELLOW );
		FBDrawRect( (nac+2)*32+33, 385, 29, 45, YELLOW );
		afunc=nac;
		break;
	case RC_PLUS :
		if ( pause || (action!=2) )
			break;
		newspeed--;
		if ( newspeed < 1 )
			newspeed=1;
		else
		{
			DrawNumber( 74, 389, 100-newspeed );
		}
		break;
	case RC_MINUS :
		if ( pause || (action!=2) )
			break;
		newspeed++;
		if ( newspeed > minspeed )
			newspeed=minspeed;
		else
		{
			DrawNumber( 74, 389, 100-newspeed );
		}
		break;
	case RC_OK :
		if( !action )
		{
			action=1;
			s=deko[1];	// tor;
			s->anilocked=0;
			SoundPlay( SND_DOOR );
			break;
		}
		if (( action != 2 ) || pause || ( sel_sprite == -1 ) || !portfolio[afunc])
			break;
		s=lemm[ sel_sprite ];
		if ( !s )
			break;
		if ( afunc == 2 )	// EXPLODE
		{
			if ( !( s->type & TYP_EXPLODE ) )
			{
				s->type |= TYP_EXPLODE;
				s->counter1=0;
				portfolio[ afunc ]--;
				DrawNumber( 106+afunc*32, 389, portfolio[afunc] );
			}
		}
		else if ( afunc == 0 )	// CLIMB
		{
			if ( !( s->type & TYP_CLIMB ) )
			{
				s->type |= TYP_CLIMB;
				portfolio[ afunc ]--;
				DrawNumber( 106+afunc*32, 389, portfolio[afunc] );
			}
		}
		else
		{
			switch( afunc )
			{
			case 3 :
				sel_type = TYP_STOPPER;
				break;
			case 4 :
				sel_type = TYP_BUILDER;
				break;
			case 6 :
				sel_type = TYP_DIGDIAG;
				break;
			case 7 :
				sel_type = TYP_DIGDOWN;
				break;
			}
			otype=s->type & TYP_WORK;
			while( 1 )
			{
				if ( otype == sel_type )
				{
					if (( otype == TYP_BUILDER ) && ( s->counter2 > 11 ))
						break;
					sel_type = 0;
					break;
				}
				if ( !( otype & TYP_STOPPER ) && !( s->type & TYP_FALLEN ))
					break;
				sel_type = 0;
				break;
			}
			if ( sel_type )
			{
				otype = s->type;
				s->type = sel_type;
				portfolio[ afunc ]--;
				DrawNumber( 106+afunc*32, 389, portfolio[afunc] );
// erstmal die sprite-koordinaten wieder auf 0
				if (( otype & TYP_BUILDER ) && ( s->counter2 < 12 ))
				{
					s->y+=3;
				}
				else if (( otype & TYP_BUILDER ) && ( s->counter2 == 12 ))
				{
					s->y-=2;
				}
				else if ( otype & TYP_DIGDIAG )
				{
					s->y+=5;
					if ( !s->dir )
						s->x+=7;
				}
				else if ( otype & TYP_DIGDOWN )
				{
					s->y+=2;
				}
// sprite-koordinaten eventl. verschieben
				if ( sel_type == TYP_DIGDOWN )
				{
					s->y-=2;
					SpriteChangePic( s, 5 );	// lemming3
				}
				if ( sel_type == TYP_STOPPER )
				{
					s->counter1=0;
					SpriteChangePic( s, 4 );	// lemming2
					bgRect( s->x+(s->width/2), s->y, 1, s->height-2, 150 );
				}
				if ( sel_type == TYP_BUILDER )
				{
					s->counter1=0;
					s->counter2=0;
					s->y -= 3;	// 2
					SpriteChangePic( s, 31 );	// builder
					if ( s->dir )
					{
						s->x++;
						MirrorSprite( s );
					}
					else
						s->x--;
				}
				if ( sel_type == TYP_DIGDIAG )
				{
					s->counter1=0;
					s->counter2=0;
					s->y -= 5;
					SpriteChangePic( s, 33 );	// hacke
					if ( s->dir )
					{
						MirrorSprite( s );
					}
					else
						s->x-=7;
				}
			}
		}
		break;
	}
}