|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
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:
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
|
|
|
|
#2 |
|
Senior Member
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. |
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
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 |
|
|
|
|
|
#4 |
|
Senior Member
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.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
#5 |
|
Bannato
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. |
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
Quote:
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. |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Quote:
Primo task, non mi picchiate se non va bene qualcosa Tempo previsto: 1 giorno |
|
|
|
|
|
#8 |
|
Senior Member
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. |
|
|
|
|
#9 | ||
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
La risposta è System.currentTimeMillis(). Va bene? Ho vinto qualche cosa? Dalla documentazione Java, classe System: Quote:
|
||
|
|
|
|
#10 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2002
Messaggi: 418
|
Quote:
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Jul 2005
Città: Silent Hill
Messaggi: 1471
|
Quote:
__________________
DIAMOND CRUSH - Aut viam inveniam, aut faciam. |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
Il metodo getTime() della classe deve darmi il tempo in millisecondi passato dalla creazione della sua istanza.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Quote:
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.
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Quote:
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());
}
}
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11794
|
Bene! Hai anche aggiunto il background alla classe Game per vederlo in gioco?
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: May 2002
Città: Milan
Messaggi: 572
|
Quote:
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. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:45.










):








