Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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++
void Main()
{
int larghezzaBlocco =30;
int altezzaBlocco =30;
int larghezzaArea = 30 * larghezzaBlocco;
int altezzaArea = 20 * altezzaBlocco;
int[] sequenzaFibonacci = SequenzaFibonacci(10);
int x = larghezzaArea /2;
int y = altezzaArea /2;
int angolo =0;// Angolo iniziale
for(int i =0; i <10; i++)
{
int larghezzaQuadrante = sequenzaFibonacci[i]* larghezzaBlocco;
int altezzaQuadrante = sequenzaFibonacci[i]* altezzaBlocco;
double radian = angolo * Math.PI/180.0;
int nuovoX = x + Convert.ToInt32(Math.Cos(radian)* larghezzaQuadrante);
int nuovoY = y + Convert.ToInt32(Math.Sin(radian)* altezzaQuadrante);
DisegnaRettangolo(x, y, nuovoX, nuovoY, larghezzaQuadrante, altezzaQuadrante, i + 1);
x = nuovoX;
y = nuovoY;
angolo +=90;// Ruota di 90 gradi per ogni quadrante
}
}
int[] SequenzaFibonacci(int n)
{
int[] sequenza =newint[n];
sequenza[0]=1;
sequenza[1]=1;
for(int i =2; i < n; i++)
{
sequenza[i]= sequenza[i - 1]+ sequenza[i - 2];
}
return sequenza;
}
void DisegnaRettangolo(int x1, int y1, int x2, int y2, int larghezza, int altezza, int numero)
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.
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
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.
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...
Ultima modifica effettuata da Carlo il 17/11/2023 alle 19:55
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.
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