|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
![]() |
#316 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Una cosa simile mi era capitata con il controllo in PosizionaNavi() che provvede a verificare se in una posizione c'è già una nave oppure no propostami da web. In quel caso sono riuscito a sistemare il problema come mostro qui sotto: Codice:
// Scansione duplicati for(Count2 = 0; Count2 < (nave-1); Count2++) { if(mArray[Count2].colonna == coorx[0]) existingCol = TRUE; else existingCol = FALSE; if(mArray[Count2].riga == atoi(tmpStr)) existingRaw = TRUE; } Ora ho provato la stessa soluzione per Colpo() Codice:
for(Count = 0; Count < colpo + 1; Count++) { if(pArray[Count].colonna == coorx[0]) existingCol = TRUE; else existingCol = FALSE; if(pArray[Count].riga == atoi(tmpStr)) existingRaw = TRUE; } Dov'è l'errore? Ultima modifica di Alhazred : 30-07-2004 alle ore 10.56.32 |
![]() |
![]() |
![]() |
#317 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Vabbè, ma che pizza, appena posto un problema mi viene la soluzione...
Ho tolto l'else in neretto ed ho messo existingCol = FALSE; existingRaw = FALSE; come prime istruzioni del ciclo while, ora funziona. |
![]() |
![]() |
![]() |
#318 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
No, in questo modo mi riconosce i doppioni, ma mi torna il problema delle coordinate incrociate dette per PosizionaNavi() qualche post sopra...
![]() |
![]() |
![]() |
![]() |
#319 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Stavolta ho risolto davvero
Codice:
for(Count = 0; Count < colpo + 1; Count++) { existingCol = FALSE; existingRaw = FALSE; if(pArray[Count].colonna == coorx[0]) existingCol = TRUE; if(pArray[Count].riga == atoi(tmpStr)) existingRaw = TRUE; if((existingCol == TRUE) && (existingRaw == TRUE)) break; } ![]() |
![]() |
![]() |
![]() |
#320 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Questo non l'avevo considerato un problema perché mi sembrava una cosa stupida da sistemare, ma non è così.
Quando un'istanza è in attesa del colpo avversario mette in output una stringa che avverte di questa cosa e attende il rilascio del semaforo prima di effettuare i controlli ed accettare a sua volta una mossa dal proprio utente. Il problema è questo, mi è capitato non accorgendomene di inserire le coordinate di una mossa quando era attiva la finestra dell'istanza in attesa, me ne sono accorto, ho selezionato quella che aspettava l'input dall'utente ed ho reinserito le coordinate pensando che fosse tutto ok, ma... l'istanza che prima era in attesa ha ricordato la coordinata messa quando aspettava la mossa avversaria e l'ha accettata, non mi ha chiesto di inserirla. Pensavo di risolvere mettendo un fflush(stdin) all'inizio di Colpo(), ma non funziona. Questa non so davvero come sistemarla (almeno al momento). Idee per la soluzione? |
![]() |
![]() |
![]() |
#321 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Nessuna idea?
![]() |
![]() |
![]() |
![]() |
#322 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Veramente stavo per dirti di utilizzare scanf al posto di getch() ma anche questa funzione non è esente da questo scoglio bastardello.
L'utilizzo di fflush(stdin) che altro non fa che svuotare il buffer della tastiera risulta essere cosa inutile dato che teoricamente getch() dovrebbe farlo già da se. Teoricamente la possibile "soluzione" che mi viene in mente è quella di accertarsi di essere l'istanza (meglio chiamarlo processo, visto che siamo in NT) adibita all'input e consentire il getch(). Qui ci vorrebbe il Web (che ormai sarà ai Caraibi a spassarsela), che illuminasse me e te con la sua lampadina. Anche Pholcus o Dav (in Java come risolveresti ?) non sarebbero male. (L'appello è rivolto a tutti però !) |
![]() |
![]() |
![]() |
#323 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
![]() ![]() ![]() |
Aspetta...l'illuminazione...Il prof che dice ?
|
![]() |
![]() |
![]() |
#324 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Avevo pensato di usare fflush(stdin) perché il mio ragionamento era questo: le coordinate che metto quando non dovrei vengono messe in un buffer, quindi prima del getch() lo svuoto (non sapevo lo facesse anche il getch()) e sono a posto... invece no
![]() Non è che posso disabilitare in qualche modo la tastiera mentre un processo è in attesa e poi riabilitarla quando deve ricevere l'input? |
![]() |
![]() |
![]() |
#325 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Quota:
![]() Riassumo il problema: un processo A è in attesa di una mossa dal processo B, al quale poi manderà la propria mossa. Solo che se l'utente inserisce la propria mossa prima che quella di B sia arrivata ad A, quando questa arriva, la mossa digitata anzitempo viene lo stesso mandata a B. Possibile soluzione: usare una variabile temporanea. Il processo che è in attesa di input dall'utente registra l'input in una variabile buffer, e ogni volta che riceve un nuovo input (perchè l'utente si è appoggiato col gomito sulla tastiera, perchè un tizio da dietro si diverte a fargli gli scherzetti, perchè parti del soffitto crollano sui tasti spingendoli...) sovrascrive la variabile buffer. In questa variabile buffer viene salvato oltre all'input anche il timestamp del salvataggio. Il thread che gestisce la ricezione e l'invio delle mosse da e verso B, quando riceve la mossa da B, comincia a leggere il timestamp di buffer fino a quando è maggiore del timestamp relativo alla ricezione della mossa da B: a questo punto invia la mossa a B. E' un po' pesantino in effetti... Si potrebbe farlo funzionare anche al contrario: il trhread di ricezione possiede un attributo boolean received, che pone a false appena inviata la mossa a B e a true appena ricevuta una mossa da B. Il processo in attesa di input verifica ogni tot (poco però eh!) il valore di questa variabile e dopo aver riscontrato che è true pone a true un proprio attributo accepting: gli input vengono inviati al thread di ricezione/invio solo se accepting è true, altrimenti l'input viene posto a null e si rimane in attesa di nuovi input. Oh, fa un po' ribrezzo ma per il momento non mi viene in mente nulla di più carino ![]() Ciao ![]() |
|
![]() |
![]() |
![]() |
#326 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ecco, adesso mi è venuto il mal di testa
![]() ![]() ![]() |
![]() |
![]() |
![]() |
#327 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Quota:
![]() Non voglio mica farlo venire pure a me il mal di testa! ![]() |
|
![]() |
![]() |
![]() |
#328 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Se non saltano fuori delle soluzioni risolverò inserendo questa stringa subito prima che il processo si metta in attesa
printf("Scollegare il cavo della tastiera!"); ![]() ![]() |
![]() |
![]() |
![]() |
#329 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
![]() |
Quota:
![]() ![]() ![]() |
|
![]() |
![]() |
![]() |
#330 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Mi è venuta un'idea, c'è modo di dare il focus ad una determinata finestra di console?
In questo modo potrei mettere automaticamente in primo piano quella che deve ricevere l'input dall'utente e sarebbe anche più comodo che non dover spostare il mouse e selezionare manualmente la finestra. |
![]() |
![]() |
![]() |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
![]() |
||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
La grande battaglia dei super eroi! | Sbavi | Chiacchiere in libertà | 83 | 27-02-2009 10.43.39 |
battaglia navale in c# | Joy&Lu | Programmazione | 3 | 01-09-2008 15.08.58 |
Il Signore degli Anelli - La Battaglia per la terra di mezzo | Darth Maul | Masterizzazione Giochi Games | 0 | 01-09-2006 18.16.18 |
[C] Battaglia Navale (versione client server) in Linux | Nanri | Programmazione | 11 | 06-08-2005 14.50.27 |