IL TESTO DICE
Scrivere un programma che simuli la battaglia tra due flotte di astronavi.
Le due flotte, terrestre e klingon, sono composte inizialmente dallo stesso numero di navi N.
La battaglia si simula come un ciclo in cui a ogni passo alcune navi dei due schieramenti sparano
sulle avversarie. Il ciclo si ripete fino a quando una flotta non è distrutta o ridotta a meno del 30%
delle navi originarie; in questo caso l’altra flotta vince.
Le N astronavi terrestri hanno uno scudo che vale 15, le N navi klingon hanno uno scudo che vale
10. Ogni nave spara un colpo da 5. Quando lo scudo va a 0 la nave è distrutta.
Si consiglia di memorizzare le navi in 2 array terra e klingon. Si consiglia di memorizzare in questi
array i valori degli scudi.
Il programma deve:
1. descrivere brevemente cosa fa (max 2 righe)
2. chiedere all’utente il valore di N con 10 = N = 20 controllandone la validità e reiterando la
richiesta finchè il valore fornito non sia valido
3. in un ciclo che rappresenta i passi della battaglia estrarre a caso quante navi terrestri Nt e
quante navi klingon Nk sparano, con Nt,Nk estratte a caso tra 0 e il numero di navi superstiti
a quel passo (Nst, Nsk)
4. far sparare le navi: fare un ciclo su Nt e uno su Nk in cui si estrae a caso l’indice della nave
nemica colpita tra 1 e (Nst, Nsk) e si toglie dal suo scudo il valore del colpo; si può colpire
più volte la stessa nave; se la nave ha scudo = 0 estrarne un’altra (quella è già distrutta)
5. a ogni passo calcolare il numero delle navi superstiti Nst e Nsk
6. quando una delle due flotte ha meno del 30% di navi superstiti ha perso la battaglia;
stampare nel main un messaggio adeguato all’esito e il numero di navi distrutte delle due
flotte.
E’ OBBLIGATORIO usare:
- una funzione che chieda in input un numero intero N che rappresenta le navi
- una funzione che generi numeri interi a caso nei dovuti limiti
- una funzione che calcoli il numero di navi superstiti delle due flotte e lo trasmetta al main
Dopo il punto 2 non so come proseguire, qualche consiglio?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
void inserimento(char *msg, char *fmt, void *v);
int randomnumber(int superstiti);
int main()
{
int N, fine=0;
srand(time(NULL));
printf("Il programma simula la battaglia tra due flotte di astronavi, i terrestri e i klingon\n");
do
{
inserimento("Inserisci un numero nell'intervallo [10,20] ","%d", &N);
if (N >= 10 && N <= 20)
{
fine = 1;
}
else
{
fine = 0;
printf("\nERRORE: il numero da inserire deve essere tra 10 e 20!\n\n");
}
}
while(!fine);
int Nt[N],Nk[N], i;
for (i=0; i<N; i++)
{
Nt[i] = 15;
Nk[i] = 10;
}
}
void inserimento(char *msg, char *fmt, void *v)
{
int fine, res, c;
fine = 0;
while (!fine)
{
printf("%s",msg);
fine = 1;
res = scanf(fmt,v);
if (ferror(stdin) || feof(stdin))
{
printf("\n");
clearerr(stdin);
fine = 0;
continue;
}
if (res < 1)
{
printf("Problema della conversione\n");
fine = 0;
}
while ((c=getchar()) != '\n');
}
}
int randomnumber(int superstiti)
{
int shooter;
shooter = rand()%(superstiti+1);
return shooter;
}