CAMPO MINATO [exe+source+html5]

Tutorial, videotutorials ed esempi creati da noi
Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

CAMPO MINATO [exe+source+html5]

Messaggio da gameplay_extreme »

CAMPO MINATO [exe+source+html5]
Immagine
Salute a voi :cappa:

non ho idea se qualcuno l'abbia già fatto comunque oggi vi presento un giochino che ho programmato al volo (penso possa essere utile, almeno si spera, a chi si avvicina a GM). Per farlo girare basta la lite/standard.

Il gioco (CAMPO MINATO) credo lo conosciate tutti

Screeenshots:
Spoiler
Video:
Spoiler
Download e info:
Spoiler
ecco il link:
http://www.giochi3.altervista.org/cm.htm

difetti conosciuti:
- ci sono solo le funzioni di base...
- la grafica è tutta da rivedere
- FINE non ho notato niente altro di anomalo

dettagli tecnici:
se volete sapre qualcosa chiedete (cosa volete sapere di preciso ?).
codice sia in download che qui:
codice poco commentato per chi ama il brivido ( :lol: )
Spoiler
Information about object: oInvis

Codice: Seleziona tutto

Sprite: <no sprite>
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Create Event:
execute code:
// personalizzazioni text box
message_alpha(0.8)
message_text_font("arial", 15, c_white, 0)
message_button_font("arial",10,c_white, 1)

fine = false
scoperte = 0
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   cas[k,k2] = 0
   scoperta[k,k2] = false
  }
 
// posiziono le bombe
bombs = get_integer("Quante Bombe ?",30)
for (k3=0; k3 <= bombs-1; k3 += 1)
 {
   xpos = irandom_range(0,8)
   ypos = irandom_range(0,8)
   if (cas[xpos,ypos] == 1)
    {k3 -= 1}
   cas[xpos,ypos] = 1
 }
 
// calcolo totali
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   tot[k,k2] = 0
    if k+1 <= 8
   tot[k,k2] += cas[k+1,k2]
    if k+1 <= 8 && k2-1 >= 0
   tot[k,k2] += cas[k+1,k2-1]
    if k2-1 >= 0
   tot[k,k2] += cas[k,k2-1]
    if k-1 >= 0 && k2-1 >= 0
   tot[k,k2] += cas[k-1,k2-1]
    if k-1 >= 0
   tot[k,k2] += cas[k-1,k2]
    if k-1 >= 0 && k2+1 <= 8
   tot[k,k2] += cas[k-1,k2+1]
    if k2+1 <= 8
   tot[k,k2] += cas[k,k2+1]
    if k+1 <= 8 && k2+1 <= 8
   tot[k,k2] += cas[k+1,k2+1]
  }


Mouse Event for Glob Left Pressed:
execute code:
if (fine == false)
 {
  xsel = mouse_x div 32
  ysel = mouse_y div 32
  if (scoperta[xsel,ysel] == true)
   {exit}
  //show_message(string(xsel)+","+string(ysel))
  scoperta[xsel,ysel] = true

  if (cas[xsel,ysel] == 1)
   {
    fine = true
    cas[xsel,ysel] = 2
   }
  else
   {
    scoperte += 1
    if (scoperte == 9*9-bombs)
     {
      fine = true
      screen_redraw()
      show_message("Hai vinto!!")
     }
   }
 }


Mouse Event for Glob Right Pressed:
execute code:
if show_question("Vuoi iniziare una nuova partita ?")
 {game_restart()}


Draw Event:
execute code:
draw_set_font(font0)
draw_set_halign(fa_center)
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   if (scoperta[k,k2])
    {
     draw_sprite(sCasSco,cas[k,k2],k*32,k2*32)
     if (cas[k,k2] == 0)
      {draw_text(k*32+16,k2*32,string(tot[k,k2]))}
    }
   else
    {
     if (!fine)
      {draw_sprite(sCasCo,0,k*32,k2*32)}
      //{draw_sprite(sCasCo,cas[k,k2],k*32,k2*32)}
     else
      {draw_sprite(sCasCo,cas[k,k2],k*32,k2*32)}
    }
  }
codice commentato qui
Spoiler

Codice: Seleziona tutto

Information about object: oInvis

Sprite: <no sprite>
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Create Event:
execute code:
/*visto che avevo promesso di fare una SPIEGAZIONE DIRETTA A PRINCIPIANTI inizio subito:
---
stanze:
il gioco si svolge in una scacchierà a 9 x 9 = 81 caselle, ogni casella e grossa 32x32 pixel, quindi l'atezza / larghezza della stanza l'ho messa pari a 32 x 9 =288 pixel.
Ricordo che il gioco è ambientato in un'unica stanza che viene avviata appena il gioco parte

funzioni particolari:
Naturalmente non ho usato le views poichè la scacchiera ci sta tutta nello schermo e quindi non avrebbe senso usarle

oggetti:
il gioco è formato da UN UNICO oggetto che inizializza il gioco (diciamo "prepara" i valori di partenza), disegna la scacchiera, controlla le cliccate fatte con il mouse.
Naturalmente un'istanza dell'oggetto è poi stata inserita nella room (altrimenti la programmazione dell'oggetto rimarebbe disattivata e io avrei sprecato il mio tempo :mrgreen: )

sprite:
gli sprite non sono asscociati ad oggetti ma sono disegnati direttamente dove servono dal draw_event. Le 2 sprite sono sCaSco (sprite_casella_scoperta) e sCasCo (sprite_casella_coperta). La prima ha 2 sottoimmagini (casella coperta e casella coperta con bomba), la seconda ne ha 3 (casella scoperta, casella scoperta con bomba e casella scoperta con bomba e contorno rosso). Mi rendo conto che così su 2 piedi potrebbe non essere chiaro...comunque per adesso prendetela così...

varibili usate:
Codice:
fine    // indica se è finita o meno la partita
scoperte    // quante caselle vuote sono state scoperte dall'inizio della partita
k,k2,k3    // contatori dei cicli for
cas(array 2D)    // se 0 la casella è vuota, se 1 la casella è con bomba, se 2 la casella contiene bomba con contorno rosso (quest'ultima sarebbe la bomba fatale, quella che hai fatto esplodere se hai perso)
scoperta(array 2D)    // se la casella è scoperta o meno
tot (array 2D)    // quante bombe ci sono nelle caselle adiacenti
bombs    // quante bombe ci sono (lo decide il giocatore all'inzio della partita)
xpos, ypos   // variabili usate nel posizionamento delle bombe (contengono le coordinate di una casella a caso)
xsel, ysel    //coordinate della casella correntemente selezionata (calcolata a partite da mouse_x, mouse_y e la dimensione delle caselle)
*/


//ALL'AVVIO DEL GIOCO:

// personalizzazioni text box
// livello trasparenza (opaco = 1 completamente invisibile = 0)
message_alpha(0.8)
// testo messaggi (grafia: arial, dimensione: 15, colore: bianco, stile: normale)
message_text_font("arial", 15, c_white, 0)
// testo bottoni (grafia: arial, dimensione: 10, colore: bianco, stile: grassetto)
message_button_font("arial",10,c_white, 1)

//all'avio la partita ovviamente non è finita e...
fine = false
//...le caselle scoperte sono zero
scoperte = 0
// per ogni casella...
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   // ...la casella è vuota (non ha bombe)
   cas[k,k2] = 0
   // ...la casella è coperta
   scoperta[k,k2] = false
  }
 
// posiziono le bombe
// chiede al giocatore quante bombe devono essere nascoste nella scacchiera
bombs = get_integer("Quante Bombe ?",30)
// posiziona le bombe in caselle a caso
for (k3=0; k3 <= bombs-1; k3 += 1)
 {
   // sceglie una casella a caso
   xpos = irandom_range(0,8)
   ypos = irandom_range(0,8)
   // se nella casella (scelta a caso) c'era già una bomba...
   if (cas[xpos,ypos] == 1)
    // ...impedisce a k3 di incrementare
    {k3 -= 1}
   cas[xpos,ypos] = 1
 }
 
// calcolo totali
// qui per ogni casella viene calcolato quante bombe adiacenti ha
/* gli "if" sono stati messi perché atrimenti venivano richiamate nell'elaborazione 
degli array con indici non validi*/

// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   tot[k,k2] = 0
    if k+1 <= 8
   tot[k,k2] += cas[k+1,k2]
    if k+1 <= 8 && k2-1 >= 0
   tot[k,k2] += cas[k+1,k2-1]
    if k2-1 >= 0
   tot[k,k2] += cas[k,k2-1]
    if k-1 >= 0 && k2-1 >= 0
   tot[k,k2] += cas[k-1,k2-1]
    if k-1 >= 0
   tot[k,k2] += cas[k-1,k2]
    if k-1 >= 0 && k2+1 <= 8
   tot[k,k2] += cas[k-1,k2+1]
    if k2+1 <= 8
   tot[k,k2] += cas[k,k2+1]
    if k+1 <= 8 && k2+1 <= 8
   tot[k,k2] += cas[k+1,k2+1]
  }


Mouse Event for Glob Left Pressed:
execute code:
// QUANDO VIENE PREMUTO IL TASTO SINISTRO DEL MOUSE:

// se la partita non è finita
if (fine == false)
 {
  // calcola su quale casella è avvenuto il click
  xsel = mouse_x div 32
  ysel = mouse_y div 32
  // se la casella è già scoperta...
  if (scoperta[xsel,ysel] == true)
   // ...esci da questo evento 
   {exit}
  /*istruzione per provare se funziona il riconoscimento
    della casella su cui si è cliccato:
    show_message(string(xsel)+","+string(ysel))*/
  // scopre la casella selezionata
  scoperta[xsel,ysel] = true
  // se c'è una bomba...
  if (cas[xsel,ysel] == 1)
   {
    //...fine del gioco (cioè non si può più cliccare, non è che esce)
    fine = true
    //...nella casella appare la "bomba con contorno rosso"
    // come promemoria di quale è il punto in cui hai sbagliato
    /* nel draw_event c'è un controllo che causa la visualizzazione di tutte
      le bombe quando fine == true*/
    cas[xsel,ysel] = 2
   }
  // se la casella è vuota
  else
   {
    //tieni il conto di tutte le caselle scoperte fino ad ora
    scoperte += 1
    // se il numero di caselle scoperte e pari al totale delle caselle meno il numero di bombe
    // (cioè se hai azzeccato TUTTE le caselle senza bomba)...
    if (scoperte == 9*9-bombs)
     {
      //...fine del gioco (cioè non si può più cliccare, non è che esce)
      fine = true
      // ridisegna tutto (altrimenti prima compare "Hai vinto!!" e POI si scopre l'ultima casella cliccata)
      screen_redraw()
      // visualizza il messaggio dei vittoria ("Hai vinto!!")
      show_message("Hai vinto!!")
     }
   }
 }


Mouse Event for Glob Right Pressed:
execute code:
// QUANDO VIENE PREMUTO IL TASTO DESTRO DEL MOUSE:

// domanda se vuoi iniziare una nuova partita
// se si clicca su "yes" riavvia il gioco
if show_question("Vuoi iniziare una nuova partita ?")
 {game_restart()}


Draw Event:
execute code:
// PER OGNI STEP:

// imposta la font
draw_set_font(font0)
// allineamento orizzontale: accentrato
draw_set_halign(fa_center)
// per ogni casella...
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   // ...se è scoperta...
   if (scoperta[k,k2])
    {
     // ...disegnala scoperta
     draw_sprite(sCasSco,cas[k,k2],k*32,k2*32)
     // ...se non ha bombe... 
     if (cas[k,k2] == 0)
     //...indica quante bombe sono adiacenti 
      {draw_text(k*32+16,k2*32,string(tot[k,k2]))}
    }
   //...se è coperta e...
   else
    {
     //...se la partita  non è finita...
     if (!fine)
      // ...diesgnala coperta non visualizzando le bombe
      {draw_sprite(sCasCo,0,k*32,k2*32)}
      //{draw_sprite(sCasCo,cas[k,k2],k*32,k2*32)}
     // ...se la partita è finita....
     else
      //...disegnala coperta visualizzando comunque eventuali bombe
      {draw_sprite(sCasCo,cas[k,k2],k*32,k2*32)}
    }
  }
codice versione osg (one script game) qui
Spoiler

Codice: Seleziona tutto

// questo è un one script game: tutti gli automatismi di Game Maker sono inibiti


//ALL'AVVIO DEL GIOCO:

// imposto il testo della barra del titolo e...
room_caption = "CAMPO MINATO OSG   "
// ...lo visualizzo
screen_redraw()
// personalizzazioni text box
// livello trasparenza (opaco = 1 completamente invisibile = 0)
message_alpha(0.8)
// testo messaggi (grafia: arial, dimensione: 15, colore: bianco, stile: normale)
message_text_font("arial", 15, c_white, 0)
// testo bottoni (grafia: arial, dimensione: 10, colore: bianco, stile: grassetto)
message_button_font("arial",10,c_white, 1)

//all'avio la partita ovviamente non è finita e...
fine = false
//...le caselle scoperte sono zero
scoperte = 0
// per ogni casella...
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   // ...la casella è vuota (non ha bombe)
   cas[k,k2] = 0
   // ...la casella è coperta
   scoperta[k,k2] = false
  }
 
// posiziono le bombe
// chiede al giocatore quante bombe devono essere nascoste nella scacchiera
bombs = get_integer("Quante Bombe ?",30)
// posiziona le bombe in caselle a caso
for (k3=0; k3 <= bombs-1; k3 += 1)
 {
   // sceglie una casella a caso
   xpos = irandom_range(0,8)
   ypos = irandom_range(0,8)
   // se nella casella (scelta a caso) c'era già una bomba...
   if (cas[xpos,ypos] == 1)
    // ...impedisce a k3 di incrementare
    {k3 -= 1}
   cas[xpos,ypos] = 1
 }
 
// calcolo totali
// qui per ogni casella viene calcolato quante bombe adiacenti ha
/* gli "if" sono stati messi perché atrimenti venivano richiamate nell'elaborazione 
degli array con indici non validi*/

// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   tot[k,k2] = 0
    if k+1 <= 8
   tot[k,k2] += cas[k+1,k2]
    if k+1 <= 8 && k2-1 >= 0
   tot[k,k2] += cas[k+1,k2-1]
    if k2-1 >= 0
   tot[k,k2] += cas[k,k2-1]
    if k-1 >= 0 && k2-1 >= 0
   tot[k,k2] += cas[k-1,k2-1]
    if k-1 >= 0
   tot[k,k2] += cas[k-1,k2]
    if k-1 >= 0 && k2+1 <= 8
   tot[k,k2] += cas[k-1,k2+1]
    if k2+1 <= 8
   tot[k,k2] += cas[k,k2+1]
    if k+1 <= 8 && k2+1 <= 8
   tot[k,k2] += cas[k+1,k2+1]
  }
  
do // ciclo "principale" (sostituisce il sistema di step di Game Maker)
 {
  //aggiorno manualmente lo stato della tastiera e del mouse
  io_handle()
  
  // QUANDO VIENE PREMUTO IL TASTO DESTRO DEL MOUSE:

// domanda se vuoi iniziare una nuova partita
// se si clicca su "yes" riavvia il gioco
if mouse_check_button(mb_right)
{
if show_question("Vuoi iniziare una nuova partita ?")
 {
  // riavvia il gioco
  game_restart()
  // esce dall'evento (altrimenti resta imprigionato nel ciclo "principale")
  exit 
 }
}  

// QUANDO VIENE PREMUTO F1:
// visualizza la guida
if keyboard_check(vk_f1)
 {show_info()}

// QUANDO VIENE PREMUTO IL TASTO SINISTRO DEL MOUSE:
if mouse_check_button(mb_left)
{
// se la partita non è finita
if (fine == false)
 {
  // calcola su quale casella è avvenuto il click
  xsel = mouse_x div 32
  ysel = mouse_y div 32
  // se la casella è già scoperta...
  if !(scoperta[xsel,ysel] == true)
   // ...salta le istruzioni successive e riinizia da (**)
   {
  /*istruzione per provare se funziona il riconoscimento
    della casella su cui si è cliccato:
    how_message(string(xsel)+","+string(ysel))*/
  // scopre la casella selezionata
  scoperta[xsel,ysel] = true
  // se c'è una bomba...
  if (cas[xsel,ysel] == 1)
   {
    //...fine del gioco (cioè non si può più cliccare, non è che esce)
    fine = true
    //...nella casella appare la "bomba con contorno rosso"
    // come promemoria di quale è il punto in cui hai sbagliato
    /* nel draw_event c'è un controllo che causa la visualizzazione di tutte
      le bombe quando fine == true*/
    cas[xsel,ysel] = 2
   }
  // se la casella è vuota
  else
   {
    //tieni il conto di tutte le caselle scoperte fino ad ora
    scoperte += 1
    // se il numero di caselle scoperte e pari al totale delle caselle meno il numero di bombe
    // (cioè se hai azzeccato TUTTE le caselle senza bomba)...
    if (scoperte == 9*9-bombs)
     {
      //...fine del gioco (cioè non si può più cliccare, non è che esce)
      fine = true
      // ridisegna tutto (altrimenti prima compare "Hai vinto!!" e POI si scopre l'ultima casella cliccata)
      screen_redraw()
      // visualizza il messaggio dei vittoria ("Hai vinto!!")
      show_message("Hai vinto!!")
     }
   }
   }//(**)
}
}
  
  // GESTIONE GRAFICA:

// imposta la font
draw_set_font(font0)
// allineamento orizzontale: accentrato
draw_set_halign(fa_center)
// per ogni casella...
// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   // ...se è scoperta...
   if (scoperta[k,k2])
    {
     // ...disegnala scoperta
     draw_sprite(sCasSco,cas[k,k2],k*32,k2*32)
     // ...se non ha bombe... 
     if (cas[k,k2] == 0)
     //...indica quante bombe sono adiacenti 
      {draw_text(k*32+16,k2*32,string(tot[k,k2]))}
    }
   //...se è coperta e...
   else
    {
     //...se la partita  non è finita...
     if (!fine)
      // ...diesgnala coperta non visualizzando le bombe
      {draw_sprite(sCasCo,0,k*32,k2*32)}
      //{draw_sprite(sCasCo,cas[k,k2],k*32,k2*32)}
     // ...se la partita è finita....
     else
      //...disegnala coperta visualizzando comunque eventuali bombe
      {draw_sprite(sCasCo,cas[k,k2],k*32,k2*32)}
    }
  }
   // aggiorna manualmente la grafica
   screen_refresh()
   // limitazione velocità
   sleep(1)
 }
until keyboard_check(vk_escape) //quando viene premuto escape il gioco esce dal ciclo "principale" e...
//...si chiude la finistra di gioco
game_end()
supporto e richieste:
Spoiler
se qualcuno "in avvicinamento a GM" non capisce qualcosa saro lieto (o almeno ci proverò) a spiegare il (tutto sommato semplice) procedimento che ho usato

se avete (per caso) dei codici da integrare per rendere possibili miglioramenti li inserisco (con tanto di crediti) nel gioco volentieri (magari faccio 2 versioni, una base e una avanzata)
ciao!!

[11 ago 2014 ]
- aggiunte alcune migliorie al gioco
[13 ago 2014]
- possibilità di scegliere da quante caselle e formata la scacchiera (prima si poteva solo scegliere il numero di bombe)
- possibilità di scegliere tra campo minato e prato fiorito (tanto la programmazione è la stessa).
[28 ago 2014]
- aggiunti i disegni di MagicFool
- ora il gioco è a vite (cioè non perdi al primo errore)
Ultima modifica di gameplay_extreme il 28/11/2014, 20:04, modificato 19 volte in totale.
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da BaronVsCorsar »

gameplay: se lo scopo è aiutare chi si avvicina a GM devi riempire di commenti il tuo codice.

e se il tuo scopo è scrivere un programma che dopo 2 settimane che hai smesso di lavorarci su riesci ancora a metterci le mani... bhe, devi riempirlo di commenti lo stesso ;)

Metti in "code" il codice, così diventa più leggibile e magari non sostituisce

Codice: Seleziona tutto

8)
con 8) :lol:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

gameplay: se lo scopo è aiutare chi si avvicina a GM devi riempire di commenti il tuo codice.

e se il tuo scopo è scrivere un programma che dopo 2 settimane che hai smesso di lavorarci su riesci ancora a metterci le mani... bhe, devi riempirlo di commenti lo stesso ;)
E' chiaro che è difficile darti torto ma mi viene da dire...mica è scritto in lingua klingon :fapensare:
PS: non intendo dire che ingnorerò il tuo suggerimento...specialmente se qualche principiante è interessato a saperne il funzionamento :cappa:
Metti in "code" il codice
gia fatto prima che leggessi il commento :mrgreen:
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
dt_3_dt
Membro super
Messaggi: 608
Iscritto il: 03/10/2010, 16:47
Uso: GM:Studio 1.4 Standard
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da dt_3_dt »

gameplay_extreme ha scritto:
gameplay: se lo scopo è aiutare chi si avvicina a GM devi riempire di commenti il tuo codice.

e se il tuo scopo è scrivere un programma che dopo 2 settimane che hai smesso di lavorarci su riesci ancora a metterci le mani... bhe, devi riempirlo di commenti lo stesso ;)
E' chiaro che è difficile darti torto ma mi viene da dire...mica è scritto in lingua klingon :fapensare:
Per uno che non ha mai programmato sì

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

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da Homunculus »

Ho provato il gioco e studiato un po' il codice. È veramente molto di base, e come detto dagli altri risulta davvero più difficile del dovuto capire il codice vista la mancanza di commenti e nomi di variabili poco descirittive. Alcuni commenti al codice:

- Per i vari loops di inizializzazione ecc... usi delle variabili k, k1, kN ecc... che dovrebbero essere dichiarate come var , mentre così le rendi variabili dell'istanza
- Se clicchi su una casella con 0 tutte le caselle adiacenti senza bombe dovrebbero aprirsi.
- Nel campo minato la prima casella premuta non dovrebbe mai essere una bomba
- Come minimo dovresti mettere la possibilità di inserire la bandierina sulle caselle in cui si pensa ci sia una bomba

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

È veramente molto di base
voleva esserlo
come detto dagli altri risulta davvero più difficile del dovuto capire il codice vista la mancanza di commenti e nomi di variabili poco descirittive
prossimamente posto una versione commentata come si deve...per le variabili vedi/vedete il fondo di questo post
- Per i vari loops di inizializzazione ecc... usi delle variabili k, k1, kN ecc... che dovrebbero essere dichiarate come var , mentre così le rendi variabili dell'istanza
mi è sfuggito...sistemerò
- Se clicchi su una casella con 0 tutte le caselle adiacenti senza bombe dovrebbero aprirsi.
vedrò se aggiungere
- Nel campo minato la prima casella premuta non dovrebbe mai essere una bomba
non lo sapevo...vedrò se aggiungere
- Come minimo dovresti mettere la possibilità di inserire la bandierina sulle caselle in cui si pensa ci sia una bomba
vedrò se aggiungere

visto che avevo promesso di fare una SPIEGAZIONE DIRETTA A PRINCIPIANTI inizio subito:
---
stanze:
il gioco si svolge in una scacchierà a 9 x 9 = 81 caselle, ogni casella e grossa 32x32 pixel, quindi l'atezza / larghezza della stanza l'ho messa pari a 32 x 9 =288 pixel.
Ricordo che il gioco è ambientato in un'unica stanza che viene avviata appena il gioco parte

funzioni particolari:
Naturalmente non ho usato le views poichè la scacchiera ci sta tutta nello schermo e quindi non avrebbe senso usarle

oggetti:
il gioco è formato da UN UNICO oggetto che inizializza il gioco (diciamo "prepara" i valori di partenza), disegna la scacchiera, controlla le cliccate fatte con il mouse.
Naturalmente un'istanza dell'oggetto è poi stata inserita nella room (altrimenti la programmazione dell'oggetto rimarebbe disattivata e io avrei sprecato il mio tempo :mrgreen: )

sprite:
gli sprite non sono asscociati ad oggetti ma sono disegnati direttamente dove servono dal draw_event. Le 2 sprite sono sCaSco (sprite_casella_scoperta) e sCasCo (sprite_casella_coperta). La prima ha 2 sottoimmagini (casella coperta e casella coperta con bomba), la seconda ne ha 3 (casella scoperta, casella scoperta con bomba e casella scoperta con bomba e contorno rosso). Mi rendo conto che così su 2 piedi potrebbe non essere chiaro...comunque per adesso prendetela così...

varibili usate:

Codice: Seleziona tutto

fine    // indica se è finita o meno la partita
scoperte    // quante caselle vuote sono state scoperte dall'inizio della partita
k,k2,k3    // contatori dei cicli for
cas(array 2D)    // se 0 la casella è vuota, se 1 la casella è con bomba, se 2 la casella contiene bomba con contorno rosso (quest'ultima sarebbe la bomba fatale, quella che hai fatto esplodere se hai perso)
scoperta(array 2D)    // se la casella è scoperta o meno
tot (array 2D)    // quante bombe ci sono nelle caselle adiacenti
bombs    // quante bombe ci sono (lo decide il giocatore all'inzio della partita)
xpos, ypos   // variabili usate nel posizionamento delle bombe (contengono le coordinate di una casella a caso)
xsel, ysel    //coordinate della casella correntemente selezionata (calcolata a partite da mouse_x, mouse_y e la dimensione delle caselle)
:cappa:
---
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

VERSIONE COMMENTATA aggiunta (vedete primo post) :cappa:
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
BaronVsCorsar
GMI VIP
Messaggi: 4699
Iscritto il: 14/02/2004, 12:05
Specialità: Saccenza
Uso: GameMaker 8.1
Località: Ferrara
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da BaronVsCorsar »

ti faccio un esempio di commento software per uso terzi (cioè non per te stesso)
a scopo didattico.

Codice: Seleziona tutto

// colonna (x) ---- che vuol dire "x": è il nome di una variabile interna, genera solo confusione.
for (k=0; k <= 8; k += 1)  //ripeto il ciclo per 9 volte (da 0 incluso a 8 incluso)
// riga (y) --- vedi sopra
 {
  for (k2=0; k2 <= 8; k2 += 1) //ripeto il ciclo per 9 volte (da 0 incluso a 8 incluso) PS: conveniva usare una lettera diversa
   {
    cas[k,k2] = 0; //inizializzo la matrice kas a 0, grazie ai due cicli annidiati ricopro tutti gli 81 (9*9) elementi 
    scoperta[k,k2] = false; //inizializzo anche la matrice scoperta
   } //fine for su k2 (righe)
 } //fine for su k (colonne)
 
// posiziono le bombe dentro la matrice
bombs = get_integer("Quante Bombe ?",30); chiedo quante bombe posizionare nella griglia di gioco, salvo il valore in bombs
for (k3=0; k3 <= bombs-1; k3 += 1) //ciclo sul numero di bombe. Ne piazzo esattamente un numero pari a bombs
 {
   //"scelgo" una posizione a caso sulla griglia
   xpos = irandom_range(0,8); //xpos assume un valore casuale intero tra 0 (incluso) e 8 (incluso)
   ypos = irandom_range(0,8);
   if (cas[xpos,ypos] == 1) //verifico se la posizione è già impegnata
    {k3 -= 1;} //se è giù impegnata calo il contatore obbligando a fare un ciclo in più
   cas[xpos,ypos] = 1; //memorizzo che la casella scelta è occupata da una bomba
 }
ovviamnete scrivendo direttamente il codice ed i commenti il layout verrebbe un po' meglio, per cercare di mantenere leggibilità.

commenti sparsi:
- nei cicli se usi k e k2... passa a k1 e k2 oppure k e h. Mantieni coerenza nei nomi, aiuta chi legge (e te) a capire a cosa servono quelle variabili
- metti i ";" (perchè piacciono a me :lol: no scherzo, il 90% dei linguaggi di programmazione te li impone, non è male abituarsi
- usa sempre le graffe, anche quando c'è una sola istruzione. A maggior ragione se la "sola istruzione" è un for annidiato in un altro for
- se devi usare un contatore per i tuoi for, cerca di usare un
var conta;
e riciclare lo stesso indice per più cicli.
- questo "for (k3=0; k3 <= bombs-1; k3 += 1)" suka... fai piuttosto: for (k3=0; k3 < bombs; k3 += 1)
i cicli è molto più professionali farli tra 0 (incluso) e numero totale di occorenze (escluso). (il motivo non è solo estetico: è dovuto a come è gestita la memoria, e i conti dall'hardware.... ovviamente in un linguaggio interpretato non cambia nulla).
Ma in un linguaggio compilato è significativamente più veloce la seconda.

PPS:
anche questo suka:
if (cas[xpos,ypos] == 1) //verifico se la posizione è già impegnata
{k3 -= 1;} //se è giù impegnata calo il contatore obbligando a fare un ciclo in più
molto meglio
finchè (cas[xpos,ypos] == 1)
{
xpos = irandom_range(0,8); //xpos assume un valore casuale intero tra 0 (incluso) e 8 (incluso)
ypos = irandom_range(0,8);
}
così insegni due cicli, e l'utente capisce perchè a volte è meglio uno o l'altro. ;)
Il ciclò "finchè" è COSI' utile del resto :roll: , che non ricordo mai se è il ciclo while o until :lol:
ImmagineSchiva questo - http:\\baronvscorsar.altervista.org
by Lego: Vado in un bar e faccio "votiamo che quel tizio la in fondo venga buttato fuori", ma perché?

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

@Baron grazie dei suggerimenti
per quanto riguarda il cambiare lo stile dei commenti magari un'altra volta...non ho proprio voglia di ri-commentare il codice :lol:
così insegni due cicli, e l'utente capisce perchè a volte è meglio uno o l'altro. ;)
Il ciclò "finchè" è COSI' utile del resto :roll: , che non ricordo mai se è il ciclo while o until :lol:
mi ricordo: tu e jak dicevate che il ciclo while è molto comodo mentre il ciclo do - until era inutile inquanto quasi la stessa cosa. Invece Homu e guidox dicevano che aveva una particolarità: avendo il controllo in coda eseguiva ALMENO UNA VOLTA le istruzioni del ciclo (e questo lo rendeva comodo in certe circostranze).
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Jak
Admin
Messaggi: 12355
Iscritto il: 19/08/2009, 16:20
Specialità: Programmazione 3D
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da Jak »

gameplay_extreme ha scritto:mi ricordo: tu e jak dicevate che il ciclo while è molto comodo mentre il ciclo do - until era inutile inquanto quasi la stessa cosa. Invece Homu e guidox dicevano che aveva una particolarità: avendo il controllo in coda eseguiva ALMENO UNA VOLTA le istruzioni del ciclo (e questo lo rendeva comodo in certe circostranze).
Ricordi male. Io ero tra quelli della particolarità.
Time to feel, time to believe
Dare to see what may come of our future
Lift your head, broaden your gaze
Speak your mind and your thoughts they will follow you

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

continuo con la guida per principianti...

vediamo adesso gli EVENTI CHE HO USATO

la programmazione del gioco è tutta dentro l'oggetto oInvis, divisa in 4 eventi:

CREATE_EVENT (alla creazione dell'istanza, che in questo caso coincide con l'avvio della stanza, che in questo caso coincide con l'avvio del gioco):
scelgo lo stile per i text box
inizializzazioni generali
chiedo quante bombe devono essere inserite
posiziono le bombe
altre inizializzazioni generali

GLOBAL MOUSE LEFT PRESSED (quando viene premuto il tasto sinistro del mouse in un punto qualunque della stanza):
viene calcolata quale casella è statto premuta
viene scoperta tale casella
se becchi una bomba perdi (il tasto sinistro del mouse viene bloccato e le altre bombe nascoste vengono mostrate)
se scopri tutte le caselle vuote (senza bomba) vinci (il tasto sinistro del mouse viene bloccato e le bombe nascoste vengono mostrate)

GLOBAL MOUSE RIGHT PRESSED (quando viene premuto il tasto destro del mouse in un punto qualunque della stanza):
ti viene chiesto se vuoi veramente iniziare una nuova partita
se la risposta e "yes" viene eseguito un semplice riavvio

DRAW_EVENT (ogni istante viene aggiornata la grafica del gioco):
vengono disegnate tutte le caselle (mediante 2 cicli anidiati)
le bombe inizialmente sono nascoste
saranno visibili solo quando perdi o vinci

per ulteriori dettagli vedi il codice e codice commentato (nel primo post)...
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

continuo la guida per principianti:

gli ARRAY 2D (o matrici bidimensionali) sono stati usati nel gioco per "creare" la scacchiera

INFO GENERALI:
un array 2D è una struttura di dati che contiene più valori (a differenza della variabile che contiene un solo valore). Puo essere paragonato a una tabella con righe e colonne numerate.
Ogni casella può contenere un dato diverso.
Per esempio scrivendo

Codice: Seleziona tutto

prova[0,1] = 10 
//(suppongo che la numerazione delle colonne e  righe parta da 0)
andrò a scrivere nella seconda riga (indice 1) della prima colonna (indice 0) il valore 10. Da notare che i valori degli array (stessa cosa vale per le variabili) sono nascosti e non vengono visualizzati a meno che non si dica al programma di visualizzarli (si può fare questo per motivi di dedug o perchè si devono vedere proprio).

CAMPO MINATO:

nel campo minato il contenuto degli array viene mostrato al giocatore visivamente(vengono mostrati solo una parte dei dati: si vedono da subito quali caselle sono coperte e quali scoperte ma non si vede la disclocazione delle bombe che rimangono nascoste fino a fine partita)

gli array 2D usati sono 3:

Codice: Seleziona tutto

cas(array 2D)    // se 0 la casella è vuota, se 1 la casella è con bomba, se 2 la casella contiene bomba con contorno rosso (quest'ultima sarebbe la bomba fatale, quella che hai fatto esplodere se hai perso)
scoperta(array 2D)    // se la casella è scoperta o meno
tot (array 2D)    // quante bombe ci sono nelle caselle adiacenti
tutti sono grandi quanto la scacchiera: 9 x 9 = 81 (vanno dagli indici più piccoli [0,0] a gli indici più grandi [8,8] )

per gestire agevolmente tutte e 81 i valori si usano 2 cicli for annidati (uno per le colonne e uno per le righe) che insieme passano in rassegna tutto l'array.
es:

Codice: Seleziona tutto

// colonna (x)
for (k=0; k <= 8; k += 1)
// riga (y)
 for (k2=0; k2 <= 8; k2 += 1)
  {
   //METTI ISTRUZIONI QUI
  }
le istruzioni che metterai verranno aplicate a tutto l'array sia che si tratti di un inserimento di valori (assegnazione) sia che si tratti di visualizzare i valori precedentemente inseriti (per es. tramite draw_sprite, draw_text ecc.)

per ulteriori info vedi il codice e il codice commentato :cappa:
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

continuo la beginner-guide:

come fa il gioco a capire su che casella il giocatore clicca?

se ogni casella fosse un'istanza diversa basterebbe il left_click_mouse_event (non globale) per determinare quando avvengono i click su una determinata casella, ma il gioco che ho fatto è formato da un'UNICA istanza quindi il discorso cambia.

Poichè ogni casella è grossa 32x32 pixel, e poichè sono tutte perfettamente adiacenti le une alle altre, per determinare su quale avviene il click e sufficente fare

Codice: Seleziona tutto

xsel = mouse_x diviso 32
ysel = mouse_y diviso 32
in questo modo otterremo i numeri che messi come indici nell'array (che contiene le info sulla scacchiera) permetteranno di accedere ai dati della casella giusta
per esempio facendo

Codice: Seleziona tutto

scoperta[xsel,ysel] = true
si pone come scoperta la casella sulla quale si è precedentemente cliccato
però dobbiamo assicurarci di tagliare i valori decimali (altrimenti, se per es, clicchiamo al centro della prima casella in alto a sinistra otterreno [0.5,0.5] anzichè [0,0])
quindi il calcolo sarà:

Codice: Seleziona tutto

xsel = mouse_x div 32
ysel = mouse_y div 32
(div = divsione intera)

Esempi di caselle:
la prima in alto a sinistra sarà la casella [0,0]
la prima in alto a destra sarà la casella [8,0]
la seconda della seconda riga sarà la casella [1,1]
ecc.
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

Cos'è un one script game ?

si tratta di un gioco formato da un unico script. La differenza con il gioco normale è che tutti gli gli automatismi di game maker sono inibiti (aggiornamento schermo, aggiornamento stato tastiera, calcolo di hspeed e vspeed in base a direction e speed, limitazione fps, calcolo fps, sistema a step ecc.). Il vantaggio è che si può raggiungere una velocità maggiore rispetto a un gioco fatto in modalità "classica".

Per creare il nostro one script game useremo questa struttura messa nel CREATION_CODE di una room

Codice: Seleziona tutto

<INIZIALIZZAZIONI DEL GIOCO>
 do // ciclo principale (al posto del sistema di step di Game Maker)
  {
   <ISTRUZIONI CHE COMPONGONO IL GIOCO>
   io_handle() // aggiorno manualmente lo stato della tastiera, altrimenti la lettura del mouse e della tastiera potrebbe non funzionare
   screen_refresh() // aggiorno manualmente lo schermo (altrimenti non si vede niente)
   sleep(quanto_rallentamento_vuoi) // rallento il gioco 
  }
 until keyboard_check(vk_escape) //il ciclo deve finire alla pressione di Esc
game_end() // chiudo la finestra di gioco
Nel primo post Allego una versione un versione del campo minato fatta in modalità "one script game"!
:cappa:

PS: il sistema che ho usato NON prevede la creazione da creation code della room, di oggetti, istanze e eventi, è tutto fatto senza queste cose...(a differenza del sistema "Guide to making One-Script-Games" descritto qui http://gmc.yoyogames.com/index.php?showtopic=486065 )
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

Xeryan ha scritto:esagerato baron, troppi commenti, non ci capisco niente e ottieni l'effetto contrario
effettivamente con i commenti neanche io ci sono andato leggero...che vi devo dire...se vi danno fastidio fate finta che non ci siano...(o al limite leggette la versione non commentata...)

:cappa:
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
magnetz
Membro
Messaggi: 75
Iscritto il: 04/08/2013, 10:29
Specialità: programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da magnetz »

scusate, essendo un principiante nel caso dei codici di GM mi sono interessato, e ho visto che manca la possibilità di mettere la bandierina,
ho pensato che al posto di far comparire il messaggio con global right pressed si potesse aggiungere la bandierina, e con esc si chiedesse il gioco.
però quando si preme sulla casella con bandierina con il tasto sinistro non succedarà niente, invece se si preme con il tasto destro toglierà la bandierina.
è fattibile?...io ci ho provato ma non sapevo come fare :)
può anche essere una cavolata ma quello che importa e divertirsi. SEEMS LEGIT

GIOCHI:
ImmagineImmagine

il mio Vorxy:
Immagine

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da gameplay_extreme »

magnetz ha scritto: è fattibile?...io ci ho provato ma non sapevo come fare :)
fatto (rieffetua il download)
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
magnetz
Membro
Messaggi: 75
Iscritto il: 04/08/2013, 10:29
Specialità: programmazione
Uso: GM:Studio 1.4 Master
Contatta:

Re: CAMPO MINATO [exe+gmk+txt]

Messaggio da magnetz »

complimenti, davero bravo, mi dispiace un pò per gli zero, dovresti aprire tutto lo spazio se ci sono gli zeri tipo così
Spoiler
Immagine

Uploaded with ImageShack.us
io ho cliccato la prima in alto a sinistra e mi si è aperto tutto fino a far comparire i numeri.
forse chiedo troppo, dimmi tè.
forse lo sai già, ma dovresti, ad esempio far controllare intorno alla casella con il numero uguale a 0 se ci sono altre caselle con 0.
P.s. togli il trattino blu nello spite della bandiera, funziona comunque :)
può anche essere una cavolata ma quello che importa e divertirsi. SEEMS LEGIT

GIOCHI:
ImmagineImmagine

il mio Vorxy:
Immagine

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+source]

Messaggio da gameplay_extreme »

In questi giorni ho implementato alcune cose:

- possibilità di scegliere da quante caselle e formata la scacchiera (prima si poteva solo scegliere il numero di bombe)
- possibilità di scegliere tra campo minato e prato fiorito (tanto la programmazione è la stessa).

UNA PICCOLA RICHIESTA DI AIUTO:
Però come si può vedere nello shot qui sotto, poichè i fiori sono disegnati sorridenti sembra quasi che la partita sia vinta anche se persa...pensavo si potrebbe fare un fiore allegro indicante la vittoria e un fiore triste indicante la perdita...se qualcuno mi creasse i 2 sprite gli sarei grato ( :cappa: ) e naturalmente lo aggiungerei ai crediti. Se volete collaborare vi ringrazio e aspetto un vostro PM :cappa:

SHOT-->vedi spoiler
Spoiler
Immagine
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Avatar utente
gameplay_extreme
GMI VIP
Messaggi: 3824
Iscritto il: 13/11/2010, 16:23
Uso: GM:Studio 2
Contatta:

Re: CAMPO MINATO [exe+source]

Messaggio da gameplay_extreme »

Immagine
Piccola revisone:
- aggiunti alcuni disegni di MagicFool (per esempio la bomba qui sopra l'ha disegnata lui)
- ora il gioco è a vite (cioè non perdi al primo errore)

pensavo di fare si che il cursore sopra le caselle non ancora scoperte diventasse a forma di piedi, nel senso che quando clicchi una casella praticamente ci cammini sopra...se qualcuno gentilmente si offre...lo ringrazierei e lo aggiungo ai crediti.

edit: cursore aggiunto!
Immagine
clicca sul logo qui sopra per info e download riguardo ai miei software o per sapere come si crea un videogioco!

iscriviti qui gratuitamente a GMI !
Spoiler
- Una curiosità: come mai quell' ordine ?
- Perché formava una scaletta molto carina da vedere.


"ah ah...grazie alla annotazione scientifica ti ho fregato!"
(come disse la calcolatrice al display)

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti