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); }
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; } }