Programma in C

di il
13 risposte

Programma in C

Ciao ragazzi, mi chiedevo se fosse possibile creare una sorta di simulazione di cara tra due macchine (asterischi). Ho pensato di usare la funzione srand nella libreria time.h
Se faccio un traguardo, poi come faccio a fare in modo che venga superato? Se la macchina avanza allora il traguardo sarà avanti, ma quando la macchina passa il traguardo è dietro la macchina e finisce il ciclo perché la gara è finita.

13 Risposte

  • Re: Programma in C

    Non mi pare un problema ... cosa hai scritto?
  • Re: Programma in C

    oregon ha scritto:


    Non mi pare un problema ... cosa hai scritto?
    Eh niente, non saprei proprio come fare per il traguardo
  • Re: Programma in C

    Ma il traguardo è l'ultima cosa. Come funzionerà il tuo programma?
  • Re: Programma in C

    oregon ha scritto:


    Ma il traguardo è l'ultima cosa. Come funzionerà il tuo ologramma?
    Pensavo a fare tipo questo:
    
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    int main(){
    int macchina=0;
    in macchina2=0;
    int a;
    int b;
    	
    for(a=0;  a<20;  a++){
    srand((unsigned int)time(NULL));
    sleep(1);
    system("cls");
    printf("1|  "); //postazione prima macchina
    for(b=0; b<macchina; b++){
    printf(" ");}
    printf("*"); //l'asterisco è la macchina
    for(b=macchina+1; b<20;  b++){
    printf(" ");} //perché altrimenti poi il traguardo non resta fermo
    if(macchina<20){
    printf("|");} //traguardo
    if(macchina==20){
    i=20;
    printf("|*");}  //per indicare la macchina dopo il traguardo.
    macchina=macchina+ rand()%10+1;
    
    printf("\n\n2|"); //postazione macchina 2
    for(b=0; b<macchina2; b++){
    printf(" ");}
    printf("*");
    for(b=macchina2+1; b<20; b++){
    printf(" ");}
    if(macchina<20){
    printf("|");}
    else	{printf("|*");}
    macchina2=macchina2+rand()%10+1;		
    if(macchina>=20 || macchina2>=20){
    i=30;}
    } //Chiude il primo for
    	return 0;
    } //Chiude l'int main
    
    Però non penso funzioni...non per il traguardo almeno
  • Re: Programma in C

    Il miglior approccio al programma sarebbe quello di usare una matrice[2][30] ossia prima riga è dedicata alla macchina uno,seconda riga dedicata alla macchina 2,il traguardo rimane fermo ed una volta passato il traguardo per arrestare il programma ed uscire dal loop utilizza l'istruzione break;

    oggi se c'è la faccio butto giu due righe
  • Re: Programma in C

    Si, forse è meglio, è che faccio sempre casini con le matrici allora le ho evitate. Se riesci solo che a darmi qualche spunto ti ringrazio
  • Re: Programma in C

    Ma scusa, lo spunto lo hai avuto. Perché non tenti tu a scrivere del codice? Altrimenti come impari?
  • Re: Programma in C

    oregon ha scritto:


    Ma scusa, lo spunto lo hai avuto. Perché non tenti tu a scrivere del codice? Altrimenti come impari?
    Si, non ho scritto bene, volevo uno spunto per far andare il programma senza le matrici dato che non ce le ho chiarissime
  • Re: Programma in C

    Senza una matrice che rappresenti il "tracciato" non è facile.

    Ma hai un compito? Una traccia?

    O è qualcosa che vorresti fare ma evidentemente oltre le tue attuali possibilità?
  • Re: Programma in C

    La seconda, pensavo fosse possibile però
  • Re: Programma in C

    È possibile farlo chi ha detto il contrario.

    Ma prima fai esercizi con vettori e array e poi passa a cose più complesse.
  • Re: Programma in C

    Allora ecco il codice che ti dicevo con le matrici:
    #include <stdlib.h>
    #include <stdio.h>
    #include <time.h>
    
    #define PISTA 2                    // definizione di tracciati
    #define LUN 50                     // definizione di lunghezza massima della pista
    
    char matrice[PISTA][LUN]={' '};    // inizializza la matrice
    char car1='*';                     // macchina 1
    char car2='*';                     // macchina 2
    int car1_pos=2;                    // posizione iniziale macchina 1
    int car2_pos=2;                    // posizione iniziale macchina 2
    
    void update(void);                 // funzione per impostare la posizione iniziale degli elementi ed aggiornarla
    void print_matrice(void);          // funzione per stampare la matrice
    
    
    void main()
    {
        srand(time(NULL));                // imposto il tempo casuale
        update();                         // imposto la posizione iniziale degli elementi
        print_matrice();                  // stampo la matrice
    
        /*ciclo per svolgere la gara*/
        for(int i=0;i<30;i++)
        {
            system("cls");                // pulizia schermo
            matrice[0][car1_pos]= ' ';    // imposto lo spazio vuoto per cancellare la vecchia posizione della macchina
            matrice[1][car2_pos]= ' ';
            car1_pos += rand() % 3;       // scelta casuale del valore tra 0-1-2
            car2_pos += rand() % 3;
            update();                     // aggiorno gli elementi sulla scena
            print_matrice();              // stampo la matrice
            sleep(1);                     // pausa di un secondo
        }
    
    
    
       system("pause");                   // premere un tasto per uscire
    }
    void print_matrice()
    {
       for(int i=0;i<PISTA;i++){
            for(int j=0;j<LUN;j++){
                printf("%c",matrice[i][j]);
            }
            printf("\n");
        }
    }
    void update()
    {
        matrice[0][0]= '1';
        matrice[1][0]= '2';
        matrice[0][1]= ')';
        matrice[0][car1_pos]= car1;
        matrice[1][1]= ')';
        matrice[1][car2_pos]= car2;
        matrice[0][30]= '|';
        matrice[1][30]= '|';
    }
    il programma non è volutamente terminato, per questo lo lasci fare a te, come ti dicevo prima inserisci la istruzione break; per far terminare il loop e decidere il vincitore, come vedi il traguardo rimane fermo.

    Cosa fa il programma? semplicemente ho impostato una matrice con degli elementi dentro che mi interessano, la posizione delle auto sono indicate con le variabili car1_pos e car2_pos, aggiungendo un valore scelto a caso regolo l'avanzamento delle due auto la prima che arriva a 30 vince (questo valore è arbitrario lo scegli tu).
  • Re: Programma in C

    Scusa Anakin se questo codice non risponde alla tua domanda, ma quando l'ho letta mi sono chiesto cosa si potesse fare con la console, in merito ad una corsa...
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <conio.h>
    
    void strada(int pos,int sx, int dx){
        system("cls");
        for (int i=0; i<10; i++){
           if (pos==0)
                printf("|                             |\n\n");
            else
                printf("\n|                             |\n");
        }
        if (pos==0){
            printf("|");
            for (int s = 0; s<sx;s++) printf(" ");
            printf("O/^\\O");
            for (int d = 0; d<dx;d++) printf(" ");
            printf("|\n");
            for (int s = 0; s<sx;s++) printf(" ");
            printf("   ^\n|");
            for (int s = 0; s<sx;s++) printf(" ");
            printf("0-+-0");
            for (int d = 0; d<dx;d++) printf(" ");
            printf("|");
        }
        else{
            for (int s = 0; s<sx;s++) printf(" ");
            printf(" 0/^\\0\n");
            printf("|");
            for (int s = 0; s<sx;s++) printf(" ");
            printf("  ^  ");
            for (int d = 0; d<dx;d++) printf(" ");
            printf("|\n");
            for (int s = 0; s<sx;s++) printf(" ");
            printf(" O-+-O");
        }
    }
    
    int main(){
        int pos = 0;
        double spaziDX = 12;
        double spaziSX = 12;
        int ms = clock();
        int direz;
    
        while(1){
            if (ms + 50 < clock()){
                if (pos==0) pos=1; else pos=0;
                ms = clock();
                if (kbhit()){
                     direz=getch();
                     if (direz == 77){spaziSX++; spaziDX--;}
                     if (direz == 75){spaziSX--; spaziDX++;}
                     if (direz == 27) exit(1);
                }
                strada(pos,spaziSX, spaziDX);
            }
        }
        return 0;
    }
    
    Magari si possono aggiungere gli spazi nel printf() con un'istruzione tipo space(spaziDX), senza fare un ciclo.
    Non fa nulla, solo un'auto stilizzata che si sposta a destra e a sinistra usando le frecce...
Devi accedere o registrarti per scrivere nel forum
13 risposte