Page 1 of 2

[GAME] Square

PostPosted: Fri Apr 17, 2020 9:13 am
by ebmaster
Square - questo giochino mi è sempre piaciuto, ho riadattato a Gemix un vecchio sorgente " :?: anche se a dire il vero mi e stato molto complicato capire la dinamica" comunque qualche modifica all'originale l'ho dovuta fare altrimenti non andava.
:) In questa versione demo il primo livello serve come test si gioca dal secondo in poi e riconosce 1 - 2 - 3 quadrati in linea e 4 in unico blocco, vorrei apportare delle migliorie visto che il gioco in se promette.

:blind: Ci rinuncio! ho capito che è impossibile rintracciare tutte le figure che si potrebbero creare all'interno del gioco :cry: inserisco al suo interno il file PRG sino a questo momento, se qualche volenteroso volesse continuare! comunque si potrà cogliere spunto per creare giochini simili "tipo far visualizzare una forma e contornarla ecco questo e possibile per il resto lascia molte lacune :?: personalmente vedrò di continuare magari cambiando il modo di individuare la selezione a quel punto il sorgente sarà del tutto diverso dall'originale.

Re: [GAME] Square

PostPosted: Fri Apr 17, 2020 11:08 pm
by CicTec
Ciao ebmaster,

Grazie per il porting, vedrò di provarlo presto e farti sapere come funziona. :)

Re: [GAME] Square

PostPosted: Wed Apr 22, 2020 11:34 am
by ebmaster
:blind: E' stato più complicato del previsto, comunque alcune cose sembrano andare per il verso giusto.
adesso riconosce il quadrato ed i quadrati in linea i quadrati 2x2 3x3 e 4x4.
inserisco a parte il PRG se qualcuno lo vorrebbe continuare - credo a mio avviso che la ricerca delle possibilità sia un pò complessa ad ogni modo.
ps. CicTec ho notato che
Code: Select all
scale
e
Code: Select all
size
fanno slittare il grafico

Re: [GAME] Square

PostPosted: Wed Apr 22, 2020 12:23 pm
by CicTec
ebmaster wrote:ps. CicTec ho notato che
Code: Select all
scale
e
Code: Select all
size
fanno slittare il grafico

Ciao ebmaster,

Size e scale si riferiscono alla stessa operazione, ma sono due tipi distinti

"Size" è una variabile INT que indica la dimensione espressa in % e lavora in tutti gli assi del 2D (quindi X y Y).

"Scale" è una variabile vettore 2D (nella nuova beta è 3D in preparazione a nuovi futuro motori 3D), i cui componenti sono X y Y e funzionano in modo individuale, per cui "scale.x" assegna un valore solo a quell'asse e viceversa, se si vuole assegnare ad entrambi gli assi si deve usare la notazione (nella nuova beta vi sono più possibilità):
Source Code (Gemix) [ Download ] [ Hide ]
  • scale.x=scale.y=value;
  •  


In alternativa si può utilizzare la notazione vettoriale, con la funzione del vettore o con un altro vettore.
Per esempio con la notazione vettoriale è:
Source Code (Gemix) [ Download ] [ Hide ]
  • scale = vec2_new(50, 50); // utilizzo la funzione per creare un vettore e assegnarlo alla variabile vettore
  •  


Con la notazione di un'altro vettore potrebbe essere:
Source Code (Gemix) [ Download ] [ Hide ]
  • scale = father.scale; // assegno l'intero valore del vettore scale del padre al figlio (quindi tutti gli assi di ridimensionamento: X e Y)
  •  


L'unica notazione diretta che al momento funziona con costante è 0 (più avanti si aggiungerà supporto) cioè:
Source Code (Gemix) [ Download ] [ Hide ]
  • scale = 0; // tutti gli assi del vettore sono portati a 0, quindi il grafico non ha dimensione e non viene renderizzato sullo schermo.
  •  


Queste notazioni sono compatibili in entrambi i motori Legacy y Modern di Gemix, size è solo nella Legacy (antico) per questioni di compatibilità con i programmi DIV1/DIV2.

Re: [GAME] Square

PostPosted: Wed Apr 22, 2020 2:43 pm
by ebmaster
grazie come sempre ;) ma nello specifico mi riferivo a questo comportamento forse quello più che size o size dovrei dire che l'anomalia si verifica con ANGLE in pratica in due casi l'immagine mi risulta schiacciata e scivolata
sopra ok
sotto sbagliata
destra ok
sinistra sbagliata
Code: Select all
...
graph = 1;
   size = 75;

angle = nextangle=90000;

if(key(_up)) nextAngle = 90000;END       //sopra
      if(key(_down)) nextAngle = 270000;END   //sotto
      if(key(_left)) nextAngle = 180000;END   //sinistra
      if(key(_right)) nextAngle = 0;END      //destra



Re: [GAME] Square

PostPosted: Wed Apr 22, 2020 2:56 pm
by CicTec
Le due immagini si riferiscono a rotazioni, ma parliamo di rotazioni sempre tra la versione Legacy e la versione Modern del gioco, o sempre ad una versione ?

Re: [GAME] Square

PostPosted: Wed Apr 22, 2020 5:37 pm
by ebmaster
Si si riferiscono alla rotazione ho inserito nel file un esempio di come lo utilizzo.

Re: [GAME] Square

PostPosted: Wed Apr 22, 2020 6:47 pm
by CicTec
Si vedo, è un problema di precisione di rendering degli algoritmi, sia cuando vi è solo il ridimensionamento, sia solo la rotazione, sia entrambi, l'algoritmo in sè non è sbagliato, tuttavia con il calcolo intero si perde di precisione secondo la proporzione.

Rispetto al gioco binario originale, eseguendolo con Gemix noti differenze sostanziali ?

Re: [GAME] Square

PostPosted: Thu Apr 23, 2020 8:23 am
by ebmaster
:?: non capisco cosa intendi? nel gioco non ci sono problemi e solo un fatto "estetico"
? anche se a dire il vero nella rotazione il fatto che cambia leggermente posizione sia dovuto a un cambiamento del punto di controllo. "di default non dovrebbe trovarsi nel centro?"

Re: [GAME] Square

PostPosted: Thu Apr 23, 2020 10:30 am
by CicTec
Si intendo il fatto estetico, visto che l'algoritmo deve lavorare con interi e non in virgola mobile, nella trasformazione può effettuare un errore di precisione e quindi la visualizzazione esteticamente appare errata.

Il punto di controllo al centro esiste se il grafico ha dimensioni orizzontali e verticali dispari e la divisione è effettuata usando numeri in virgola moble, quindi se hai per esempio un grafico di 7x7, il centro dovrebbe essere 4 ma solo se fai la divisione in virgola mobile cioè 7/2 = 3.5 siccome nelle regole matematiche >= 5 e arrotondato per eccesso, lo 0.5 diventa 1 sommato al 3 fà 4, quindi 4 centro 123 lato sinistro, 567 lato destro, la rotazione avviene sempre perfettamente, ma se facciamo il calcolo con divisione intera 7/2 = 3 quindi prende come centro il 3, che non è realmente il centro (perdita di precisione).
Stesso discorso se il grafico è di dimensioni orizzontali e verticali pari, per esempio 10x10, sia che tu utilizzi divisione intera o virgola mobile 10/2 = 5 che non è il centro (perdita di precisione).

Quindi nella rotazione si avrà in diversi casi sempre una perdita di precisione sullo spostamento dell'asse, poi se l'algoritmo che deve disegnare i pixel trasformati dell'immagine rotata nello schermo, contiene bug o non è precisa nel calcolo, aumenta la perdita di precisione, dando risultati visivi ancora più artefatti.