Programma in C su simulazione guerra "galattica"

di il
3 risposte

Programma in C su simulazione guerra "galattica"

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;
}

3 Risposte

  • Re: Programma in C su simulazione guerra "galattica"

    3. Per ogni nave, se è viva ( Nt[ i] > 0), fai rand() %2 per vedere se spara o no. Stessa cosa su Nk

    Dai che è facile, provaci
  • Re: Programma in C su simulazione guerra "galattica"

    Non so come usare queste informazioni, soprattutto non so come impostare il ciclo al punto 3 e la funzione che calcola i sopravvissuti
  • Re: Programma in C su simulazione guerra "galattica"

    Te lo ho appena scritto. La nave è viva se Nt[ i] >0.

    Riorganizza i due array in modo che le navi morte siano a destra. Il calcolo del totale delle navi vive Nst e Nsk è ovvio...

    Fai un banalissimo ciclo for sulle navi vive e fai rand() %2 per decidere se spara e rand % (navi vive dell'altro gruppo) per decidere chi colpisce.

    Ovviamente il numero di navi che sparano è scelto tramite distribuzione binaria e non uniforme, ma non mi pare di leggere vincoli in tal proposito. Nel caso di distribuzione uniforme dovresti sorteggiare il numero di quelle che sparano con un rand() su quelle superstiti e poi fare uno shuffle delle navi vive, ma eviterei comunque dato che mi sembri in alto mare
Devi accedere o registrarti per scrivere nel forum
3 risposte