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
AldoBaldo (Member)
Guru


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 23:48
Mercoledì, 15/11/2023
"Greed" è un banale videogioco del tipo “rompicapo numerico” del quale ho rilevato le regole da un video su YouTube. Quel gioco era attribuito a Matthew Day.
Lo scopo è “visitare” il maggior numero possibile di caselle numeriche, annullandole.
Ogni casella è caratterizzata da una cifra numerica che indica l’entità dello spostamento da essa abilitata nel momento in cui si trova a diretto contatto con il segnaposizione del giocatore. Ad esempio, se ci si muove su una casella contrassegnata col numero 6, ci si deve spostare di 6 caselle in quella direzione.
Le caselle lungo il percorso per raggiungere la casella 6 posizioni più in là nella direzione scelta vengono “acquisite” e annullate.
Il punteggio viene incrementato di un valore equivalente alla somma di tutte le cifre presenti lungo il percorso dello spostamento, espresso anche come percentuale del valore acquisito rispetto al totale effettivamente disponibile.
Non sono consentite mosse che comportino l’uscita dall’area di gioco o “accavallamenti” con caselle già annullate.
La partita termina con disonore quando non sono più disponibili mosse valide. È praticamente impossibile riuscire ad acquisire l’intero schema, per cui la “vittoria di Pirro” consiste nel superare il record massimo raggiunto fino a un certo momento.



AldoBaldo ha allegato un file: screenshot.png (24959 bytes)
Clicca qui per guardare l'immagine


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: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 7:31
Giovedì, 16/11/2023
fico! e devo dire pure bell'idea.
Ma è impossibile finirlo XD nel senso se appare un 9 accanto a uno o più bordi, come si risolve?
cmq bellissimo aldo mi piace!


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


Messaggi: 1388
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 12:58
Giovedì, 16/11/2023
Non ho errori sul codice ma sulle tue librerie:

=== Build: Debug in Greed (compiler: GNU GCC Compiler) ===
ld.exe  cannot find -lframes
ld.exe  cannot find -loffscreen_world
ld.exe  cannot find -lliste_di_estrazione
error: ld returned 1 exit status
=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===

Come faccio a lincare le librerie presenti in ...\Greed\Sviluppo\librerie\?

Ho dato un'occhiata veloce al codice e ho visto che per la ricerca delle mosse possibili hai usato un approcio completamente diverso dal mio. Vale la pena approfondire, invece per le mosse possibili anche io creo delle liste che le contiene.

Se uso i suoni ti dispiace? Così metto voce al mio in C#

Ciao Aldo e complimenti per come tieni ordinato e documentato il codice. :heehee::heehee:

Ultima modifica effettuata da Carlo il 16/11/2023 alle 13:02


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


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 15:43
Giovedì, 16/11/2023
Testo quotato

Postato originariamente da Thejuster:
fico! e devo dire pure bell'idea.
Ma è impossibile finirlo XD nel senso se appare un 9 accanto a uno o più bordi, come si risolve?
cmq bellissimo aldo mi piace!



Grazie. Per come mi stanno andando le cose, mi fa proprio comodo qualche complimento ogni tanto. Per rinfrancarmi un po'.

Comunque è vero, anch'io ho notato fin da subito che è un gioco che non può avere come obiettivo il completamento dello schema. Per questo ho aggiunto la lista dei "record", dato che l'unica "vittoria" che puoi conseguire è quella di far meglio della volta precedente.

L'assegnazione dei valori alle caselle è casuale, con l'unico vincolo che vengono presentate sempre serie complete delle nove cifre: 30*21=630 caselle, ovvero 70 serie complete nell'intervallo 1-9. Inoltre, al momento dell'apertura di una partita la posizione del giocatore viene ricalcolata fino a che non è disponibile ALMENO una mossa valida (nel senso che se la partita nasce "morta" non viene proposta al giocatore ma "segretamente" sostituita da un'altra).

Quanto al valore del gioco in sè, le regole non le ho ideate io, ma quel Matthew Day del quale ho fatto cenno, anche se non ho idea di chi sia. Quello che è mio è l'implementazione "spaghettosa" in win32 e l'adattamento di qualche dettaglio delle regole stesse.

Ultima modifica effettuata da AldoBaldo il 16/11/2023 alle 15:44


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
AldoBaldo (Member)
Guru


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 16:12
Giovedì, 16/11/2023
Testo quotato

Postato originariamente da Carlo:
Non ho errori sul codice ma sulle tue librerie:

(...)

Come faccio a lincare le librerie presenti in ...\Greed\Sviluppo\librerie\?



Io lo so fare in Code::Blocks.

Ammesso che usi quell'IDE, devi scegliere il menu Project->Build options... , quindi nella finestra di dialogo spostarti sulla tabella Linker settings. Lì devi indicare quelle che sono le librerie statiche che vuoi includere nel progetto.

Concluso quel passaggio (e l'ordine col quale inserisci le librerie conta, perché a volte alcune librerie ne richiedono altre), sempre nella stessa finestra di dialogo occorre spostarsi sulla tabella Search directories e aggiungere il percorso (assoluto o relativo, come preferisci) della cartella dentro la quale si trovano le librerie stesse.

A questo punto, se le librerie sono compatibili (ad esempio non puoi usare librerie in C++ se stai compilando in C, mentre si può fare il contrario) e le interconnessioni tra le librerie sono disponibili, il linker non dovrebbe più lamentarsi.

Personalmente mi piace "sigillare" in librerie indipendenti dal resto del codice quante più funzioni possibile, perché ho realizzato che è un modo per semplificare la gestione del programma senza avere sempre sotto agli occhi pagine e pagine di codice sempre più intricato. Ad esempio, avrai notato che OffscreenWorld non espone interazioni con Win32, se non in modo marginale. A sua volta, Frames è in sostanza una specie di "estensione" di OffscreenWorld. In questo modo, con pochissime chiamate dal corpo principale del programma, riesco a ottenere una quantità di buffer offscreen indipendenti e funzionanti senza impazzire con una quantità di messaggi di errore da controllare (se ne occupa la libreria, internamente).

Sarà la solita soluzione da dilettante, ma mi ci trovo discretamente e... è la MIA soluzione! :)

Testo quotato

Postato originariamente da Carlo:
Ho dato un'occhiata veloce al codice e ho visto che per la ricerca delle mosse possibili hai usato un approcio completamente diverso dal mio. Vale la pena approfondire, invece per le mosse possibili anche io creo delle liste che le contiene.



Procedo per prove ed errori, escogitando man mano quel che riesco. Quando le cose funzionano, le tengo. Non ho la pretesa di fare "la cosa migliore" (non sono in grado, non ho formazione).

Testo quotato

Postato originariamente da Carlo:
Se uso i suoni ti dispiace? Così metto voce al mio in C#



Per me fai pure. Però devo avvertirti che mentre la grafica è tutta di mio pugno (e si vede), per far prima ho preso i suoni da https://opengameart.org/ . Se ho letto bene hanno una specie di licenza aperta, però non vorrei avere sbagliato per superficialità in qualche caso. C'è da dire che sono suoni talmente banali da riuscire a buttarne giù una ventina nel giro di un'ora, se non meno. Ripeto, ho preso quelli già fatti perché li avevo scaricati tempo fa e li avevo lì pronti sull'HD.

Testo quotato

Postato originariamente da Carlo:
Ciao Aldo e complimenti per come tieni ordinato e documentato il codice. :heehee::heehee:



Sei ironico? Secondo me quel codice è un groviglio gordiano, un labirinto di Dedalo, insomma, ordinato come il centro storico di Genova...


AldoBaldo ha allegato un file: linker_settings.png (26882 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da AldoBaldo il 16/11/2023 alle 16:15


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: 1388
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 18:02
Giovedì, 16/11/2023
Per il codice non era ironico, per esempio già con la prima occhiata sono stato in grado di identificare dove e come scegli le caselle valide. Per capirne la logica ci dovrò guardare più attentamente.

Uso CODE::BLOCKS, già avevo impostato il linker, riproverò seguendo le tue istruzioni.

Testo quotato

Postato originariamente da AldoBaldo:
...l'unico vincolo che vengono presentate sempre serie complete delle nove cifre: 30*21=630 caselle...


Non ho capito, le serie non sono complete, nell'allegato le prime due serie orizzontali hanno delle ripetizioni, lo stesso la prima in verticale. Mi spieghi meglio?

Non ho capito la partita "morta". In qualsiasi punto dello schema compare la prima casella rossa, ci sono sempre mosse possibili: se sugli angoli la diagonale, il verticale e l'orizzontale opposti, sui bordi lo stesso. Nel mio codice ho pianificato che la prima casella non compaia mai lungo i bordi, ma l'ho fatto senza una ragione precisa.

Grazie per il sito delle risorse, non lo conoscevo.

Pubblicherò appena capita la questine "serie" la versione C#, grafica ispirata alla tua, codice completamente personale.

Riciao.:k:



Carlo ha allegato un file: seriecomplete.jpg (320746 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Carlo il 16/11/2023 alle 18:53


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


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 18:53
Giovedì, 16/11/2023
Testo quotato

Postato originariamente da Carlo:
Non ho capito, le serie non sono complete, nell'allegato le prime due serie orizzontali hanno delle ripetizioni, lo stesso la prima in verticale. Mi spieghi meglio?



Sì. Le serie sono complete nel contesto dell'intero schema: ci sono 70 ricorrenze dell'1, 70 ricorrenze del 2, 70 ricorrenze del 3... e così via. Le serie sono complete, ma non necessariamente adiacenti.

Testo quotato

Postato originariamente da Carlo:
Non ho capito la partita "morta". In qualsiasi punto dello schema compare la prima casella rossa, ci sono sempre mosse possibili: se sugli angoli la diagonale, il verticale e l'orizzontale opposti, sui bordi lo stesso. Nel mio codice ho pianificato che la prima casella non compaia mai lungo i bordi, ma l'ho fatto senza una ragione precisa.



Ovviamente hai ragione, solo che io ho agito avendo in mente la prudenza, senza riflettere sul FATTO che sottolinei. Per questo ho inserito un do-while() che si dovrebbe ripetere finché il segnaposizione è collocato in un punto a partire dal quale non esistono mosse. Come hai osservato, quel do-while() non serve a un tubo, perché con lo schema vuoto non può esistere un punto dal quale sia impossibile muoversi. Va be', non serve ma non fa danno: semplicemente il codice viene sempre eseguito una sola volta, come se il do-while() non ci fosse.

Testo quotato

Postato originariamente da Carlo:
Grazie per il sito delle risorse, non lo conoscevo.



Visto che sei interessato, ne ho scovato anche un altro: https://itch.io/game-assets

Testo quotato

Postato originariamente da Carlo:
Pubblicherò a breve la versione C#, grafica ispirata alla tua, codice completamente personale.



Io di C# non ho alcuna esperienza, ma sarò ben contento di provare l'eseguibile.
Ti lancio una sfida (per gioco): l'eseguibile del mio "Greed", incluse tutte le risorse grafiche e audio, occupa solo 100 KB su disco... roba d'altri tempi... vediamo che dimensioni saltano fuori con C#, son proprio curioso, ma mi sa che ho già "vinto" la sfida della parsimonia. :heehee:

Ultima modifica effettuata da AldoBaldo il 16/11/2023 alle 18:54


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: 2331
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 19:05
Giovedì, 16/11/2023
Ci sono anche io su itch.io dove ho rilasciato mire.
Si è un bel sito per amatori.

E comunque rinnovo i complimenti ad aldo.
Codice molto pulito e leggibile. Diviso e categorizzato molto bene.

Sono rari i progetti così.

Introdurrai magari piu feature?
Non sò tipo un algoritmo per cercare almeno in una sequenza di numeri,
una possibile o probabile vittoria?
(sarebbe il top)

Visto che i numeri sono generati in modo random, penso si possa fare un qualche algoritmo
in modo di piazzare una serie di probabili mosse per una vittoria.

Pensi sia possibile fare ciò?

Ultima modifica effettuata da Thejuster il 16/11/2023 alle 19:13


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


Messaggi: 708
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:20
Giovedì, 16/11/2023
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).


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
Pagine: [ 1 2 3 ] Precedente | Prossimo