Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    33

    [C]Progetto Battaglia Navale

    Salve,
    io avrei un problema, mi è stato dato da fare un progetto in C, quella di una simulazione di una battaglia navale, e della gestione di un magazzino(per l'università).
    PROGETTO D’ESAME DI LABORATORIO
    1. Battaglia navale Si vuole implementare un algoritmo per la simulazione del gioco della battaglia navale tra un giocatore e il computer. Si suppone che il campo da gioco è composto da una griglia 10 x 10. Il computer ha a disposizione 3 navi grandi 3, 4 e 5 celle, rispettivamente. Ad ogni inizio partita le navi vengono disposte casualmente sulla griglia. Il giocatore identifica una posizione nel campo da gioco per verificare la presenza di una nave (ad esempio A:4) . Ad ogni turno il giocatore può consultare a video le sue precedenti mosse. Il gioco termina o quando il giocatore ha distrutto tutte le navi dell’avversario o quando supera i 20 tentativi. Effettuare almeno 5 simulazioni e stampare il minor numero di tentativi fatti nelle 3 simulazioni.
    2. Gestione magazzino Consideriamo un magazzino di prodotti elettronici. Ogni prodotto è identificato da un codice, dal nome del prodotto, una specifica, la quantità di scorta nel magazzino e il costo. Il numero totale di prodotti sono 8 e la gestione viene effettuata per un totale di 20 giorni. Scrivere un algoritmo che permette di gestire il magazzino. L’utente può scegliere di effettuare le seguenti operazioni: Dato un fissato giorno stampare i dati relativi dei prodotti che sono sotto scorta (numero di prodotti minore di 5). Acquisto di un prodotto in un fissato giorno (controllare se il numero dei prodotti è zero). Dato il codice di un prodotto stampare il numero di quelli venduti in 10 giorni. Eliminare un dato prodotto dal magazzino (non è possibile avere meno di 2 prodotti). Fare almeno 3 simulazioni considerando la gestione magazzino per i 10 giorni consecutivi.
    Io sto iniziando dalla battaglia navale, e mi sono bloccato ad un punto, ho fatto una procedura per far spawnare random le 3 navi, ma quando le vado a posizionare vedo che le posiziona tutte nella posizione 1, e non random come dicevo io :|,
    qualcuno può aiutarmi ?

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Posta il codice che hai già scritto e vediamo dov'è l'errore...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3

    Re: [C]Progetto Battaglia Navale

    Originariamente inviato da sweet93
    Salve,
    io avrei un problema, mi è stato dato da fare un progetto in C, quella di una simulazione di una battaglia navale, e della gestione di un magazzino(per l'università).

    Io sto iniziando dalla battaglia navale, e mi sono bloccato ad un punto, ho fatto una procedura per far spawnare random le 3 navi, ma quando le vado a posizionare vedo che le posiziona tutte nella posizione 1, e non random come dicevo io :|,
    qualcuno può aiutarmi ?
    Ciao, come saprai dalla lettura del Regolamento in questo forum non si risolvono esercizi scolastici, ma si aiuta l'utente a trovare la soluzione più corretta correggendo eventuali codici presentati.
    Il consiglio - se vuoi ottenere risposte - è quello di affrontare un problema alla volta, postando il codice relativo; nella fattispecie, il primo problema sembra essere quello del posizionamento casuale (non so dove, visto che non è stato specificato..).
    "Memento audere semper"

    IBM Europe - Italy Group

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    33
    Questo è l'header:
    codice:
    #define ROW 10 //Righe della griglia
    #define COLUMN 10 //Colonne della griglia
    #define VECTOR 10 //vettore indice di colonna della griglia per stampare i caratteri
    #define TRUE 1
    #define FALSE 0
    //Struct per le coordinate riga-colonna della griglia
    struct coordinate {
    	int riga;
    	int colonna;
    };
    struct coordinate nave1_pc,nave2_pc,nave3_pc,indice_attack; //navi giocatore, e variabile di attacco
    /*PROTOTIPI*/
    void grid_printer(int[][COLUMN]);
    void spawn_navi(struct coordinate,struct coordinate,struct coordinate);
    void posiziona_navi(struct coordinate,struct coordinate,struct coordinate,int [][COLUMN]);
    Questa è la griglia:
    codice:
    	int grid[ROW][COLUMN]={{9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
    						   {9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
                               {9,0,0,0,0,0,0,0,0,8},
    						   {9,7,7,7,7,7,7,7,7,8}
                               };
    Ecco il codice:
    codice:
    //Procedura per spawnare le navi
    void spawn_navi(struct coordinate nave1_pc,struct coordinate nave2_pc,struct coordinate nave3_pc)
    {
    	nave1_pc.colonna=rand()%10;
    	nave1_pc.riga=rand()%10;
    	nave2_pc.colonna=rand()%10;
    	nave2_pc.riga=rand()%10;
    	nave3_pc.colonna=rand()%10;
    	nave3_pc.riga=rand()%10;
    }
    //Procedura per posizionare le navi sulla griglia
    void posiziona_navi(struct coordinate nave1_pc,struct coordinate nave2_pc,struct coordinate nave3_pc,int grid[][COLUMN])
    {
    	//if prima nave
    	grid[nave1_pc.riga][nave1_pc.colonna]=1;
    	grid[nave1_pc.riga][nave1_pc.colonna+1]=1;
    	grid[nave1_pc.riga][nave1_pc.colonna+2]=1;
    	//if seconda nave
    	grid[nave2_pc.riga][nave2_pc.colonna]=2;
    	grid[nave2_pc.riga][nave2_pc.colonna+1]=2;
    	grid[nave2_pc.riga][nave2_pc.colonna+2]=2;
    	grid[nave2_pc.riga][nave2_pc.colonna+3]=2;
    	//if terza nave
    	grid[nave3_pc.riga][nave3_pc.colonna]=3;
    	grid[nave3_pc.riga][nave3_pc.colonna+1]=3;
    	grid[nave3_pc.riga][nave3_pc.colonna+2]=3;
    	grid[nave3_pc.riga][nave3_pc.colonna+3]=3;
    	grid[nave3_pc.riga][nave3_pc.colonna+4]=3;
    }

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Vorrei farti notare che:
    1)rand "ha bisogno di essere inizializzata" con srand, ameno che tu non voglia ottenere sempre la stessa successione
    2)il tuo metodo di inizializzare la posizione delle navi non tiene conto della possibilità che gli indici "random" coincidano o che le navi, una volta posizionate, si sovrappongano
    3)non c'è alcuna necessità di impostare i bordi a 9, 8 o 7...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    33
    l'srand l'ho settato con time(null)
    ma non ho capito, come dovrei settarlo allora per far punti random? per tutte le navi,
    la traccia dice 3 navi grandi rispettivamente 3, 4 e 5 celle..
    per la grande ci sto?
    io i bordi con 9 8 e 7 li ho fatti per fare le if, se la nave si ingrandisse ed uscisse fuori dalla griglia? come dovrei fare?

  7. #7
    In spawn navi puoi usare una cosa del genere
    codice:
    int numerorandom=-1;//per sempio, ho preso -1 che è una posizione invalida e che tu non generi
    while( numerorandom==-1 || numerorandom==//spazi occupati da navi )
    {
    //rigeneri numero random
    }
    //metti la corrente nave in posizione numerorandom
    Ti faccio notare inoltre due cose:
    1) dico che con un numero intero puoi indicare una posizione, per esempio puoi pensare di continuare a contare seguendo le righe.. Così la posizione 0-0 è 0, la posizione 0-2 è 2, la posizione 1-0 è 10, e così via...
    Facendo in questo modo devi generare un solo numero random fra 0 e 100 per ogni nave, che identifichi univocamente la sua posizione, invece di due. Questo semplifica un po tutte le operazioni, e rende anche inutile la struct coordinate.

    2)Puoi facilmente mettere lo pseudo codice che ho scritto in un loop che itera su ogni nave, così facendo se domani vuoi aumentare il numero di navi non dovrài cambiare questo pezzo di codice

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Tutto ciò che ti occorre per conoscere la posizione sono gli indici...
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Originariamente inviato da sweet93
    io i bordi con 9 8 e 7 li ho fatti per fare le if, se la nave si ingrandisse ed uscisse fuori dalla griglia? come dovrei fare?
    La posizione della prima casella della nave deve essere <= NColonne-lunghezzaNave

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    33
    Originariamente inviato da MegaAlchimista
    In spawn navi puoi usare una cosa del genere
    codice:
    int numerorandom=-1;//per sempio, ho preso -1 che è una posizione invalida e che tu non generi
    while( numerorandom==-1 || numerorandom==//spazi occupati da navi )
    {
    //rigeneri numero random
    }
    //metti la corrente nave in posizione numerorandom
    Ti faccio notare inoltre due cose:
    1) dico che con un numero intero puoi indicare una posizione, per esempio puoi pensare di continuare a contare seguendo le righe.. Così la posizione 0-0 è 0, la posizione 0-2 è 2, la posizione 1-0 è 10, e così via...
    Facendo in questo modo devi generare un solo numero random fra 0 e 100 per ogni nave, che identifichi univocamente la sua posizione, invece di due. Questo semplifica un po tutte le operazioni, e rende anche inutile la struct coordinate.

    2)Puoi facilmente mettere lo pseudo codice che ho scritto in un loop che itera su ogni nave, così facendo se domani vuoi aumentare il numero di navi non dovrài cambiare questo pezzo di codice
    ok ma come faccio ad assegnare il numero random che mi esce alla cella della mia matrice bidimensionale?

    codice:
    int numerorandom=-1;//per sempio, ho preso -1 che è una posizione invalida e che tu non generi
    while( numerorandom==-1 || numerorandom==3)//spazi occupati da navi
    {
    //rigeneri numero random
    numerorandom=rand()%101;
    }
    //metti la corrente nave in posizione numerorandom
    è giusto %101 per randomizzare da 0 a 100?
    poi spazi occupati da navi, è tutte e tre le navi (quindi 3+4+5), oppure solo 1 nave per volta?
    e poi come metto la nave nella posizione della matrice? con un unico valore?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.