Пример #1
0
void DependencyPkg_init(NuSMVEnv_ptr env)
{
  FormulaDependency_ptr dependency;
  OptsHandler_ptr opts = OPTS_HANDLER(NuSMVEnv_get_value(env, ENV_OPTS_HANDLER));

  if (opt_verbose_level_gt(opts, 4)) {
    Logger_ptr logger = LOGGER(NuSMVEnv_get_value(env, ENV_LOGGER));
    Logger_log(logger,
               "Instantiating the FormulaDependency instance "
               "within the given environment...\n");
  }

  dependency = FormulaDependency_create(env);
  {
    /* add core handlers */
    DependencyBase_ptr core_dep;
    DependencyBase_ptr psl_dep;
    core_dep = DEPENDENCY_BASE(DependencyCore_create(env, "Dependency core"));
    MasterNodeWalker_register_walker(MASTER_NODE_WALKER(dependency),
                                     NODE_WALKER(core_dep));

    psl_dep = DEPENDENCY_BASE(DependencyPsl_create(env, "Dependency psl"));
    MasterNodeWalker_register_walker(MASTER_NODE_WALKER(dependency),
                                     NODE_WALKER(psl_dep));

  }

  NuSMVEnv_set_value(env, ENV_DEPENDENCY, dependency);
}
Пример #2
0
int Kanon_fyr_av_et_prosjektil (Kanon * kanon) {

    Spaceinvader * spaceinvader = (Spaceinvader*)kanon->spaceinvader;    
    Modell * modell = spaceinvader->modell;

    const char * sign = "Kanon_fyr_av_et_prosjektil(Kanon*)";

    Logger_log (logg, INFO, sign, "start");
    
    /* Finn neste ledige plass i ild- givningen. */
    
    int teller;
    for (teller = 0; teller < MAX_ANTALL_PROSJEKTIL; teller++) {
        if (kanon->ild[teller] == NULL) {
            break;
        }
    }

    if (teller == MAX_ANTALL_PROSJEKTIL) {
        Logger_log (logg, INFO, sign, "teller == MAX_ANTALL_PROSJEKTIL");
        return 0;
    }
        
    /* Opprett et nytt prosjektilobjekt, og plasser dette i ild- givningen. */

    int type = 0;
    int x = kanon->r->x + (kanon->r->b / 2);
    int y = kanon->r->y;
    
    kanon->ild[teller] = Prosjektil_opprett (spaceinvader,type,x,y);

    int t = 0;
    for (teller = 0; teller < MAX_ANTALL_PROSJEKTIL; teller++) {
        if (kanon->ild[teller] == NULL) 
            t++;        
    }
    modell->ledigeprosjektil = t;
    
    Logger_log (logg, INFO, sign, "slutt");
    
    return 1;
    
}
Пример #3
0
void SymbLayer_committed_to_enc(SymbLayer_ptr self)
{
  SYMB_LAYER_CHECK_INSTANCE(self);

  self->committed_to_encs += 1;

  if (opt_verbose_level_gt(self->options, 4)) {
    Logger_log(self->logger,
               "SymbLayer '%s': committed to %d encodings\n",
               SymbLayer_get_name(self), self->committed_to_encs);
  }
}
Пример #4
0
void SymbLayer_removed_from_enc(SymbLayer_ptr self)
{
  SYMB_LAYER_CHECK_INSTANCE(self);
  nusmv_assert(self->committed_to_encs > 0);

  self->committed_to_encs -= 1;

  if (opt_verbose_level_gt(self->options, 4)) {
    Logger_log(self->logger,
               "SymbLayer '%s': removed from encoding (%d remaining)\n",
               SymbLayer_get_name(self), self->committed_to_encs);
  }
}
Пример #5
0
void DependencyPkg_quit(NuSMVEnv_ptr env)
{
  FormulaDependency_ptr dependency =
    FORMULA_DEPENDENCY(NuSMVEnv_remove_value(env, ENV_DEPENDENCY));
  OptsHandler_ptr opts = OPTS_HANDLER(NuSMVEnv_get_value(env, ENV_OPTS_HANDLER));

  if (opt_verbose_level_gt(opts, 4)) {
    Logger_ptr logger = LOGGER(NuSMVEnv_get_value(env, ENV_LOGGER));
    Logger_log(logger,
               "Clearing the formula dependency instance in "
               "the given environment...\n");
  }

  MasterNodeWalker_destroy(MASTER_NODE_WALKER(dependency));
}
Пример #6
0
Lyd * Lyd_opprett() {

    const char * sign = "Lyd_opprett()";

    Lyd * lyd = (Lyd*)malloc(sizeof(Lyd));
                 
    lyd->kanonild = Mix_LoadWAV( "shot.wav" ); 
    
    if (lyd->kanonild == NULL) {     
        char melding[256];
        sprintf(melding,"SDL_mixer Error: %s", Mix_GetError());        
        Logger_log (logg, FEIL, sign, melding);
        return NULL;        
    }
        
    lyd->ufo_treff = Mix_LoadWAV( "alien-hit.wav" ); 
    
    if (lyd->ufo_treff == NULL) {     
        char melding[256];
        sprintf(melding,"SDL_mixer Error: %s", Mix_GetError());        
        Logger_log (logg, FEIL, sign, melding);
        return NULL;        
    }

    lyd->ufo_ild = Mix_LoadWAV( "alien-shot.wav" ); 
    
    if (lyd->ufo_ild == NULL) {     
        char melding[256];
        sprintf(melding,"SDL_mixer Error: %s", Mix_GetError());        
        Logger_log (logg, FEIL, sign, melding);
        return NULL;        
    }
    
    return lyd;
    
}
Пример #7
0
void Lyd_generer(Lyd * lyd, int type) {

    const char * sign = "Lyd_generer()";

    Logger_log (logg, INFO, sign, "start");
    
    if (type == 1) {
    
        Logger_log (logg, INFO, sign, "kanonild");
                
        if (Mix_PlayChannel( 0, lyd->kanonild, 0 ) == -1) {
            char melding[256];
            sprintf(melding,"SDL_mixer Error: %s", Mix_GetError());        
            Logger_log (logg, FEIL, sign, melding);            
        }
        
    } else if (type == 2) {
    
        Logger_log (logg, INFO, sign, "ufo_treff");
                
        if (Mix_PlayChannel( 1, lyd->ufo_treff, 0 ) == -1) {
            char melding[256];
            sprintf(melding,"SDL_mixer Error: %s", Mix_GetError());        
            Logger_log (logg, FEIL, sign, melding);            
        }
        
    } else if (type == 3) {
    
        Logger_log (logg, INFO, sign, "ufo_ild");
                
        if (Mix_PlayChannel( 1, lyd->ufo_ild, 0 ) == -1) {
            char melding[256];
            sprintf(melding,"SDL_mixer Error: %s", Mix_GetError());        
            Logger_log (logg, FEIL, sign, melding);            
        }
        
    }
    
    
    Logger_log (logg, INFO, sign, "slutt");
    
}
Пример #8
0
int test_lyd() {

    const char * sign = "test_lyd()";
    
    Logger_log (logg, INFO, sign, "start");

    
    if (SDL_Init (SDL_INIT_AUDIO) == -1){
    
        char melding[512];
        sprintf(melding,"SDL_Init Error: %s", SDL_GetError());
        Logger_log (logg, FEIL, sign, melding);        
        return 1;        
        
    }    
   
    Logger_log (logg, INFO, sign, "SDL_Init(SDL_INIT_AUDIO) ok");
    
    
    
    if( Mix_OpenAudio( MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 1, 4096 ) < 0 ) {
    
        char melding[512];
        sprintf(melding,"Mix_OpenAudio Error: %s", Mix_GetError());        
        Logger_log (logg, FEIL, sign, melding);
		return 1;
        
	}

    Logger_log (logg, INFO, sign, "Mix_OpenAudio ok");
    	
    
    
    
    Lyd *lyd = Lyd_opprett();    
    Lyd_generer(lyd, 1);        
    
    SDL_Delay(400);
    
    Lyd_slett(&lyd);
    
    
    
    Logger_log (logg, INFO, sign, "slutt");
    
    return 0;

}
Пример #9
0
int Ufoer_tikk (Ufoer * ufoer) {

    /*
     * I denne metoden skjer følgende.     
     *     
     *
     * 1. Kontroller hastigheten til ufoene.
     *
     * Ufoer_tikk kalles opp ca 60 ganger i sekundet. Ved hjelp av variabelen
     * kontrollsentral->ufo_tikk_timer reguleres hastigheten mht hvor ofte vi
     * oppdaterer ufoene.
     *
     *
     * 2. Oppdater plasseringen til ufoene.
     *
     * Det er opptil 55 ufoer som skal ha en oppdatert plassering. Hvordan vi 
     * skal oppdatere plasseringen, er avhengig av hvilken retning ufoene
     * beveger seg i.
     *
     *
     * 3. Oppdater retningen ufoene beveger seg i.
     *
     * Ufoene kan bevege seg mot høyre eller venstre eller nedover. Når ufoene
     * beveger seg ett nivå ned, skal farten økes. 
     * 
     *
     * Om metoden returnerer 1 har en eller flere ufo nådd jorden, dvs spillet
     * er slutt. Ellers returneres 0;
     */

    Spaceinvader *spaceinvader = (Spaceinvader*)ufoer->spaceinvader;    
    Modell * modell = spaceinvader->modell;
    Skjerm * skjerm = spaceinvader->skjerm;
    
    const char * sign = "Ufoer_tikk(Ufoer*)";
    
    /* Oppdater eventuell eksisterende ild-givning fra ufoene. */
    
    int teller;
    for (teller = 0; teller < 55; teller++) {        
        Ufo * ufo = ufoer->ufo[teller];        
        Ufo_tikk (ufo);
    }    
        
    /* Ufo'ene har varierende fart avhengig av hvor langt vi er kommet. */
    
    if (modell->ufo_tikk_timer > 0) {
        modell->ufo_tikk_timer--;
        return 0;
    }    
    
    modell->ufo_tikk_timer = modell->ufo_fart;
        
    /* Oppdater plassering */
        
    for (teller = 0; teller < 55; teller++) {        
        Ufo * ufo = ufoer->ufo[teller];        
        if (modell->ufo_retning == 1) {        
            ufo->r->x += 5;                        
        } else if (modell->ufo_retning == 2) {        
            ufo->r->y += ufo->r->h;                                    
        } else if (modell->ufo_retning == 3) {        
            ufo->r->x -= 5;            
        } else if (modell->ufo_retning == 4) {        
            ufo->r->y += ufo->r->h;            
        } 

        /* Benyttes ifm kollisjonsdeteksjon. */
        if (ufo->r->y > modell->ufo_nivaa) {
            modell->ufo_nivaa = ufo->r->y;
        }
        
    }
    
    /* Oppdater retning og eventuelt fart */
    
    if (modell->ufo_retning == 1) {    
        for (teller = 0; teller < 55; teller++) {
            Ufo * ufo = ufoer->ufo[teller];
            if ((ufo->r->x + ufo->r->b) > (skjerm->bredde - 10) ) {
                modell->ufo_retning = 2;
                
                if (modell->ufo_fart > 1)
                    modell->ufo_fart--;
                
                char str[32];
                sprintf(str,"ny fart %d",modell->ufo_fart);
                Logger_log (logg, FEIL, sign, str);
                
                break;
            }
        }
    } else if (modell->ufo_retning == 2) {    
        modell->ufo_retning = 3;        
    } else if (modell->ufo_retning == 3) {
        for (teller = 0; teller < 55; teller++) {
            Ufo * ufo = ufoer->ufo[teller];
            if ((ufo->r->x < 10) ) {
                modell->ufo_retning = 4;

                if (modell->ufo_fart > 1)
                    modell->ufo_fart--;
                
                Logger_log (logg, FEIL, sign, "øker farta");
                
                break;
            }
        }                        
    } else if (modell->ufo_retning == 4) {    
        modell->ufo_retning = 1;        
    }    

    /* Har noen ufoer nådd jorden? */
    
    int jord_kontakt = 0;
    for (teller = 0; teller < 55; teller++) {        
        Ufo * ufo = ufoer->ufo[teller];  
        if (ufo->status == 1)
            continue;
        if (ufo->r->y > modell->jord_nivaa) {
            jord_kontakt = 1;
            break;
        }        
    }

    return jord_kontakt;
    
}