Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-10-2005, 22:28   #21
cisc
Senior Member
 
L'Avatar di cisc
 
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
ecco il test in gemTestCollisionSound:

Codice:
    public void testCollisionSoundNearWall() 

    {

        Input input=Input.createInputForTesting();

        gem.setCollisionSound(sound);

        gem.move(-67.99f,0);

        assertEquals(gem.getWidth()/2+0.01f, gem.getX(), 0.001f);

        assertTrue (gem.isPulsing());

        assertFalse (sound.wasPlayed());

        gem.draw(null);

        gem.reactToInput(input);

        assertFalse (sound.wasPlayed());

    }
questo codice testa il fatto che senza dare un move (ma solo a causa del "pulsing") si verifica una collisione che genera un sound, testare i suoni a ripetizioni che in realtà si verifichiano è impossibile!!!
__________________
GNU MyServer Wants YOU!!
We live thinking we will never die. We die thinking we had never lived. Jason Becker
cisc è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 22:32   #22
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da cisc
cionci a quanto ho capito il problema è che quando ti avvicini in un certo modo, il diamante sta pulsando e quindi, dato che il codice delle collisioni controlla valori che in realtà stanno variando, si crea questo bug, penso che la soluzione più semplice sia nel mantenere altre due variabili che memorizzino le dimensioni "statiche" del diamante, l'unico problema che sto avendo è il fare un test che mi rilevi il bug..
Concordo con cisc...tra l'altro io suggerirei anche qualche refactoring...

Per esempio a me CheckForCollision risulta molto più chiaro così:
Codice:
   private boolean checkForCollision(float dx, float dy)
    {

        boolean collided = false;
        
        if(testLeftEdgeCollision())
        {
            x = (width / 2);
            collided = true;
        }
        if(testRightEdgeCollision())
        {
            x = (displayWidth - (width / 2));
            collided = true;
        }
        if(testTopEdgeCollision())
        {
            y = (height / 2);
            collided = true;
        }
        if(testBottomEdgeCollision())
        {
            y = (displayHeight - (height / 2));
            collided = true;
        }

      
        return collided;
    }
Rispetto alla versione attuale in cui ci sono 3 variabili boolean. una per il return finale, una per l'angolo altosinistra ed una per l'angolo in basso a destra...che poi confondono ancora di più se si considera che la variabile collisionBottomRight viene settata dopo aver controllato Top e Bottom collision anziché dopo aver controllato Bottom e Right come suggerirebbe il nome...

Inoltre nei metodi testBottomEdgeCollision (e Left,Right,Top) non serve passare alcun valore visto che usano direttamente le variabili interne, ed infatti nella mia versione locale gli ho tolto i parametri come potete vedere dalle chiamate del metodo checkForCollision suggerito sopra.

Inoltre, visto che nel codice il movimento è true quando non ci sono collisioni, io direi che le collisioni devono essere true quando la texture tenta di superare i limiti, non quando ci arriva pari pari.
Cioè, tradotto in codice:
Codice:
    private Boolean testLeftEdgeCollision(float dx)
    {
        return ((x - (width / 2)) < 0); // < 0 anziché il <= 0
    }
Infatti quando un oggetto muove scende preciso lungo un bordo verticale (tralasciando la questione delle pulsazioni) non sta collidendo con il bordo, ma ci si sta muovendo tranquillamente accanto...quindi il movimendo dovrebbe true e la collisione false (e quindi niente suono mentre scendi o sali).
BlueDragon è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 22:39   #23
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da BlueDragon
Concordo con cisc...tra l'altro io suggerirei anche qualche refactoring...
Procedi pure al refactoring. Cerca di scrivere anche un test che verifichi la condizione che hai esposto.

Bravi tutti e due.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 22:56   #24
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da fek
Procedi pure al refactoring. Cerca di scrivere anche un test che verifichi la condizione che hai esposto.

Bravi tutti e due.
Adesso penso di andare a nanna ma domani magari tiro fuori qualche test se non l'ha già fatto qualcun'altro.
Per quanto riguarda il "procedere al refactoring", la mia copia locale è già modificata, i test non sembrano dare segnali rossi (spero di aver impostato bene ) però non so come si fa il commit verso il repository (serviva anche una pass no?).
BlueDragon è offline   Rispondi citando il messaggio o parte di esso
Old 06-10-2005, 23:50   #25
BlueDragon
Senior Member
 
L'Avatar di BlueDragon
 
Iscritto dal: Dec 2002
Messaggi: 418
Quote:
Originariamente inviato da BlueDragon
Adesso penso di andare a nanna ma domani magari tiro fuori qualche test se non l'ha già fatto qualcun'altro.
Per quanto riguarda il "procedere al refactoring", la mia copia locale è già modificata, i test non sembrano dare segnali rossi (spero di aver impostato bene ) però non so come si fa il commit verso il repository (serviva anche una pass no?).
Ok, anziché andare a nanna ho fatto il commit del refactoring di
checkForCollision(float dx, float dy)
e dei 4 metodi di check collisioni sui bordi (ma senza modificare il <=0 in <0 per adesso).
Grazie fek per la disponibilità su Msn
BlueDragon è offline   Rispondi citando il messaggio o parte di esso
Old 07-10-2005, 00:20   #26
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Grandi

Ultima modifica di cionci : 07-10-2005 alle 00:22.
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 10:36   #27
cover
Senior Member
 
L'Avatar di cover
 
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
Quote:
Originariamente inviato da fek
E invece no!

Ti sei accorto che premendo prima la freccia a destra e poi la freccia a sinistra contemporaneamente il diamante si sposta a destra, mentre vuoi che stia fermo. Bug!

Da correggere, ma non prima di un bel test che lo esponga

come? Mi dici che non te n'eri accorto? Dettagli implementatitivi...

Della serie a volte ritornano...
Appena fatto l'update, provato a far passare i test e passano tutti....ok, è tutto a posto fin'ora....lanciamo il tutto e....nooo, il background non viene caricato completamente (256*512) ma solo una piccola parte (256*40), mah..sarà normale? si passa avanti a "giocare" con il movimento,
destra --> destra
wow
sinistra --> sinistra
figata!
su --> come può andare su qualcosa che deve scendere per forza?
giu --> niente, bè, si vede che non è possibile mandare giu più velocemente la gemma...
diagonali --> ovviamente nulla
destra+sinistra (e contrario) --> nooooooooo, cos'è successo? il test fatto ai tempi non ci ha segnalato questo? come è possibile, qua urge qualche modifica...noi (o meglio jocchan ) lo vogliamo fermo, non questo:
Quote:
Exception in thread "main" java.lang.IllegalArgumentException
at it.diamonds.Grid.insertGem(Grid.java:72)
at it.diamonds.Grid.updateGemAfterInput(Grid.java:320)
at it.diamonds.Grid.reactToInput(Grid.java:158)
at it.diamonds.Game.processInput(Game.java:156)
at it.diamonds.Game.main(Game.java:52)
Lo metterei a posto io, però c'è un piccolo problema... sono ancora in fase di studio di java e pian piano mi sto guardando tutto il codice di diamond... a voi esperti quindi...

Ultima modifica di cover : 30-10-2005 alle 10:39.
cover è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 11:21   #28
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ahio... sto iniziando a pensare che il refactoring di fek del codice di cionci non sia stata una gran bella idea dopotutto...
ok: è colpa di chet!! chi sistema il codice?
(io non mi smentisco!!! )
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 11:47   #29
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da 71104
ahio... sto iniziando a pensare che il refactoring di fek del codice di cionci non sia stata una gran bella idea dopotutto...
ok: è colpa di chet!! chi sistema il codice?
(io non mi smentisco!!! )
Tu
E prima scrivi il test relativo.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 12:19   #30
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da fek
Tu
E prima scrivi il test relativo.
ok, mi prudevano giusto le mani per l'inattività
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 12:43   #31
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ragazzi, la sequenza di input da generare per mettere in risalto l'errore è piuttosto complessa, ho dovuto farmi aiutare dal debugger, comunque ecco qua il test fallimentare che ho aggiunto in TestGridReactionToInput:
Codice:
    public void testRapidInputs()
    {
        grid.insertGemIntoColumn(1, gem);
        input.generateKey(KeyCode.vk_Right);
        input.generateKey(KeyCode.vk_Left);
        grid.reactToInput(input);
        input.generateKey(KeyCode.vk_Left, false);
        grid.reactToInput(input);
        grid.reactToInput(input);
    }
cercherò di risolverlo dopo pranzo, ma penso che sarà un lavoro molto lungo O_o'
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 12:46   #32
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
errata coccige: il problema si verifica a causa dell'inserzione della stessa gemma in posizioni diverse; per correggere il problema degli "input rapidi" basta correggere quest'altro; ora provo a scrivere un altro test per quest'altro problema (ma quando pranzo oggi? )
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 12:52   #33
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
eccolo qua, si trova in TestGrid:
Codice:
    public void testSameInsertion()
    {
        grid.insertGem(4, 3, gem);
        try
        {
            grid.insertGem(4, 4, gem);
        }
        catch(IllegalArgumentException e)
        {
            return;
        }
        fail("same gem inserted at different positions");
    }
l'altro test comunque non lo elimino, può sempre servire; ancora non ho committato nulla, cercherò di risolvere i test dopo pranzo.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 13:06   #34
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Ottimo lavoro.
fek è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 13:47   #35
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da fek
Ottimo lavoro.
della serie, "ottimo lavoro, e mo' ad implementarlo ti ci voglio!!"
questo problema non è di semplice soluzione; a me vengono in mente 3 possibili maniere di risolverlo:
1) doppio for in insertGem che cicla su tutta la matrice per vedere se la gemma è già inserita da qualche altra parte
2) aggiunta di un campo row e column in Gem che identificano la posizione nella rispettiva Grid (da impostarsi a (-1, -1) nel caso la Gem non sia inserita in nessun oggetto Grid)
3) implementazione di una hash map in Grid per ritrovare facilmente tutte le Gem inserite.
mi riesce difficile giudicare quale sia la soluzione più semplice: la prima è troppo complessa (troppo codice in una volta sola), la seconda comporta una duplicazione dell'informazione che potrebbe rivelarsi difficile da gestire e potrebbe portare errori, la terza ha lo stesso problema della prima ed inoltre non so se sia fattibile perché non conosco le hash map in Java e non so se il puntatore ad un oggetto può essere usato come hash dell'oggetto stesso.
beh, io per adesso opterei per la prima ma credo che alla fine della storia sia opportuno un bel refactoring in cui eventualmente si applicherà la terza.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 13:49   #36
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Per ora vai con 1).
fek è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 14:13   #37
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da fek
Per ora vai con 1).
non mi ero accorto che è stato aggiunto un metodo findGemCell: grazie a questo la soluzione 1 diventa molto più semplice; ora cerco di risolvere l'altro test.
PS: ho anche aggiunto un piccolo test a findGemCell che serve per il modo in cui uso quel metodo in insertGem.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 14:42   #38
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
ed anche questa è fatta ^^
ho committato tutto e la build dovrebbe essere verde.
resta solo da vedere perché l'abbassamento veloce non funziona più; lo faccio io?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 14:44   #39
fek
Senior Member
 
L'Avatar di fek
 
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
Quote:
Originariamente inviato da 71104
ed anche questa è fatta ^^
ho committato tutto e la build dovrebbe essere verde.
resta solo da vedere perché l'abbassamento veloce non funziona più; lo faccio io?
C'e' un task che richiede di implementare l'abbassamento veloce?
fek è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2005, 14:46   #40
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da fek
C'e' un task che richiede di implementare l'abbassamento veloce?
lo chiede il customer ^^
comunque hai ragione, aspetterò il task
71104 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Le sonde spaziali ESA ExoMars e Mars Exp...
Roscosmos: static fire per i propulsori ...
Alcune partite NBA saranno trasmesse in ...
Intel Core 13000 e 14000 aumentano uffic...
Gemini sta per arrivare in Google Maps: ...
2 minuti per vedere le 27 offerte imperd...
Ray-Ban Meta Display: tecnologia sorpren...
Un mini PC a prezzo stracciato, non cerc...
Al via i coupon nascosti di ottobre: qua...
Ferrari Elettrica si aggiorna solo in of...
Doppio sconto sugli smartphone top Xiaom...
Samsung è sempre più prota...
ChatGPT ha pregiudizi politici? Ecco cos...
Un solo iPhone rubato ha portato alla sc...
Xiaomi 17 Ultra sta arrivando: ecco come...
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: 04:05.


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