switch

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
broli
Membro
Messaggi: 229
Iscritto il: 11/10/2013, 11:42
Specialità: cheater
Uso: GM:Studio 1.4 Pro
Contatta:

switch

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

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: switch

Messaggio 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

Avatar utente
broli
Membro
Messaggi: 229
Iscritto il: 11/10/2013, 11:42
Specialità: cheater
Uso: GM:Studio 1.4 Pro
Contatta:

Re: switch

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


Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: switch

Messaggio 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.

Avatar utente
broli
Membro
Messaggi: 229
Iscritto il: 11/10/2013, 11:42
Specialità: cheater
Uso: GM:Studio 1.4 Pro
Contatta:

Re: switch

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

Avatar utente
Homunculus
Admin
Messaggi: 6840
Iscritto il: 25/11/2007, 20:36
Contatta:

Re: switch

Messaggio 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?

Avatar utente
broli
Membro
Messaggi: 229
Iscritto il: 11/10/2013, 11:42
Specialità: cheater
Uso: GM:Studio 1.4 Pro
Contatta:

Re: switch

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

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

Re: switch

Messaggio 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;
    }
?
Immagine

Immagine

Avatar utente
broli
Membro
Messaggi: 229
Iscritto il: 11/10/2013, 11:42
Specialità: cheater
Uso: GM:Studio 1.4 Pro
Contatta:

Re: switch

Messaggio 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:

BotaniciTraffici
Membro attivo
Messaggi: 348
Iscritto il: 31/01/2014, 12:38
Specialità: Programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: switch

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

Avatar utente
broli
Membro
Messaggi: 229
Iscritto il: 11/10/2013, 11:42
Specialità: cheater
Uso: GM:Studio 1.4 Pro
Contatta:

Re: switch

Messaggio 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:

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 36 ospiti