Forum d'entraide à la création de jeux d'aventure
 
PortailPortail  AccueilAccueil  RechercherRechercher  S'enregistrerS'enregistrer  Connexion  

 

 Deux petites questions

Aller en bas 
AuteurMessage
Baguettator
Cliqueur Amateur
Cliqueur Amateur
Baguettator


Nombre de messages : 232

Date d'inscription : 21/05/2020


Deux petites questions Empty
MessageSujet: Deux petites questions   Deux petites questions EmptySam 18 Sep 2021 - 21:10

Bonjour !

J'ai deux petites questions (pour ceux qui ont pas lu le titre du sujet clin d'oeil ) :

1) La transparence d'un GUI est-elle "énergivore" ? Je veux dire, lors de l'apparition d'un menu, je place un GUI blanc avec une transparence de 45 dessous histoire d'avoir un rendu plus net du menu et qu'il se détache du fond. Lorsque ce GUI blanc transparent est là, j'ai l'impression que le jeu rame un peu. Les mouvements de la souris ne sont plus si fluides. Normal ?

2) J'ai de grandes interrogations sur la fonction "return". Je comprends comment elle fonctionne, mais je suis dans un problème incroyable où je ne décèle pas l'erreur, et je me dis que c'est peut-être que j'utilise mal ce mot-clé.

Voici mon code :

Code:
// events_colonie est une structure d'événements. Les événements peuvent être piochés tant que leurs conditions (s'ils en ont) sont vérifiées.
  int c[];
  c=new int [TOTAL_EVENTS_COLONIE];
  for (int i=0 ; i<TOTAL_EVENTS_COLONIE ; i++) c[i]=-1;
  int t=TOTAL_EVENTS_COLONIE;
  int count;
 
  for (int i=0 ; i<TOTAL_EVENTS_COLONIE ; i++)
  {
    int verif=1;
    for (int j=0 ; j<TOTAL_CONDITIONS_EVENTS_COLONIE ; j++)
    {
      if (eventscolo[i].condition[j]==true) // Si l'event a une condition, on va la vérifier
      {
        verif=Conditions_Eventscolo(j); // Cette Fonction vérifie la condition "j", et vaut 0 si la condition est fausse, ou 1 si la condition est vérifiée
        if (verif==0) j=TOTAL_CONDITIONS_EVENTS_COLONIE; // Si une condition n'est pas vérifiée, on annule l'événement
      }
    }
    if (verif==1) // Si l'événement peut être tiré, alors on le classe dans ce tableau par son index (i)
    {
      c[count]=i;
      count++;
    }
  }
 
  for (int i=0 ; i<t ; i++) // On nettoie le tableau des rangs inutiles
  {
    if (c[i]==-1)
    {
      c=TableauRetireInt(c, t, i);
      t--;
      i--;
    }
  }
 
  // On trie les events dans les catégories de probabilités
  int c0[], c1[], c2[], c3[], c4[];
  c0=new int [TOTAL_EVENTS_COLONIE];
  c1=new int [TOTAL_EVENTS_COLONIE];
  c2=new int [TOTAL_EVENTS_COLONIE];
  c3=new int [TOTAL_EVENTS_COLONIE];
  c4=new int [TOTAL_EVENTS_COLONIE];
  int count0, count1, count2, count3, count4;
 
  for (int i=0 ; i<count ; i++)
  {
    for (int j=0 ; j<5 ; j++)
    {
      if (eventscolo[c[i]].proba[j]==true) // Les events peuvent avoir plusieurs probabilités, et il y a 5 groupes. si ça vaut true, c'est que l'event appartient à ce groupe
      {
        if (j==0)
        {
          c0[count0]=i;
          count0++;
        }
        else if (j==1)
        {
          c1[count1]=i;
          count1++;
        }
        else if (j==2)
        {
          c2[count2]=i;
          count2++;
        }
        else if (j==3)
        {
          c3[count3]=i;
          count3++;
        }
        else if (j==4)
        {
          c4[count4]=i;
          count4++;
        }
      }
    }
  }
 
  int p0=45; // Proba des groupes 1 à 5
  int p1=75;
  int p2=90;
  int p3=100;
  int p4=100+insalubrite; // insalubrite est une variable gérée ailleurs, inutile dans notre problème
  int r=Random(99+insalubrite);
  if (r<p0) // Selon le tirage, on pioche dans tel ou tel groupe
  {
    r=Random(count0-1);
    tirageeventcolonie=c0[r];
  }
  else if (r>=p0 && r<p1)
  {
    r=Random(count1-1);
    tirageeventcolonie=c1[r];
  }
  else if (r>=p1 && r<p2)
  {
    r=Random(count2-1);
    tirageeventcolonie=c2[r];
  }
  else if (r>=p2 && r<p3)
  {
    r=Random(count3-1);
    tirageeventcolonie=c3[r];
  }
  else if (r>=p3 && r<p4)
  {
    r=Random(count4-1);
    tirageeventcolonie=c4[r];
  }
 
  eventscolo[tirageeventcolonie].TirageEvenementColonie();// On lance l'événement

Voici la fonction qui vérifie les conditions :

Code:
function Conditions_Eventscolo(int ID)
{
  int count=0;
  int count2=0;
  int verif=0;
  //1 survivants en Room 9
  if (ID==1)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==9) verif=1;
    }
  }
//2 survivants en Room 6
  if (ID==2)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6) verif=1;
    }
  }
//3 survivants masculins en Room 6
  if (ID==3)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].homme==true && personnage[i].Mort==false) verif=1;
    }
  }
//4 compagnons en room 6
  if (ID==4)
  {
    for (int i=TOTAL_SURVIVANTS ; i<TOTAL_COMPAGNONS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Mort==false) verif=1;
    }
  }
//5 survivants en room 8
  if (ID==5)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==cool verif=1;
    }
  }
//6 paramcoloadv=1
  if (ID==6)
  {
    if (paramcoloadv==1) verif=1;
  }
//7 survivants en room 8 > 1
  if (ID==7)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==cool count++;
    }
    if (count>1) verif=1;
  }
//8 dogs en Room 6
  if (ID==cool
  {
    for (int i=TOTAL_COMPAGNONS ; i<TOTAL_DOGS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Mort==false) verif=1;
    }
  }
//9 nourriture > 0
  if (ID==9)
  {
    if (nourriturecolonie>0) verif=1;
  }
//10 dogs en room 8
  if (ID==10)
  {
    for (int i=TOTAL_COMPAGNONS ; i<TOTAL_DOGS ; i++)
    {
      if (personnage[i].Acteur.Room==cool verif=1;
    }
  }
//11 dogs companion = 1
  if (ID==11)
  {
    if (dogscompanion==1) verif=1;
  }
//12 carburant > 0
  if (ID==12)
  {
    if (carburantcolonie>0) verif=1;
  }
//13 generateur = 1 et generateurbonus = true
  if (ID==13)
  {
    if (generateur==1 && generateurbonus==true) verif=1;
  }
//14  vehicule en room 10
  if (ID==14)
  {
    for (int i=0 ; i<TOTAL_VOITURES ; i++)
    {
      if (vehicule[i].Vehic.Room==10) verif=1;
    }
  }
//15 zombivant en room 6
  if (ID==15)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Zombivant==true && personnage[i].Mort==false) verif=1;
    }
  }
//16 confort > 0
  if (ID==16)
  {
    if (confortcolonie>0) verif=1;
  }
//17 survivants malades en room 6
  if (ID==17)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Mort==false && personnage[i].Maladie>0) verif=1;
    }
  }
//18 helico en room 4
  if (ID==18)
  {
    if (cHelico.Room==4) verif=1;
  }
//19 au moins 1 score de quete > 0
  if (ID==19)
  {
    if ((quetecarte>0 && quetecarte<15) || (queteexplosion>0 && queteexplosion<15) || (quetehopital>0 && quetehopital<15) || (queteprison>0 && queteprison<15)) verif=1;
  }
//20 survivant infecté en room 6
  if (ID==20)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Mort==false && personnage[i].Infecte==1) verif=1;
    }
  }
//21 batteries > 0
  if (ID==21)
  {
    if (batteriescolonie>0) verif=1;
  }
//22 stationradio = 1 et energieradio > 0
  if (ID==22)
  {
    if (stationradio==1 && energieradio>0) verif=1;
  }
//23 nourr >=4 et (batterie>=2 OU (batterie>=1 et generateurbonus=true))
  if (ID==23)
  {
    if (nourriturecolonie>=4 && (batteriescolonie>=2 || (batteriescolonie>=1 && generateurbonus==true))) verif=1;
  }
//24 medicaments > 0
  if (ID==24)
  {
    if (medicamentscolonie>0) verif=1;
  }
//25 homme > 0 et femme > 0 en room 6 (+ spécificités de chaque event !)
  if (ID==25)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Mort==false)
      {
        if (personnage[i].homme==true) count++;
        if (personnage[i].femme==true) count2++;
      }
    }
    if (count>0 && count2>0) verif=1;
  }
//26 survivants en room 6 > 2
  if (ID==26)
  {
    for (int i=1 ; i<TOTAL_SURVIVANTS ; i++)
    {
      if (personnage[i].Acteur.Room==6 && personnage[i].Mort==false) count++;
    }
    if (count>2) verif=1;
  }
 
  //27 parammoral==1 && moral<0
  if (ID==27)
  {
    if (parammoral==0) verif=1;
    else if (parammoral==1 && moral<0) verif=1;
  }
 
  //28 parammoral==1 && moral>0
  if (ID==28)
  {
    if (parammoral==0) verif=1;
    else if (parammoral==1 && moral>0) verif=1;
  }
 
  //29 paramactionscolodiverses==0
  if (ID==29)
  {
    if (paramactionscolodiverses==0) verif=1;
  }
 
  return verif; // Si la condition a été validée, la fonction retourne 1, sinon ele retourne 0
}

Le problème, c'est que en testant avec des "Display" qui me disent ce qu'il se passe, je tire des événements dont les conditions ne sont PAS vérifiées, mais pourtant je les tire quand même ! Pourtant le jeu SAIT que les conditions ne sont pas vérifiées. Du coup je m'y perds... Je ne sais pas d'où peut venir l'erreur. De 'utilisation de return ? Ou d'un méli-mélo de script de ma part ? Si vous y voyez quelque chose...
Revenir en haut Aller en bas
 
Deux petites questions
Revenir en haut 
Page 1 sur 1

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: