Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [c] Problema parametri funzione?

    Ciao a tutti, ho un problemino con un gioco stupidissimo che ho pensato. In pratica ci sono due player che in modalità 1vs1 si attaccano a vicenda, il problema è che man mano che aumentano i turni, la vita dei player non scende come dovrebbe, ma sembra ci siano "sessioni" diverse ogni due turni. Mi aiutereste?

    codice:
    #include <stdio.h>
    
    
    typedef struct pl{
            int vita;
            int danno;
            int frecce;
            
            }Player;
    
    void attacca(Player * firstPlayer, Player * secondPlayer);
    
    int main(){
        
        int dec;
        
        do{
               printf("Scegli modalita': \n\n 1) - 1vs1 \n\n");
               scanf("%d", &dec); 
               printf("\n");
               
               
               }while(dec < 0 || dec > 10);
        if(dec == 1){
               
         int turno = -1;
         Player giocatore1;
         Player giocatore2;
         giocatore1.vita = 45;
         giocatore2.vita = 60;
         giocatore1.danno = 5;
         giocatore2.danno = 2;
         giocatore1.frecce = 34;
         giocatore2.frecce = 40;
         
         while(giocatore1.vita > 0 && giocatore2.vita > 0){
             turno+=1;
             if (turno%2 == 0){
                printf("Turno %d giocatore 1, INVIO per attacco\n\n", turno);
                attacca(&giocatore1, &giocatore2);
                getch();}
    
             else{
                printf("Turno %d giocatore 2, INVIO per attacco\n\n", turno);
                attacca(&giocatore2, &giocatore1);
                getch();}
                               
                               }
               
               }
        
        }
    
    
    
    void attacca(Player * firstPlayer, Player * secondPlayer){
         
         firstPlayer->frecce -=1;
         secondPlayer->vita = secondPlayer->vita - firstPlayer->danno;
         printf("vita P1: %d, frecce P1: %d\n", firstPlayer->vita,firstPlayer->frecce);
         printf("vita P2: %d, frecce P2: %d\n\n", secondPlayer->vita,secondPlayer->frecce);
         
         
         
         }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Sì, ma che vuol dire quello che hai scritto?

    Descrivi quello che potrebbe farci capire dove potrebbe essere il problema nel codice, dato che non sappiamo come sia organizzato (cosa è una "vita"? dove la gestisci? di che "sessioni" parli?)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il problema dovrebbe essere nella funzione attacca(). I turni li ho organizzati in modo che se la variabile "turno" è pari o dispari viene invocata la funzione attacca() con due argomenti, il giocatore 1 e il giocatore 2 alternativamente.

    La "vita" è un campo della struct pl e gli ho dato un valore di prova nel main().

    Il problema è che quando viene invocata attacca(&giocatore1, &giocatore2); o attacca(&giocatore2, &giocatore1); sembra che quella funzione non vada a modificare il campo vita del giocatore, anche se glielo passo per indirizzo.

    Spero di aver reso l'idea, comunque si vede benissimo facendolo partire, si scrive 1 per selezionare la modalità 1vs1 e si preme invio per attaccare.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Dalle frasi visualizzate il campo vita diminuisce ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    ciao , ti dico la mia opignone.
    ho provato il programma , non presenta errori .
    probabilmente , quello che a te sembra una anomalia del programma è dovuto ad assegnazioni diverse delle variabili delle due strutture .

    Player giocatore1;
    Player giocatore2;
    giocatore1.vita = 45;
    giocatore2.vita = 60;
    giocatore1.danno = 5;
    giocatore2.danno = 2;
    giocatore1.frecce = 34;
    giocatore2.frecce = 40;

    ovvio che i risultati per i due giocatori siano diversi
    Tecnologia

  6. #6
    Avete ragione funziona, non so perchè mi ero fissato con il fatto che p1 e p2 venissero visualizzati sempre come giocatore1 e giocatore2 senza alternarsi.. Vabbè figuraccia grazie di tutto!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.