|
| 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 » | |
![]() |
#166 | |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Quota:
Va bene così? Codice:
for(i=0;i<numeroNavi;i++){ mArray[i].colonna = ' '; mArray[i].riga = 0; } |
|
![]() |
![]() |
![]() |
#167 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
![]() |
...visto che diverse volte hai utilizzato in modo "strano" la & (e commerciale), vorrei dirti che:
- quando passi un vettore non hai bisogno di mettere la & se devi puntare direttamente al primo dei suoi elementi... - la & serve per passare l'inirizzo di memoria di una variabile. infatti: char *ptrCarattere = &Stringa[6] // assegni al puntatore l'indirizzo spero di esserti stato d'aiuto.. ![]()
___________________________________
...ad ogni alba sorgerà il tuo profumo |
![]() |
![]() |
![]() |
#168 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Non è "paura".. è certezza.. che siano sporche se non le inizializzi esplicitamente .. e questo vale anche per tutte le variabili che userai ..
Il codice postato è corretto... naturalmente mArray deve avere "numeroNavi" elementi. Bye ![]() |
![]() |
![]() |
![]() |
#169 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Non riesco proprio a farmi stampare i valori corretti delle righe, allego tutto il codice aggiornato.
Il codice che dovrebbe stampare colonna e riga è alla fine di AggiornaCampo. |
![]() |
![]() |
![]() |
#170 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
La riga di stampa corretta è questa:
Codice:
printf("\n\r%c - %d ", mArray[n].colonna, mArray[n].riga); Usi sempre tanti puntatori e tante referenze ... attenzione .. ![]() Bye ![]() |
![]() |
![]() |
![]() |
#171 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Se tolgo quei puntatori, in esecuzione ottengo il messaggio "... la memoria non poteva essere Read!"
![]() Edit: con l'istruzione da te proposta il messaggio d'errore non appare più, ma la riga è sempre uguale a -35 |
![]() |
![]() |
![]() |
#172 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Ecco la versione corretta della "posizionnanavi' che ora gestisce le colonne e valorizza correttamente il t_mossa .. sostituiscila nel codice e, se ti va, commenta le modifiche che ho apportato.
Attenzione perché non ho gestito il solito 13, occupatene tu, quando l'utente batte INVIO per saltare l'inserimento della seconda cifra delle righe... Codice:
void PosizionaNavi(){ int Count = numeroNavi, nave = 1; char c_col = ' '; char c_raw = ' '; char coorx[3]; char tmpStr[3]; coorx[0] = '\0'; tmpStr[0] = '\0'; for(i=0;i<numeroNavi;i++) { mArray[i].colonna = ' '; mArray[i].riga = 0; } printf("Inserire le coordinate per %i navi.\n",numeroNavi); while(Count > 0) { printf("Nave %i: Colonna_", nave); // A-J while((c_col < 65) || (c_col > 74)) // invio = conferma c_col = getch(); coorx[0] = c_col; mArray[nave-1].colonna = coorx[0]; printf("%c Riga_", c_col); c_col = ' '; // reset // 0-9 while(((c_raw < 48) || (c_raw > 57))) // invio = conferma c_raw = getch(); printf("%c", c_raw); tmpStr[0] = c_raw; c_raw = ' '; // reset // 0-9 o ENTER per non dare coordinata a cifra singola while(((c_raw < 48) || (c_raw > 57)) && (c_raw != 13)) // invio = conferma c_raw = getch(); printf("%c", c_raw); tmpStr[1] = c_raw; c_raw = ' '; // reset printf("\n\r"); mArray[nave-1].riga = atoi(tmpStr); Count --; nave++; } } ![]() Ultima modifica di P8257 WebMaster : 13-07-2004 alle ore 12.10.33 |
![]() |
![]() |
![]() |
#173 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Quota:
![]() Bye ![]() |
|
![]() |
![]() |
![]() |
#174 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
ERRATA CORRIGE
... Non preoccuparti del "13".. viene gestito correttamente, se insirisci righe ad una sola cifra... Bye ![]() |
![]() |
![]() |
![]() |
#175 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ok, grazie
![]() |
![]() |
![]() |
![]() |
#176 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ho pensato che un giocatore potrebbe ripensare alla posizione di una nave, quindi vorrei chiedere alla fine una conferma sulle posizioni inserite, se il giocatore risponde di sì si va avanti, altrimenti viene ripetuta la richiesta di inserimento delle coordinate.
Ho provato a scrivere questo codice, ma credo di avere dei problemi nella gestione della risposta. Ho provato utilizzando un while come per le coordinate, ma non mi riesce, poi ho scritto questo e non funziona lo stesso Codice:
while(!corretto){ while(Count > 0) { printf("Nave %i: Colonna_", nave); // A-J while((c_col < 65) || (c_col > 74)) c_col = getch(); coorx[0] = c_col; mArray[nave-1].colonna = coorx[0]; printf("%c Riga_", c_col); c_col = ' '; // reset // 0-9 while(((c_raw < 48) || (c_raw > 57))) c_raw = getch(); printf("%c", c_raw); tmpStr[0] = c_raw; c_raw = ' '; // reset // 0-9 o ENTER per non dare coordinata a cifra singola while(((c_raw < 48) || (c_raw > 57)) && (c_raw != 13)) c_raw = getch(); printf("%c", c_raw); tmpStr[1] = c_raw; c_raw = ' '; // reset printf("\n\r"); mArray[nave-1].riga = atoi(tmpStr); Count --; nave++; } printf("Confermi le posizioni delle navi? (S/N) "); conferma = getchar(); if((conferma != 'N') || (conferma != 'S')) do { fflush(stdin); printf("\nConfermi le posizioni delle navi? (S/N) "); conferma = getchar(); }while((conferma != 'N') || (conferma != 'S')); if(conferma == 'S') corretto = TRUE; else{ for(i=0;i<numeroNavi;i++) { mArray[i].colonna = ' '; mArray[i].riga = 0; } Count = numeroNavi; navi = 1; } } Ultima modifica di Alhazred : 13-07-2004 alle ore 16.03.47 |
![]() |
![]() |
![]() |
#177 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Mi stavo impicciando con l'uso dei comparatori, ho risolto.
|
![]() |
![]() |
![]() |
#178 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Ho scritto questa funzione che controlla se si sono inserite una o più volte le stessa coordinate in modo che si debbano inserire necessariamente tutte posizioni diverse per le navi:
Codice:
BOOL Ripetizioni(){ int n = 2; int quante = 0; BOOL esiste = FALSE; //Controlla la 1° coordinata con le seguenti 4 for(n = 2; n<numeroNavi; n++) if(mArray[0].colonna == mArray[n].colonna && mArray[0].riga == mArray[n].riga) quante++; n = 2; //Controlla la 2° coordinata con le seguenti 3 for(n = 2; n<numeroNavi; n++) if(mArray[1].colonna == mArray[n].colonna && mArray[1].riga == mArray[n].riga) quante++; n = 3; //Controlla la 3° coordinata con le seguenti 2 for(n = 3; n<numeroNavi; n++) if(mArray[2].colonna == mArray[n].colonna && mArray[2].riga == mArray[n].riga) quante++; //Controlla la 4° coordinata con la 5° if(mArray[3].colonna == mArray[4].colonna && mArray[3].riga == mArray[4].riga) quante++; if(quante > 0) esiste = TRUE; return(esiste); } Come posso fare? Ultima modifica di Alhazred : 13-07-2004 alle ore 18.38.20 |
![]() |
![]() |
![]() |
#179 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
![]() |
Per renderla parametrica dovresti utilizzare un'array di appoggio che incrementi ogni volta .. memorizzando in essa le coordinate correnti da controllare ed utilizzando un unico ciclo ... personalmente la vedo poco efficento come soluzione.. ti consiglio di controllarle al momento dell'inserimento.. nella "posizionaNavi" bastano un paio di righe di codice per farlo...
Bye ![]() |
![]() |
![]() |
![]() |
#180 |
Made in Japan
Top Poster
Registrato: 04-07-2001
Messaggi: 4.461
![]() |
Credo anch'io che mettere il controllo direttamente in PosizionaNavi sia meglio, stavo solo cercando un modo di non impantanarmi troppo con i cicli while.
|
![]() |
![]() |
![]() |
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 |