Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 30-07-2004, 10.30.46   #316
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ho trovato il problema, ma non mi riesce la soluzione.
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;
}
Nel codice proposto da web la riga in neretto non c'era e questo faceva si che se ad esempio avevo piazzato le navi in A1 B2 e mettevo la terza in A2 o B1 risultava già posizionata perché il valore di existingCol restava sempre 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;
}
Ho già controllato i valori in pArray[], così come quelli di coorx[0] e atoi(tmpStr) stampandoli a video subito prima della comparazione negli if e risultano corretti come da input.
Dov'è l'errore?

Ultima modifica di Alhazred : 30-07-2004 alle ore 10.56.32
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 10.50.26   #317
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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.
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 10.55.56   #318
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
No, in questo modo mi riconosce i doppioni, ma mi torna il problema delle coordinate incrociate dette per PosizionaNavi() qualche post sopra...
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 11.16.06   #319
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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;
}
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 11.35.01   #320
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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?
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 16.44.13   #321
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Nessuna idea?
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 17.50.50   #322
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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ò !)
LoryOne non è collegato   Rispondi citando
Vecchio 30-07-2004, 17.51.32   #323
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Aspetta...l'illuminazione...Il prof che dice ?
LoryOne non è collegato   Rispondi citando
Vecchio 30-07-2004, 17.55.34   #324
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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?
Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 18.38.48   #325
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da LoryOne
Dav (in Java come risolveresti ?)
Mh.. non conosco com'è strutturato il codice, però posso provare a dire la mia cacchiata giornaliera (ne ho già dette tante oggi ma.. ho visto che c'è il 3x2 e così... )

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
Dav82 non è collegato   Rispondi citando
Vecchio 30-07-2004, 18.41.17   #326
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Ecco, adesso mi è venuto il mal di testa




Alhazred non è collegato   Rispondi citando
Vecchio 30-07-2004, 18.47.51   #327
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da Alhazred
Ecco, adesso mi è venuto il mal di testa




Io, prudentemente, non ho riletto quello che ho scritto!
Non voglio mica farlo venire pure a me il mal di testa!
Dav82 non è collegato   Rispondi citando
Vecchio 31-07-2004, 21.06.03   #328
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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!");

Alhazred non è collegato   Rispondi citando
Vecchio 31-07-2004, 22.10.21   #329
Dav82
Gold Member
Top Poster
 
Registrato: 18-07-2002
Messaggi: 6.399
Dav82 promette bene
Quota:
Originariamente inviato da Alhazred
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!");

No no! Che poi l'utonto invece dalla tastiera scollega il cavo di rete! E poi non funziona più nulla!!
Dav82 non è collegato   Rispondi citando
Vecchio 01-08-2004, 10.48.15   #330
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
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.
Alhazred non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
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

Orario GMT +2. Ora sono le: 07.20.48.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.