|
From: Bernardo I. <be...@de...> - 2002-05-31 00:32:28
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Salve, in preparazione per il net-play, qualche giorno fa Poiu (o forse e' stato Lorenzo?) ha aggiunto un ID univoco alla struttura Sprita da utilizzare nel protocollo di rete per riferirsi agli sprite della partita in corso. Questo perche' ovviamente un puntatore ha significato solo nel contesto locale di un singolo computer (di un singolo processo, a dire il vero!) L'uso degli ID univoci ha pero' aperto una nuova questione: come facciamo a trovare le strutture Sprite corrispondenti agli ID ricevuti via rete? Un metodo rozzo consiste nello scorrere la lista degli Sprite a mano e cercare quello giusto. Ma questo metodo e' inefficiente. La soluzione ottimale consiste nel creare una hash-table che mappa gli ID sull'indirizzo dello Sprite. Siccome implementare una buona hash-table non e' cosa da poco, mi e' venuta l'idea di usarne una gia' fatta: nella libreria C++ del GCC esiste un'estensione all'STL standard chiamato "hash_map". Questo contenitore serve appunto ad usare una hash-table per mappare una chiave su un valore. Pero' il nostro programma e' scritto in C. Poco male: non e' difficile scrivere un semplice wrapper C intorno ad un oggetto C++. Il nuovo modulo "hash.cpp" contiene appunto questo. Per poterlo compilare ho dovuto modificare un po' i Makefile... spero che funzioni tutto anche su Windows. Ho anche messo un test "porchettoso" nel main del nostro gioco, tanto per essere sicuro che qualcuno lo provi ;-) Adesso abbiamo tutti i pezzi: ID unico e hash table. Basta creare un hash da memorizzare nella struct Game e aggiungere il codice nel costruttore e nel distruttore di Sprite per mantenerla aggiornata. Primo (piccolo) passo verso il Net-Play. Ne mancano solo 999 :-) - ---------------------------------------------------------------------- Try our multiplatform arcade classic: http://www.sf.net/projects/dlab/ - ---------------------------------------------------------------------- // Bernardo Innocenti - Develer S.r.l., R&D dept. \X/ http://www.develer.com/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux) iD8DBQE89sT6ltU4TfxqZsoRAnoHAJwMul4EFu/mUH+0tRvsP7IIhjMEEQCePpVt +7KTluAxDej0wd1FQ9AChFM= =FGGu -----END PGP SIGNATURE----- |