Pagina 1 di 1

switch

Inviato: 21/03/2014, 10:44
da broli
ragazzi avrei bisogno di capire se è possibile fare qualcosa del genere con il costrutto switch.
Se l'espressione mi da 1 ma la variabile test mi da false si può passare al case 2?

Codice: Seleziona tutto

switch (EXPRESSION)
{
    case 1: if test = true {STATEMENT;} else case 2: break;
    case 2: STATEMENT; break;
}

Re: switch

Inviato: 21/03/2014, 10:52
da Homunculus
Puoi farlo, non devi mettere il break dopo il case in quel caso.

EDIT: ricordati però di mettere il break all'interno dell'if in caso positivo

Re: switch

Inviato: 21/03/2014, 12:17
da broli
boh non riesco a farlo funzionare.
ho fatto molti tentativi ma non riesco proprio a capire dove sbaglio.

Codice: Seleziona tutto

if keyboard_check_pressed(vk_enter){
    switch (espressione)
    {
        case 1:  with obj{ if image_index == 1{ show_message('uno');break;} else case 2:} 
        case 2:  show_message('due'); break;
    }
}


Re: switch

Inviato: 21/03/2014, 12:55
da Homunculus
Ok qui il problema, oltre ad essere di sintassi, sta anche nel fatto che stai usando with. Prima di tutto non so se il break funziona se usato all'interno del with, e secondariamente anche se funzionasse non sarebbe corretto lo stesso, perché rischi di avere u break per ogni istanza di obj, quindi é sbagliato in ogni caso e devi trovare una soluzione alternativa usando magari degli if al posto dello switch.

Se però hai sempre e solo una istanza di obj, puoi fare così:

Codice: Seleziona tutto

if keyboard_check_pressed(vk_enter){
    switch (espressione)
    {
        case 1:  if(obj.image_index == 1) { show_message('uno'); break;}
        case 2:  show_message('due'); break;
    }
}
Questo é sintatticamente corretto, ma é impossibile comunque che venga eseguito sia il caso 1 che il caso 2, perché espressione o ha un valore o l'altro...

Insomma, non so cosa vuoi fare, ma stai facendo un sacco di confusione. Prova a descrivere a parole prima di tutto cosa vuoi che succeda.

Re: switch

Inviato: 21/03/2014, 13:59
da broli
chiedo scusa non sono stato chiaro.
riscrivo il codice in forma più completa.
quello che vorrei fare è che se valore = 1 ma se if da false il codice passa a case 2.
lo so che ci sono modo alternativi per ottenere lo stesso risultato senza utilizzare lo switch.
Ma vorrei capire se si può fare con lo switch questa cosa, e se si, qual'è la sintassi giusta.

Codice: Seleziona tutto

randomize()
valore = choose(1,2,3,4,5,6)
if keyboard_check_pressed(vk_enter){
    switch (valore)
    {
        case 1:  if image_index == 1 { show_message('uno');break;} else case 2:} 
        case 2:  show_message('due'); break;
        case 3:  show_message('tre'); break;
        case 4:  show_message('quattro'); break;
        case 5:  show_message('cinque'); break;
        case 6:  show_message('sei'); break;
    }
}

Re: switch

Inviato: 21/03/2014, 15:08
da Homunculus
Il punto é che secondo me non hai capito come funziona lo switch. Fintanto che non metti break, lo switch passa in rassegna tutti i valori. Il problema é che come fa valore ad ad essere uguale a 1 e a qualcos'altro contemporaneamente? é impossibile.

Supponiamo che valore = 1: entri nel primo case, l'if restituisce false e quindi non c'é nessun break. Non essendoci il break, lo switch passa al case 2 (come vuoi tu) ma valore é sempre uguale a 1, quindi non entra ne in quel case, ne in nessun altro.

Non capisco assolutamente cosa ti aspetti, se valore = 1 e l'if é false, cosa vuoi che succeda? Che esca un messaggio con scritto 2?

Re: switch

Inviato: 21/03/2014, 15:24
da broli
semplicemente credevo che si potesse ottimizzare il codice mettendo un else case 2.cioè che da valore = 1 si passasse a valore = 2
invece ora ho capito che bisogna per forza fare così:

Codice: Seleziona tutto

randomize()
valore = choose(1,2)
if keyboard_check_pressed(vk_enter)
{
    switch (valore)
    {
        case 1:  if image_index == 1 { show_message('uno'); } else  { show_message('due'); } break;
        case 2:  show_message('due'); break;
    }
}

Re: switch

Inviato: 21/03/2014, 18:04
da guidox
broli ha scritto:semplicemente credevo che si potesse ottimizzare il codice mettendo un else case 2.cioè che da valore = 1 si passasse a valore = 2
invece ora ho capito che bisogna per forza fare così:

Codice: Seleziona tutto

randomize()
valore = choose(1,2)
if keyboard_check_pressed(vk_enter)
{
    switch (valore)
    {
        case 1:  if image_index == 1 { show_message('uno'); } else  { show_message('due'); } break;
        case 2:  show_message('due'); break;
    }
}
Vediamo se ho capito...

Codice: Seleziona tutto

switch (valore)
    {
        case 1:  if (image_index == 1) { show_message('uno');break;}else{valore=2;}
        case 2:  show_message('due'); break;
    }
?

Re: switch

Inviato: 21/03/2014, 18:19
da broli

Codice: Seleziona tutto

switch (valore)
    {
        case 1:  if (image_index == 1) { show_message('uno');break;}else{valore=2;}
        case 2:  show_message('due'); break;
    }
si va benissimo.era solo una mia curiosità.
vi ringrazio entrambi.
mi piacerebbe tanto sapere dove si può approfondire il linguaggio gml. il manuale non mi basta più. :manual:

Re: switch

Inviato: 21/03/2014, 18:22
da BotaniciTraffici
Se ho capito bene vuoi randomizzare un image index e, qualora questo fosse già uguale all'attuale image index, image index aumenta di uno. Ho capito bene?

Se sì puoi fare così che risolve tutti i problemi:

Codice: Seleziona tutto

if keyboard_check_pressed(vk_enter)
{
   var stringa="numero";
   valore = choose(1,2,3,4,5,6);
   if (valore==image_index)
   {
      valore+=1;
      if (valore==7) { valore=1; }
   }
   image_index=valore;
   switch (valore)
   {
      case 1: stringa="uno"; break;
      case 2: stringa="due"; break;
      case 3: stringa="tre"; break;
      case 4: stringa="banana"; break;
      case 5: stringa="cinque"; break;
      case 6: stringa="sei"; break;
   }
   show_message(stringa);
}

Re: switch

Inviato: 21/03/2014, 20:38
da broli
Se ho capito bene vuoi randomizzare un image index e, qualora questo fosse già uguale all'attuale image index, image index aumenta di uno. Ho capito bene?
:NO:

sto solo studiando il costrutto switch. era solo un esempio quel codice che ho scritto.
grazie ancora :cappa: