Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Tutti gli articoli Tutte le news

Vai al Forum
Discussione Chiusa
 
Strumenti
Old 31-10-2005, 22:19   #1
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
[CICLO 4] Storia 1

Storia: Introduzione di una temporizzazione fissata per il movimento della gemma.
Occorre fare in modo che, alla rapida pressione delle frecce direzionali sinistra e destra, la gemma si sposti di una e una sola casella. Tenendo premuti i tasti in questione, la gemma continuerà a spostarsi nella direzione corrispondente di una casella per ogni decimo di secondo, a meno di collisioni con i bordi laterali.
Come in precedenza, alla pressione contemporanea dei tasti sinistra e destra, la gemma non dovrà spostarsi in nessuna delle due direzioni, e dovrà comunque continuare la sua caduta verticale (a meno di collisione con il bordo inferiore).
In secondo luogo, come sfondo della schermata, l'engine del gioco disegnerà una immagine fissa in jpg, di dimensione 800x600 e profondità di colore 24 bit.

Punti cardine da tenere a mente durante i lavori:
  • Mai fare a gara a chi finisce il task per primo, meglio procedere con calma, altrimenti perderemo molto più tempo in seguito
  • Evitiamo di complicarci la vita, esiste di certo una soluzione più semplice di quella che abbiamo pensato di implementare
  • MAI aggiungere elementi non richiesti esplicitamente dai task: se mai serviranno, se ne parlerà nelle prossime storie
  • Comunichiamo il più possibile, se qualcosa non è chiaro discutiamone tutti i dettagli fino ad eliminare ogni dubbio, anche il più insignificante
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline  
Old 01-11-2005, 15:18   #2
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Task:
4.1.1: Disegnare l'immagine Jpg dello sfondo alle coordinate 0x0 di dimensione 800x600 pixel dietro a tutti gli altri elementi presenti nella finestra. (cover: completo)
4.1.2: Creare un timer molto preciso che sia in grado di misurare il trascorrere del tempo con una precisione pari ad almeno 5 millesimi di secondo. (BlueDragon: completo)
4.1.3: Sincronizzare il disegno di ogni frame in ad 1/50 di secondo aggiungendo un loop che attende il termine dei 20 millisecondi previsti per il disegno di un intero frame prima di lasciare il controllo. (71104: completato)
4.1.4: Input deve ignorare la pressione di tasti uguali e consecutivi se l'intevallo tra loro è inferiore ad 1/50 di secondo segnalando solo la pressione del primo. (^TiGeRShArK^: completato)
4.1.5: Refactoring. Aggiungere a drawable la capacita di specificare il layer su cui disegnare i vari oggetti. (VICIUS: completo)
4.1.6: Refactoing della classe Game. spostare tutta la creazione nel costruttore e creare un gameLoop come si deve.


ciao

Ultima modifica di VICIUS : 03-11-2005 alle 00:45.
VICIUS è offline  
Old 01-11-2005, 15:47   #3
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da VICIUS
Task:
4.1.3: Sincronizzare il disegno di ogni frame in ad 1/50 di secondo aggiungendo un loop che attende il termine dei 20 millisecondi previsti per il disegno di un intero frame prima di lasciare il controllo.
Scusa Vicius ma perché c'è questo task che impone un framerate? In quello che ha scritto Jocchan non c'è e non abbiamo bisogno di vincolare il disegno dei frame ad una certa frequenza per ottenere la temporizzazione del movimento della gemma.

Inoltre, nel 4.1.4, l'intervallo da ignorare non è un 1/10? Jocchan ha parlato di spostamenti di massimo 1 casella ogni decimo di secondo, non ogni 50esimo

Scusa se rompo ma meglio chiarire subito
BlueDragon è offline  
Old 01-11-2005, 15:51   #4
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
La tua obiezione e' giusta.

La Storia non e' implementabile esattamente come scritta, quindi abbiamo deciso di cambiare alcuni dettagli per semplificarci la vita nei task. Uno di questi dettagli e' il tempo di spostamento da una casella e l'altra che invece di essere 1/10 di secondo esatto, sara' qualcosa di leggermente diverso. Alla fine del Ciclo 4 il Customer decidera' se il tempo sara' di suo gradimento oppure vorra' delle variazioni.

Dato questo, abbiamo deciso che sara' piu' semplice implementare quanto richiesto sincronizzando il gioco al cinquantesimo e abbiamo aggiunto il task relativo.
fek è offline  
Old 01-11-2005, 16:25   #5
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
io vorrei suggerire un'altra maniera (secondo me migliore) di temporizzare il gioco, premesso che il gioco deve essere temporizzato perché non può girare a velocità diverse su computers diversi.
secondo me Input deve tenere un flag per ogni tasto che intercetta che indica se il tasto al momento è alzato o abbassato (e questo già succede) e poi bisogna introdurre un timer (non so come si possa fare in Java...) con una certa frequenza e reagire ad ogni scatto del timer reagendo alla pressione dei tasti attualmente abbassati e disegnando un frame. non ho capito se questo corrisponde a quello che si è progettato in questa storia, ma non mi sembra...
inoltre sarebbe anche bene implementare qualcosa di simile a quello che succede in Win32 coi messaggi WM_TIMER, i quali non vengono immessi nella coda se il timeout è scaduto ma l'ultimo messaggio della coda è un altro WM_TIMER che l'applicazione deve ancora processare.
secondo me la Sleep deve essere evitata come la peste, a meno che non si lavori in multithreading.
71104 è offline  
Old 01-11-2005, 16:59   #6
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Quote:
Originariamente inviato da BlueDragon
Scusa Vicius ma perché c'è questo task che impone un framerate? In quello che ha scritto Jocchan non c'è e non abbiamo bisogno di vincolare il disegno dei frame ad una certa frequenza per ottenere la temporizzazione del movimento della gemma.

Inoltre, nel 4.1.4, l'intervallo da ignorare non è un 1/10? Jocchan ha parlato di spostamenti di massimo 1 casella ogni decimo di secondo, non ogni 50esimo

Scusa se rompo ma meglio chiarire subito
In questo dettaglio sono stato volutamente vago, ho solo dato un tempo di riferimento, in modo che poi fosse possibile scegliere l'implementazione più adeguata per la temporizzazione.

In questo caso, anche se apparentemente un pò ci allontaniamo dalla storia, alla fine il risultato sarà molto simile a quello desiderato (a parte il tempo che - come ho detto poco fa - è solo indicativo).

Il customer non sa in che modo sono fisicamente implementate le varie feature, ed al termine del ciclo si limiterà a valutare se il risultato coincide o no con quello desiderato
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline  
Old 01-11-2005, 17:10   #7
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Quote:
Originariamente inviato da VICIUS
Task:
4.1.1: Disegnare l'immagine Jpg dello sfondo alle coordinate 0x0 di dimensione 800x600 pixel dietro a tutti gli altri elementi presenti nella finestra.
Ci provo.. ^^
Primo task, non mi picchiate se non va bene qualcosa
Tempo previsto: 1 giorno
cover è offline  
Old 01-11-2005, 17:18   #8
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
La jpg sarà il file back000.jpg, che in questo momento Antares88 sta committando.

@Vicius: per favore potresti aggiungere questo task, prima del 4.1.1?
Task 4.1.0: Creare uno sfondo 800x600 in jpg, con nome del file back000.jpg
Il task in questione è già completato da Antares
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline  
Old 01-11-2005, 17:27   #9
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da VICIUS
Task:
4.1.2: Creare un timer molto preciso che sia in grado di misurare il trascorrere del tempo con una precisione pari ad almeno 5 millesimi di secondo.
Mi prenoto per il 4.1.2.

La risposta è System.currentTimeMillis().
Va bene? Ho vinto qualche cosa?

Dalla documentazione Java, classe System:
Quote:
public static long currentTimeMillis()

Returns the current time in milliseconds. Note that while the unit of time of the return value is a millisecond, the granularity of the value depends on the underlying operating system and may be larger. For example, many operating systems measure time in units of tens of milliseconds.
See the description of the class Date for a discussion of slight discrepancies that may arise between "computer time" and coordinated universal time (UTC).


Returns:
the difference, measured in milliseconds, between the current time and midnight, January 1, 1970 UTC.
See Also:
Date
L'unico limite è il sistema operativo sottostante, ma non credo sia un limite aggirabile in altro modo..
BlueDragon è offline  
Old 01-11-2005, 17:40   #10
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da BlueDragon
L'unico limite è il sistema operativo sottostante, ma non credo sia un limite aggirabile in altro modo..
in Windows esistono anche i timers ad alta risoluzione che arrivano ben al di sotto la decina di millisecondi; se alla Sun vedono la decina di ms come un limite sicuramente avranno usato i timers ad alta risoluzione per implementare la JVM per Windows.
71104 è offline  
Old 01-11-2005, 17:55   #11
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da cover
Ci provo.. ^^
Primo task, non mi picchiate se non va bene qualcosa
Tempo previsto: 1 giorno
Ok. è tutto tuo.

ciao
VICIUS è offline  
Old 01-11-2005, 17:56   #12
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da Jocchan
La jpg sarà il file back000.jpg, che in questo momento Antares88 sta committando.

@Vicius: per favore potresti aggiungere questo task, prima del 4.1.1?
Task 4.1.0: Creare uno sfondo 800x600 in jpg, con nome del file back000.jpg
Il task in questione è già completato da Antares
NO. fek a detto che non li devo scrivere i task di voi grafici. Siete troppo veloci

ciao
VICIUS è offline  
Old 01-11-2005, 17:56   #13
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da 71104
in Windows esistono anche i timers ad alta risoluzione che arrivano ben al di sotto la decina di millisecondi; se alla Sun vedono la decina di ms come un limite sicuramente avranno usato i timers ad alta risoluzione per implementare la JVM per Windows.
Sì, infatti usando currentTimeMillis su Windows mi segnala fino al singolo millisecondo
BlueDragon è offline  
Old 01-11-2005, 17:59   #14
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Quote:
Originariamente inviato da BlueDragon
Mi prenoto per il 4.1.2.

La risposta è System.currentTimeMillis().
Va bene? Ho vinto qualche cosa?

Dalla documentazione Java, classe System:

L'unico limite è il sistema operativo sottostante, ma non credo sia un limite aggirabile in altro modo..
Vediamo che cosa scappa fuori.

ciao
VICIUS è offline  
Old 01-11-2005, 18:02   #15
Jocchan
Senior Member
 
L'Avatar di Jocchan
 
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
Quote:
Originariamente inviato da VICIUS
NO. fek a detto che non li devo scrivere i task di voi grafici. Siete troppo veloci

ciao
Più che veloci, ci siamo portati avanti con il lavoro
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam.
Jocchan è offline  
Old 01-11-2005, 18:02   #16
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da BlueDragon
Mi prenoto per il 4.1.2.

La risposta è System.currentTimeMillis().
Va bene? Ho vinto qualche cosa?

L'unico limite è il sistema operativo sottostante, ma non credo sia un limite aggirabile in altro modo..
Chiaramente non e' un task testabile, pero' voglio vedere una classe Wrapper che ci permetta, se necessario, di cambiare l'implementazione del Timer. Overengineering? No, Facade Pattern dai Design Pattern

Il metodo getTime() della classe deve darmi il tempo in millisecondi passato dalla creazione della sua istanza.
fek è offline  
Old 01-11-2005, 18:04   #17
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da 71104
io vorrei suggerire un'altra maniera (secondo me migliore) di temporizzare il gioco, premesso che il gioco deve essere temporizzato perché non può girare a velocità diverse su computers diversi.
Per ora andiamo avanti con la soluzione richiesta dai task per due motivi:
1) perche' l'ho gia' fatto almeno venti volte e so che funziona
2) perche' so che funziona perche' l'ho gia' fatto almeni venti volte

Ed infine perche' sono letteralmente tre righe di codice da implementare, e' semplice, e non richiede nessuna infrastruttura per registrare callback e scatenare eventi di sincronizzazione.
fek è offline  
Old 01-11-2005, 18:15   #18
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Quote:
Originariamente inviato da VICIUS
Task:
4.1.1: Disegnare l'immagine Jpg dello sfondo alle coordinate 0x0 di dimensione 800x600 pixel dietro a tutti gli altri elementi presenti nella finestra. (cover: 1 giorno)

Test ( ):

Codice:
public class TestBackground extends TestCase
{   
    private Background background;
    
    public void setUp()
    {
        background = new Background("back000", ".jpg");
    }
    
    public void testBackgroundPosition()
    {
        assertEquals("X origin must be 0",
            0F, background.getX());
        assertEquals("Y origin must be 0",
            0F, background.getY());
    }
    
    public void testBackgroundWidthAndHeight()
    {
        assertEquals("Width must be equal to the width of the window",
            Game.getWindowWidth(), background.getWidth());
        assertEquals("Height must be equal to the height of the window",
            Game.getWindowHeight(), background.getHeight());
    }
    
    public void testBackgroundSpriteNotNull()
    {
        assertNotNull(background.getSprite());
    }
    
    public void testDraw()
    {
        MockEngine engine = new MockEngine();
        
        background.draw(engine);
        assertEquals(1, engine.getNumberOfQuadsDrawn());        
    }
}
A proposito, a chi devo chiedere l'user/pwd per il commit? fek? vicius?
cover è offline  
Old 01-11-2005, 19:06   #19
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Bene! Hai anche aggiunto il background alla classe Game per vederlo in gioco?
fek è offline  
Old 01-11-2005, 19:14   #20
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Quote:
Originariamente inviato da fek
Bene! Hai anche aggiunto il background alla classe Game per vederlo in gioco?

Sì, ho già finito tutto ^^
Ho anche spostato la griglia per farla stare dentro il riquadro dello sfondo di esempio. Inoltre c'era anche un problema nel disegnare la griglia in game.
Era usato: new Rectangle(TOP, LEFT, WIDTH+LEFT, HEIGTH+TOP)
quando invece dev'essere: new Rectangle(LEFT, TOP, WIDTH+LEFT, HEIGTH+TOP)

chi mi passa via pm l'autenticazione per il commit?
fek?

Ultima modifica di cover : 01-11-2005 alle 19:18.
cover è offline  
 Discussione Chiusa


Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
NIO stabilisce il nuovo record di scambi...
Dell Private Cloud sempre più ape...
Ennesimo incidente per la guida autonoma...
Dopo le maniglie, è il turno dei ...
Addio incendi incontrollati? Svolt dice ...
WINDTRE si mette in proprio: vender&agra...
The Mandalorian & Grogu: il trailer ...
OpenClaw sotto attacco: i malware infost...
Resident Evil Requiem: pre-load dal 25 f...
Vaticano, la Messa si traduce in 60 ling...
Kia prepara il facelift della Kia EV5: n...
La nuova Alpine A110 elettrica sfrutterà...
Il nuovo entry level della gamma MacBook...
Panasonic 55'' QLED con Dolby Vision e F...
TOP 250 PLUS e TOP 300 PLUS ritornano: v...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 17:45.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v