Katia96
Katia96 - Habilis - 218 Punti
Rispondi Cita Salva
ho fatto già il programma, ma ora lo dobbiamo modificare con quelle 3 varianti, se me lo potete modificare, grazie al migliore, ci conto

/* gioco della battaglia navale. in ogni casella
0 = mare
1 = nave
*/
#include<stdio.h>
#include<stdlib.h>
#include<windows.h> /* serve per la funzione Sleep */
#include<time.h> /* serve per la funzione srand */

#define dim 3 /* dimensioni della griglia di gioco */
#define num_navi 3 /* numero di navi da abbattere */

int batt[dim][dim]; /* griglia di gioco vera */
int battv[dim][dim]; /* griglia di gioco visualizzata */
int r,c,i,j,cont;


/* inizializzazione griglia: all'inizio è tutto mare */
void InizializzaGriglia()
{
for(i=0; i<dim; i++)
for(j=0; j<dim; j++)
{
battv[j]=0;
batt
[j]=0;
}
}

/* posizionamento navi */
void PosizionaNavi()
{
cont = 0;
printf("sto posizionando le mie navi...\n";);
while (cont<num_navi)
{
/* estrai a caso l'indice di riga tra 0 e 9*/
srand(time(NULL));
r = rand()%dim;
/* estrai a caso l'indice di colonna tra 0 e 9 */
Sleep(10);
srand(time(NULL));
c = rand()%dim;
/* piazza una nave in riga r e colonna c */
if (batt[r][c]==0)
{
batt[r][c]=1;
cont++;
}
}
}

/* visualizza griglia */
void VisualizzaGriglia()
{
for(i=0; i<dim; i++)
{
for(j=0; j<dim; j++)
printf("%d ",battv[j]);
printf("\n";);
}
}

/* colpo di cannone */
void Spara()
{
printf("riga dove fare fuoco: ";);
scanf("%d", &r);
printf("colonna dove fare fuoco: ";);
scanf("%d", &c);
if (batt[r][c]==1)
{
printf("nave colpita!\n";);
cont++;
printf("restano da colpire %d navi!\n", num_navi-cont);
battv[r][c]=1;
}
else
{
printf("mancato!\n";);
printf("restano da colpire %d navi!\n", num_navi-cont);
}
system("pause";);
}

/* main */
main()
{
InizializzaGriglia();
PosizionaNavi();
/* inizia il gioco */
cont = 0;
while (cont<num_navi)
{
system("cls";);
VisualizzaGriglia();
Spara();
}
printf("Bravo, hai sconfitto la flotta nemica!\n";);
system("pause";);
}

/* varianti:
- considerare il caso di sconfitta se dopo un tot numero di spari non si sono abbattute tutte le navi
- gioco a due giocatori (in questo caso, ognuno posiziona le proprie navi)
- gioco con navi di dimensioni diverse */

Questa risposta è stata cambiata da TeM (24-05-14 16:02, 3 anni 4 mesi 6 giorni )
TeM
TeM - Eliminato - 23454 Punti
Rispondi Cita Salva
Ciao Katia. Dato che il programma che proponi praticamente ve lo ha dato
il professore, vedasi qui, l'unico vostro compito consta nell'aggiungere quelle
tre semplici varianti. Se noi te le scrivessimo di sana pianta tu cosa impareresti??
Probabilmente molto poco, se non niente, in quanto queste cose le si imparano
solamente provandoci. Quindi, ecco, ora ti do qualche idea e poi, se vorrai un'ul-
teriore mano, cerca di mettere in pratica i consigli scrivendo qui il tuo codice.

Il primo punto è davvero semplice. Basta mettere un'ulteriore condizione nel ci-
clo while del main (pilotato da un ulteriore contatore) che tenga conto dei tentativi
effettuati: nel caso in cui si terminino i tentativi e le navi non siano tutte affondate
(tramite un if) basta stampare "Game over".

Il secondo è un po' più complicato ma non di molto. Dovrai raddoppiare i campi
di battaglia (reali e virtuali) e ogni qual volta si ha un cambio di giocatore che spa-
ra occorrerà considerare un differente campo di battaglia. Inoltre, come indicato
nella consegna, va tolta la funzione che genera le navi a random, bensì ogni gio-
catore, prima di cominciare il gioco, deve disporre le proprie navi inserendo le
coordinate tramite tastiera ( fin qui le navi sono solo "unitarie" ).

Il terzo è ancora un po' più difficile da gestire in quanto le navi possono essere
anche binarie e volendo ternarie (facendo riferimento sempre ad una griglia 3x3).
In ogni modo prima vediamo di sistemare i primi due punti e in un secondo mo-
mento pensiamo anche a quest'ultima variante. ;)
TeM
TeM - Eliminato - 23454 Punti
Rispondi Cita Salva
Ma scusa un attimo, hai testato quello che hai scritto
in Bloodshed Dev-C++?? Direi proprio di no...

1. Devi scrivere int contspari=0; dato che in
precedenza tale variabile non l'avevi dichiarata.

2. Tale contatore deve essere incrementato nel
ciclo while del main, altrimenti non serve a nulla
dichiararlo se poi non lo si usa.

3. Il controllo sul numero di spari va messo anche
nella condizione di uscita dello stesso ciclo while.

4. La stampa di "Bravo, etc etc" va fatta solo nel
caso in cui all'uscita dal ciclo while il contatore
spari è inferiore al numero massimo fissato.

Sistema un po' il codice che poi procediamo. ;)
Katia96
Katia96 - Habilis - 218 Punti
Rispondi Cita Salva
main()
{
InizializzaGriglia();
PosizionaNavi();
/* inizia il gioco */
cont = 0;
int contspari=0;
while (cont<num_navi)
{
system("cls";);
VisualizzaGriglia();
Spara();
}
printf("Bravo, hai sconfitto la flotta nemica!\n";);
else
if(contspari>20)
contspari++;
printf("Game Over";);
system("pause";);
}

non capisco come metterlo nel ciclo while
TeM
TeM - Eliminato - 23454 Punti
Rispondi Cita Salva
Non ci siamo ancora... vedi un po' come va scritto il main nella prima variante:



Ti pare chiaro?? :)
Questo topic è bloccato, non sono ammesse altre risposte.
Come guadagno Punti nel Forum? Leggi la guida completa
In evidenza
Classifica Mensile
Vincitori di agosto
Vincitori di agosto

Come partecipare? | Classifica Community

Community Live

Partecipa alla Community e scala la classifica

Vai al Forum | Invia appunti | Vai alla classifica

jonnyseo

jonnyseo Geek 45 Punti

VIP
Registrati via email