Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Greed - Greed, un passatempo per chi ama dare i numeri

Greed

Sommario | Admin | Forum | Bugs | Todo | Files

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
Carlo (Member)
Guru


Messaggi: 1364
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 8:37
Venerdì, 17/11/2023
Ho pubblicato la versione C# di GREED, http://www.pierotofy.it/pages/sorgenti/dettagli/19650-GREE ... regole e grafica liberamente ispirate dal progetto pubblicato da AldoBaldo in C

Il codice è completamente originale, il numero delle colonne e delle righe sono impostabili sul codice, con form che poi si adatta.

Ultima modifica effettuata da Carlo il 17/11/2023 alle 8:38


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2316
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 12:34
Venerdì, 17/11/2023
Testo quotato

Postato originariamente da AldoBaldo:

Su itch ti ho visto, in effetti. E' stata una bella sorpresa.

L'algoritmo che dici non saprei come crearlo. L'idea è buona, ma davvero credo sia oltre le mie possibilità. Comunque il progetto è lì, se vuoi intervenire per migliorarlo sei il benvenuto (anche se non so bene come si fa: dovrei in qualche modo "invitarti", "autorizzarti"... o chiunque può metterci mano, tipo una wiki?).

Quello che invece so fare e avrei intenzione di fare chissà quando è aggiungere la possibilità di gioco a schermo pieno. Pensavo a una risoluzione standard 1280x720, viste le dimensioni attuali della finestra.

Grazie ancora per i complimenti, che proprio non mi aspettavo (è la prima volta che mi capita).



Per l'algoritmo ci sono diverse varianti su cui ci si può affidare.

Ad esempio  Abbiamo una griglia di 30 x 20 blocchi ( 30 x 30 pixel )
Stando a tema di numeri, perché non usare una sequenza di fibonacci?
facendo una sequenza in scala: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144

Facico un esempio in C# perché mi è più facile

Codice sorgente - presumibilmente C++

  1. void Main()
  2.     {
  3.         int larghezzaBlocco = 30;
  4.         int altezzaBlocco = 30;
  5.  
  6.         int larghezzaArea = 30 * larghezzaBlocco;
  7.         int altezzaArea = 20 * altezzaBlocco;
  8.  
  9.         int[] sequenzaFibonacci = SequenzaFibonacci(10);
  10.  
  11.         int x = larghezzaArea / 2;  
  12.         int y = altezzaArea / 2;
  13.  
  14.         int angolo = 0;  // Angolo iniziale
  15.  
  16.         for (int i = 0; i < 10; i++)
  17.         {
  18.             int larghezzaQuadrante = sequenzaFibonacci[i] * larghezzaBlocco;
  19.             int altezzaQuadrante = sequenzaFibonacci[i] * altezzaBlocco;
  20.  
  21.             double radian = angolo * Math.PI / 180.0;
  22.  
  23.             int nuovoX = x + Convert.ToInt32(Math.Cos(radian) * larghezzaQuadrante);
  24.             int nuovoY = y + Convert.ToInt32(Math.Sin(radian) * altezzaQuadrante);
  25.  
  26.             DisegnaRettangolo(x, y, nuovoX, nuovoY, larghezzaQuadrante, altezzaQuadrante, i + 1);
  27.  
  28.             x = nuovoX;
  29.             y = nuovoY;
  30.             angolo += 90;  // Ruota di 90 gradi per ogni quadrante
  31.         }
  32.     }
  33.  
  34. int[] SequenzaFibonacci(int n)
  35.     {
  36.         int[] sequenza = new int[n];
  37.         sequenza[0] = 1;
  38.         sequenza[1] = 1;
  39.  
  40.         for (int i = 2; i < n; i++)
  41.         {
  42.             sequenza[i] = sequenza[i - 1] + sequenza[i - 2];
  43.         }
  44.  
  45.         return sequenza;
  46.     }
  47.  
  48.  void DisegnaRettangolo(int x1, int y1, int x2, int y2, int larghezza, int altezza, int numero)
  49.     {
  50.         Console.WriteLine("Quadrante {"+numero+"}: ({"+x1+"},{"+y1+"}) - ({"+x2+"},{"+y2+"}) Larghezza={"+larghezza+"}, Altezza={"+altezza+"}");
  51.        
  52.     }



In segiuto aggiungendo un void per disegnare dei rettangoli,
Otteniamo qualcosa di simile


https://i.ibb.co/NKHTMMH/immagine.png


Ho tracciato delle linee giusto come idea

https://i.ibb.co/k5r1J8X/immagine.png

Prima soluzione quelle rosse che prendono come punti di riferimento l'inizio o la fine di un rettangolo delimitato
dall'algoritmo.

Il verde invece prende il centro di ogni rettangolo delimitato dall'algoritmo.
Questa è solo una della tante ipotesi.




Ultima modifica effettuata da Thejuster il 17/11/2023 alle 12:39


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 705
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 13:49
Venerdì, 17/11/2023
La sequenza di Fibonacci la conosco, e capisco che dà luogo ad una specie di "spirale", però non riesco a cogliere come possa essere utile per garantire la solvibilità dello schema,,,


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2316
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 14:23
Venerdì, 17/11/2023
Ma in effetti avevo in mente tutt'altro :rotfl:

Riempire tutta l'area è praticamente impossibile.

Però avevo pensato a questa spirale.
Avendo un centro di partenza, e rimpiendo l'area di vari quadranti.
Si saprà che ogni rettangolo ha dimensioni differenti.
Di conseguenza, se si ha Altezza e Larghezza abbiamo dimensioni e coordinate sulla quale
si possono suddividere in blocchi da 30 e generare in quest'area una o piu soluzioni che portano all'avanzare del prossimo quadrante.

Prendo il primo esempio:
è 30 x 30.
Ovviamente sarà l'inizio o la fine.

il secondo o il terzo hanno già una misura diversa.
Poniamo esempio 30 x 90.

abbiamo n2 possibilità una è errata l'altra e sensata per continuare.
quindi una genera ovviamente [ 1 ] l'altra sarà casuale.

Questa era all'incirca la mia idea.
Prendendo spunto dal campo minato.


Ma, oltre a questa possibile soluzione, pensavo di aggiungere delle modalità.
Magari qualcosa che possa rendere il gioco risolvibile.
aggiungendo qualche modalità di gioco.

ad esempio: modalità arcade.
Raggiungi il punto (cubo rosso)

Dove la partenza è indipende, ma seguendo uno schema di numeri, e possibile raggiungere un determinato punto in piu soluzioni.

L'attuale settaggio va benissimo per un Freemode, cerca di ottenere un punteggio massimo.
Ma sarebbe anche carino avere l'opportunità di riuscire in qualche modo a concludere in modo differente da come si immagina.

Ultima modifica effettuata da Thejuster il 17/11/2023 alle 14:40


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 705
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 18:57
Venerdì, 17/11/2023
Mi sa che mi sopravvaluti.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1364
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 19:29
Venerdì, 17/11/2023
Purtroppo non ho possibilità di dedicare tempo.

Avrei un'idea di bassa logica da provare: abbiamo la routine che valida le mosse, aggiungendo un pulsante [trova mossa migliore], si potrebbero esplorare tutte le direzioni ammesse possibili ed annotare i punti fatti e il numero delle caselle coperte. A questo punto per ogni nuova posizione raggiunta ripetere l'operazione per una profondità di mosse da scegliere, direi tre o quattro. Tale sistema ad ogni mossa sa sempre che succederà dopo 4 mosse, evitando i vicoli ciechi ed ottenendo il massimo punteggio.

Se fossero sempre disponibili tutte le direzioni, si avrebbero 8 ricerche all'inizio, 8x8 al secondo livello 64x8 al terzo 512x8 al quarto per un totale di 4096 possibilità massime teoriche. Tra le 4096 possibilità va scelta quella che ha prodotto + punti + caselle coperte e non si è incastrata.
Una volta eseguita la scelta verrà proposta solo la prima mossa, perché al prossimo click su [trova mossa migliore] il processo si ripete andando ad esplorare più in la...  :rofl:


Ultima modifica effettuata da Carlo il 17/11/2023 alle 19:55


in programmazione tutto è permesso
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 705
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 19:40
Venerdì, 17/11/2023
FORSE questa proposta di Carlo potrei sperare di riuscire a portarla a termine. Forse.
Nel frattempo, dopo un breve scambio di idee con Carlo stesso (grazie, Carlo), ho apportato alcune migliorie minori al programma.

1. Eliminate alcune parti inutili del codice
2. Rese static alcune funzioni in greed.c
3. Aggiunta richiesta di conferma in caso di tentativo di uscita dal programma con partita in corso
4. Aggiunta richiesta di conferma in caso di tentativo di avvio di una nuova partita con una partita già in corso
5. Aggiunti alcuni suoni alla finestra di dialogo per la richiesta del nome
6. Ora il valore abbinato alla casella ove viene collocato il segnaposizione ad inizio partita è conteggiato nel punteggio

Ultima modifica effettuata da AldoBaldo il 17/11/2023 alle 19:42


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 891
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 21:48
Mercoledì, 22/11/2023
Ciao Carlo, ho visto il tuo codice in C#, tu hai fatto i random da 1 a 9 per la matrice 30 x 21 mentre AldoBaldo usa il random
da 1 a 9 ma su una matrice che contiene 70 serie da 1 a 9 per un totale di 630 caselle.
Ti basta fare una piccola modifica per farlo uguale.
Comunque bravi tutte e due :k:


If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo