combinazione cassaforte
- topoghigio
- Newbie
- Messaggi: 19
- Iscritto il: 25/06/2015, 8:47
- Uso: GM:Studio 2
- Contatta:
combinazione cassaforte
Ciao a tutti, rieccomi con un nuovo grattacapo .
Ho una valigetta 24 ore da aprire, però è chiusa con una combinazione di 3 numeri.La combinazione per aprirla facciamo finta che sia 768.
Come posso dargli il comando che deve aprirsi solo quando tutt'e tre i numeri sono nella posizione giusta? Non ne vengo fuori,potete aiutarmi?
Ho una valigetta 24 ore da aprire, però è chiusa con una combinazione di 3 numeri.La combinazione per aprirla facciamo finta che sia 768.
Come posso dargli il comando che deve aprirsi solo quando tutt'e tre i numeri sono nella posizione giusta? Non ne vengo fuori,potete aiutarmi?
Re: combinazione cassaforte
Semplicemente ti tieni 3 variabili per indicare i 3 numeri della combinazione e fai un IF per vedere se la combinazione è correttatopoghigio ha scritto:Ciao a tutti, rieccomi con un nuovo grattacapo .
Ho una valigetta 24 ore da aprire, però è chiusa con una combinazione di 3 numeri.La combinazione per aprirla facciamo finta che sia 768.
Come posso dargli il comando che deve aprirsi solo quando tutt'e tre i numeri sono nella posizione giusta? Non ne vengo fuori,potete aiutarmi?
Codice: Seleziona tutto
if ( numero1 == 7 && numero2 == 6 && numero3 == 8)
{
//Apriti
}
- CaptainOlon
- Membro attivo
- Messaggi: 441
- Iscritto il: 30/07/2011, 14:56
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Salerno
- Contatta:
- pacmino
- GMI Guru
- Messaggi: 2569
- Iscritto il: 03/06/2009, 16:38
- Specialità: Scazzato cronico
- Uso: GM:Studio 2
- Località: Seconda stella a destra questo è il cammino e poi dritto, fino al mattino...
- Contatta:
Re: combinazione cassaforte
dipende da come fai selezionare la combinazione, deve essere digitata, devi clikkare su degli oggetti che rappresentano i numeri, componi la combinazione tramite freccette che cambiano i numeri da 0 a 9?
- topoghigio
- Newbie
- Messaggi: 19
- Iscritto il: 25/06/2015, 8:47
- Uso: GM:Studio 2
- Contatta:
Re: combinazione cassaforte
Scusate la lentezza nello rispondere. Diciamo che ho usato un metodo un pò contorto, cerco di spiegare quel che ho fatto:ho creato oggetti numeri dallo 0 al 9.quando clicco sullo 0 creo oggetto 1 e distruggo 0 e così via.. naturalmente in 3 file perché la combinazione è di 3 numeri. Facendo finta che la combinazione sia 768, nella fila del 6(quindi la prima fila) ho detto: quando clicchi nell'ogg. 5 crea ogg. 6, distruggi ogg.5 e crea ogg.x invisibile ma solido(che però si distrugge se clicco nell'ogg.6). Poi ho fatto la stessa cosa con la seconda fila dove si crea l 'ogg.y quando arrivo nel6. L'ogg.x e y quando collidono creano l'ogg.z che a sua volta dovrà collidere con l'ogg.q creato dall'8. Si,è molto contorto ma funziona Io col codice sono proprio negata. Nella teoria ho capito cosa sono le variabili ma nella pratica non le so applicare
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: combinazione cassaforte
E' un metodo TROPPO e dico TROPPO contorto. L'algoritmo che vuoi creare è semplicissimo... Cercherò di crearne uno io tutto in codice:topoghigio ha scritto:Scusate la lentezza nello rispondere. Diciamo che ho usato un metodo un pò contorto, cerco di spiegare quel che ho fatto:ho creato oggetti numeri dallo 0 al 9.quando clicco sullo 0 creo oggetto 1 e distruggo 0 e così via.. naturalmente in 3 file perché la combinazione è di 3 numeri. Facendo finta che la combinazione sia 768, nella fila del 6(quindi la prima fila) ho detto: quando clicchi nell'ogg. 5 crea ogg. 6, distruggi ogg.5 e crea ogg.x invisibile ma solido(che però si distrugge se clicco nell'ogg.6). Poi ho fatto la stessa cosa con la seconda fila dove si crea l 'ogg.y quando arrivo nel6. L'ogg.x e y quando collidono creano l'ogg.z che a sua volta dovrà collidere con l'ogg.q creato dall'8. Si,è molto contorto ma funziona Io col codice sono proprio negata. Nella teoria ho capito cosa sono le variabili ma nella pratica non le so applicare
Abbiamo un obj_Cassaforte che ha la variabile booleana open. Open = true -> la cassaforte è aperta, open = false -> la cassaforte è chiusa.
In create event di obj_Cassaforte
Codice: Seleziona tutto
open = false; //La cassaforte non è ancora aperta, quindi open è uguale a false quando viene creata
//Creiamo una combinazione randomica e ce la piazziamo in un array
combination[2] = 0; //Prima creiamo l'array
for (var i=0; i<3; i++)
combination[i] = irandom(10); //In questo modo mettiamo all'interno dell'array dei valori randomici
In create event
Codice: Seleziona tutto
numero = 0; //E' il numero del bottone
Codice: Seleziona tutto
if (numero<10) numero++ else numero=0; //Cicliamo ogni volta che clicchiamo sopra...
Quando creiamo la cassaforte, dobbiamo aggiungere il codice di creazione di 3 bottoni, ad y uguali ma x diverse
Sempre in create di obj_Cassaforte
Codice: Seleziona tutto
button1 = instance_create(x-32,y,obj_Bottone); //Il primo bottone
button2 = instance_create(x,y,obj_Bottone); //Il secondo bottone, centrale
button3 = instance_create(x+32,y,obj_Bottone); //Il terzo bottone
Continuiamo, in Step event di obj_Cassaforte
Codice: Seleziona tutto
///Controllo per vedere se ho azzeccato la combinazione
if (button1.numero==combination[0]&&button2.numero==combination[1]&&button3.numero==combination[2]) open = true; //Apriamo la cassaforte
else open = false; //Altrimenti la cassaforte resta chiusa
- topoghigio
- Newbie
- Messaggi: 19
- Iscritto il: 25/06/2015, 8:47
- Uso: GM:Studio 2
- Contatta:
Re: combinazione cassaforte
Scusami Wolfrost, in questi giorni ho letto ogni post dove si parlava di arrey e variabili ecc.. ho cercato guide, tutorial ecc.. e a livello teorico li ho capiti, ma a livello pratico no!! Quando scrivi :"//Creiamo una combinazione randomica e ce la piazziamo in un array" io già mi perdo...
- Annoyed grunt
- Membro d'elite
- Messaggi: 1422
- Iscritto il: 10/04/2009, 16:21
- Uso: GM:Studio 2
- Contatta:
Re: combinazione cassaforte
Un array è una lista di variabili. La cosa bella di un array è vi ci si può accedere dinamicamente. Mi spiego.
Se tu hai cinque variabili numerate lista_* (lista_1, lista-2, etc etc) l'unico modo per accedervi è questo:
Praticamente devi scrivere ogni variabile, e puoi accedere solo alle variabili che hai scritto tu, quindi se tu non scrivi lista_3 = 'cicciobello', lista_3 non sarà mai uguale a 'cicciobello'.
Al contrario, puoi accedere dinamicamente a qualsiasi indice di un array.
Facciamo un esempio estremo: accedi ad un indice casuale, e mostra il suo valore.
Usando le variabili singole, sarebbe una cosa del genere:
Finché le variabili che abbiamo sono solo 5, va pure bene. E' brutto ma funziona. Ma se per esempio abbiamo 100 variabili? O 1000? Sarebbe un lavoro immane e, in definitiva, stupido.
Usando gli array:
E abbiamo fatto. Ovviamente, come con le variabili normali, è necessario dare un valore ai vari indici prima di poterli recuperare.
Se tu hai cinque variabili numerate lista_* (lista_1, lista-2, etc etc) l'unico modo per accedervi è questo:
Codice: Seleziona tutto
lista_1 = 2;
lista_2 = lista_1;
lista_3 = lista_1 * lista_2;
Al contrario, puoi accedere dinamicamente a qualsiasi indice di un array.
Facciamo un esempio estremo: accedi ad un indice casuale, e mostra il suo valore.
Usando le variabili singole, sarebbe una cosa del genere:
Codice: Seleziona tutto
var i = irandom_range(1,5);
switch(i)
{
case 1: show_message(list_1); break;
case 2: show_message(list_2); break;
case 3: show_message(list_3); break;
case 4: show_message(list_4); break;
case 5: show_message(list_5); break;
}
Usando gli array:
Codice: Seleziona tutto
var i = irandom(1,5);
show_message(list[i]);
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: combinazione cassaforte
Analizziamo passo passo il mio code:topoghigio ha scritto:Scusami Wolfrost, in questi giorni ho letto ogni post dove si parlava di arrey e variabili ecc.. ho cercato guide, tutorial ecc.. e a livello teorico li ho capiti, ma a livello pratico no!! Quando scrivi :"//Creiamo una combinazione randomica e ce la piazziamo in un array" io già mi perdo...
Create Event
Nel Create Event vengono di solito inizializzate le variabili dell'object in modo da essere utilizzate in seguito in altri eventi dell' object. Ma cosa sono le variabili?
In GM possiamo vederle come dei contenitori di valori: puoi metterci proprio di tutto dentro, da numeri a stringhe
Nel Create Event di obj_Cassaforte, l'object che rappresenta la cassaforte, abbiamo dichiarato una variabile open, che è booleana: che significa? Che può assumere solo i valori 0 (false) e 1 (true)
Questa variabile ci serve molto perchè ci permette di capire se la cassaforte è aperta (open = true) o chiusa (open = false);
Poi procedo all'uso di un array: ma a che mi serve? Vediamo questo array dal punto di vista grafico.
Il numeretto che vedi sopra ogni cella è il suo indice. Per accedere, ad esempio, al valore della cella 0, ci basterà scrivere combinazione[0], e così via per tutti gli indici dell' array. Ovviamente all'interno di ogni cella c'è un valore, nel mio caso ho usato l'array combinazione[] (che possiede 3 celle) per conservare i numeri della combinazione della cassaforte
Con la funzione irandom(10); mi assicuro di generare all'interno di queste celle valori casuali che vanno da 0 a 9, valori che tramite un ciclo for vengono inseriti nell'array sfruttando il ciclatore (i) del for. E' una tecnica comune inizializzare gli array in questo modo. Preferisco non cadere nel puro tecnico
Comunque sia una volta creato questo array ce lo abbiamo pronto all'uso: conserverà la combinazione della cassaforte (che sarà sempre casuale)
A questo punto procedo alla creazione del codice di obj_Bottone, l'object che ci permetterà di inserire i numeri della combinazione del gioco!
Il suo codice è parecchio basilare: inizializziamo una variabile che si chiama numero ed ogni volta che clicchiamo su questo bottone facciamo aumentare di 1 il valore di numero (numero++): attenzione però! Se il numero è 9 esso diventerà 10 e noi non vogliamo ciò, quindi tramite un if quando arriverà a 10 lo faremo ritornare a 0 (in questo modo cicleremo costantemente).
A questo punto però, abbiamo il nostro bottone, ma la cassaforte non saprà mai quale numero deve controllare: per questo creiamo le istanze di obj_Bottone tramite il Create Event di obj_Cassaforte, perchè a noi occorrono 3 ID
Ogni istanza ha un suo univoco id che ci permette di accedere alle sue personali variabili. In questo caso, ci occorre accedere alla personale variabile numero di ogni istanza, per fare questo ci basterà fare id.numero. Ma come recuperare questo ID?
La funzione instance_create(x,y,obj) permette di creare un istanza nella room, ma non solo! Essa ritornerà anche l'id di questa istanza, quindi ci basterà fare
Codice: Seleziona tutto
bottone1 = instance_create(bla bla bla)
Nello Step Event (quindi l'evento accade ogni singolo frame del gioco), andremo a controllare se la combinazione è giusta, usando appunto gli ID che abbiamo recuperato. Fatti i dovuti controlli, settiamo open a true (se abbiamo azzeccato la combinazione) o a false se non ce l'abbiamo fatta.
Questo sistema è parecchio basilare e ci permette di ottenere il risultato che volevi in davvero pochissime righe di codice! E non solo! Tramite la variabile open potrai personalizzare al massimo le azioni conseguenti
Spero di essere stato chiaro, personalmente sono una pippa a spiegare
- topoghigio
- Newbie
- Messaggi: 19
- Iscritto il: 25/06/2015, 8:47
- Uso: GM:Studio 2
- Contatta:
Re: combinazione cassaforte
Ma che "pippa", sei stato chiarissimo e grazie per aver perso tempo con me (grazie a tutti). Purtroppo ho ancora qualche problema, infatti non mi appaiono i numeri dentro i bottoni e non capisco perché...sicuramente mi sto perdendo dentro un bicchier d'acqua
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: combinazione cassaforte
Certo non ti appaiono perchè non li disegni Game Maker non prende nulla per scontato: andiamo a vedere come si disegnano robe a schermo!topoghigio ha scritto:Ma che "pippa", sei stato chiarissimo e grazie per aver perso tempo con me (grazie a tutti). Purtroppo ho ancora qualche problema, infatti non mi appaiono i numeri dentro i bottoni e non capisco perché...sicuramente mi sto perdendo dentro un bicchier d'acqua
Per farlo ci serviamo del draw event: un evento che funziona proprio come lo step event ma è fatto apposta per disegnare cose.
E' infatti in questo evento che usiamo:
Codice: Seleziona tutto
draw_text(x,y,string(numero));
Purtroppo la funzione draw_text (che serve per disegnare testo a delle specifiche coordinate) accetta come parametro da scrivere solo stringhe, per questo usiamo la funzione string(int) per convertire il numero a stringa, così ad esempio 1 diventerà "1" e sarà accettato da draw_text
Ci sono un sacco di funzioni draw ma non è il luogo ne' il momento di spiegarle.
Se vuoi entrare nel tecnico e mastichi l'inglese: *click*
Di più sul draw text: *click*
- guidox
- GMI Honor
- Messaggi: 5765
- Iscritto il: 26/07/2009, 17:23
- Specialità: programmazione
- Uso: GM:Studio 1.4 Android
- Località: Marche
- Contatta:
Re: combinazione cassaforte
Credo che sia tutto giusto, ho notato solo questo nel post di Wolfrost
In game maker per inizializzare una variabile basta assegnargli un valore, quindi teoricamente questo pezzo di codice è inutile:
Infatti in game maker bisogna assegnare ogni posizione dell'array. In questo caso:
In game maker per inizializzare una variabile basta assegnargli un valore, quindi teoricamente questo pezzo di codice è inutile:
Ed anzi, se volevi assegnare il valore 0 a combination[0],combination[1] e combination[2], è anche sbagliato!Wolfrost ha scritto:Codice: Seleziona tutto
combination[2] = 0; //Prima creiamo l'array
Infatti in game maker bisogna assegnare ogni posizione dell'array. In questo caso:
Codice: Seleziona tutto
for (var i=0; i<3; i++) combination[i] = 0;
- topoghigio
- Newbie
- Messaggi: 19
- Iscritto il: 25/06/2015, 8:47
- Uso: GM:Studio 2
- Contatta:
Re: combinazione cassaforte
Siiii,grazie mille sono felicissima!!Ora i numeri ci sono e girano,però c'è ancora una cosa ( solo una, certo come no! ) che non capisco. Come devo fare con open=true o false? devo crearmi 2 obj_cassaforte, uno con l'immagine della cassaforte aperta e una chiusa?
- CaptainOlon
- Membro attivo
- Messaggi: 441
- Iscritto il: 30/07/2011, 14:56
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Salerno
- Contatta:
Re: combinazione cassaforte
No, basta cambiare lo sprite! Aggiungi questo nello step event:
Codice: Seleziona tutto
if(open) sprite_index = SPRITE_CASSAFORTE_APERTA;
else sprite_index = SPRITE_CASSAFORTE_CHIUSA;
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: combinazione cassaforte
CaptainOlon ha scritto:No, basta cambiare lo sprite! Aggiungi questo nello step event:Codice: Seleziona tutto
if(open) sprite_index = SPRITE_CASSAFORTE_APERTA; else sprite_index = SPRITE_CASSAFORTE_CHIUSA;
Re: combinazione cassaforte
E' giusto come ha fatto wolfrost, per il modo in cui GM gestisce gli array.guidox ha scritto:Credo che sia tutto giusto, ho notato solo questo nel post di Wolfrost
In game maker per inizializzare una variabile basta assegnargli un valore, quindi teoricamente questo pezzo di codice è inutile:Ed anzi, se volevi assegnare il valore 0 a combination[0],combination[1] e combination[2], è anche sbagliato!Wolfrost ha scritto:Codice: Seleziona tutto
combination[2] = 0; //Prima creiamo l'array
Infatti in game maker bisogna assegnare ogni posizione dell'array. In questo caso:Codice: Seleziona tutto
for (var i=0; i<3; i++) combination[i] = 0;
Prima definisci il valore alla massima grandezza (per evitare il resize del buffer a ogni iterazione) e gamemaker creerà automaticamente tutto il buffer
Poi inserisci i valori che vuoi.
- topoghigio
- Newbie
- Messaggi: 19
- Iscritto il: 25/06/2015, 8:47
- Uso: GM:Studio 2
- Contatta:
Re: combinazione cassaforte
Sisisi, è proprio come lo volevo io! Grazie a tutti, mi avete aiutato tantissimo, grazie per la pazienza. Grazie Wolf!
- Wolfrost
- Membro super
- Messaggi: 692
- Iscritto il: 03/08/2014, 13:08
- Specialità: Programmazione
- Uso: GM:Studio 1.4 Pro
- Località: Una galassia lontana lontana...
- Contatta:
Re: combinazione cassaforte
Esattamente TizzioTizzio ha scritto: E' giusto come ha fatto wolfrost, per il modo in cui GM gestisce gli array.
Prima definisci il valore alla massima grandezza (per evitare il resize del buffer a ogni iterazione) e gamemaker creerà automaticamente tutto il buffer
Poi inserisci i valori che vuoi.
Prego di niente Semmai avessi bisogno di qualcos'altro non esitare a postare e soprattutto non esitare a codare! E' il passo avanti che ti serve per iniziare a fare dei giochi degni di questo nome!topoghigio ha scritto:Sisisi, è proprio come lo volevo io! Grazie a tutti, mi avete aiutato tantissimo, grazie per la pazienza. Grazie Wolf!
- guidox
- GMI Honor
- Messaggi: 5765
- Iscritto il: 26/07/2009, 17:23
- Specialità: programmazione
- Uso: GM:Studio 1.4 Android
- Località: Marche
- Contatta:
Re: combinazione cassaforte
Scusa Wolfrost non avevo capito...Tizzio ha scritto:E' giusto come ha fatto wolfrost, per il modo in cui GM gestisce gli array.guidox ha scritto:Credo che sia tutto giusto, ho notato solo questo nel post di Wolfrost
In game maker per inizializzare una variabile basta assegnargli un valore, quindi teoricamente questo pezzo di codice è inutile:Ed anzi, se volevi assegnare il valore 0 a combination[0],combination[1] e combination[2], è anche sbagliato!Wolfrost ha scritto:Codice: Seleziona tutto
combination[2] = 0; //Prima creiamo l'array
Infatti in game maker bisogna assegnare ogni posizione dell'array. In questo caso:Codice: Seleziona tutto
for (var i=0; i<3; i++) combination[i] = 0;
Prima definisci il valore alla massima grandezza (per evitare il resize del buffer a ogni iterazione) e gamemaker creerà automaticamente tutto il buffer
Poi inserisci i valori che vuoi.
Effettivamente ho sempre definito gli array a partire dall'indice 0 quando invece sarebbe meglio definirli a partire dall'ultimo valore!
Chi c’è in linea
Visitano il forum: Nessuno e 39 ospiti