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

    [C] Esercizio parole

    Salve sono nuovo del forum e del "settore" diciamo.. cmq in pratica dovrei fare questo esercizio in c:
    Il primo giocatore scrive una parola di almeno 4 lettere (non segnando alcun punteggio a proprio favore) su un foglio e lo passa al secondo giocatore. Il secondo giocatore deve inserire una lettera nella parola passatagli per ottenere una nuova parola. Se non ci riesce, può togliere tante lettere quante ne vuole, sempre con l'obiettivo di ottenere una nuova parola. Nel caso riesca ad aggiungere una lettera, il giocatore guadagna un punto, altrimenti perde un punto. La serie di parole che viene scritta via via, aggiungendo o scartando lettere, non deve avere ripetizioni cioè ogni giocatore deve trovare una nuova parola differente da tutte quelle già scritte durante la manche, pena la perdita di tanti punti quante sono le lettere della parola ottenuta. In questo caso al giocatore penalizzato viene negata la possibilità di trovare un'altra parola differente. Il giocatore passa poi il foglio al giocatore successivo.
    Ecco anche un esempio:

    Primo giocatore: CANE

    Giocatori successivi:

    Aggiunge R -> CARNE: 1 punto

    Aggiunge I -> CARINE: 1 punto

    Toglie N -> CARIE: -1 punto

    Aggiunge N -> CARINE: -6 punti (parola già scritta)

    Allora come idea di base del gioco avevo pensato a una lista di liste dove venivano memorizzate le parole inserite da ogni giocatore quindi ogni nuova parola inserita veniva confrontata con le altre per valutare l'effettivo punteggio. Soltanto che trovavo difficoltà nel creare questa lista di liste con successivo confronto lettera per lettera.. qualcuno ha altre idee?

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

    ciao

    Allora come idea di base del gioco avevo pensato a una lista di liste dove venivano memorizzate le parole inserite da ogni giocatore quindi ogni nuova parola inserita veniva confrontata con le altre per valutare l'effettivo punteggio. Soltanto che trovavo difficoltà nel creare questa lista di liste con successivo confronto lettera per lettera.. qualcuno ha altre idee?
    Puoi creare una matrice di char , dove iserirai di volta in volta le parole , scritte dai
    giocatori.
    quando un giocatore inserisce una nuova parola tramite un ciclo for e la fuzione strcmp()
    controlli se è presente nella matrice , se si , togli punti -=strlen(parolascritta)

    controllare le parole carattere per carattere non serve perche non ti assicura che
    la parola esista

    esempio CANE -> CANKE , soddisferebbe tutti i criteri ma sarebbe una parola che
    non esiste
    Tecnologia

  3. #3
    torn24 grazie delle dritte sicuramente è più completo.. provo a buttar giù un pò di codice allora

  4. #4
    Ho provato ha lavoraci su ma ho i seguenti problemi:

    - il ciclo for per il controllo di non avere parole uguali va ma non riesco a fare i controlli successivi ossia se uno toglie x lettere gli si tolgono x punti e l'aggiungere una lettera che ti da un punto ( inizialmente andava visto che avevo fatto un else senza contare la condizione del togliere)
    - come implementare il fatto delle manche: non capisco se il giocatore può vedere la lista intera di parole inserite( come volevo fare io) o solo la parola precedente. La frase "In questo caso al giocatore penalizzato
    viene negata la possibilità di trovare un'altra parola differente" non è chiara poichè ha già inserito una parola quindi potrebbe significare che o salta finchè uno non vince o che il giocatore successivo inserisce una nuova parola e ricomincia una manche
    - a volte non mi incrementa la variabile per memorizzare le parole (anche a causa dei controlli toglie e aggiungi che non vanno ma ho lasciato per far capire come li volevo fare) e quindi non me le stampa
    - nella funzione inseriscinomegioc() se metto una lettera nel numero dei giocatori spalla poichè nn ho trovato controlli per vietare l'inserimento di un char




    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h> 
    #include <math.h>
    #include <time.h>
    #define MAX_NUM_GIOCATORI 6
    
         
    
    
      struct Giocatore{
           char nomeGiocatore[40];   
           int punteggio;    
              };//array di record per memorizzare i giocatori
              
              
              struct Giocatore registro[MAX_NUM_GIOCATORI];
              
              
          
    //variabili globali
    int ngioc=0; // variabile che tiene conta del numero dei giocatori
    
    
    //Funzioni esterne
    
    
    void Menu (void);
    void Gioca(void);
    void inseriscinomegioc();
    void stampa_gioco(struct Giocatore registro[], int ngioc); 
    
    int main()
    {
         
         
         
         
         Menu(); 
         Gioca();  
         
         system("pause");
         
         return 0;
         
    }
    
    
    //-------------------------- funzioni
    
    void Menu (void)
    {
         printf("Per iniziare il gioco premi invio\n\n");
         system("pause");
         
         
    }
    
    
    
    void Gioca(void)
    {
         
        int i,j;
        char pinserita[25][30]; //array contenente le parole inserite dai giocatori
        int toglie;//  numero di lettere tolte da un giocatore a una parola
        int vinto = 0; // variabile per far terminare la partita
        
        
        
        int k = 0;
        
        inseriscinomegioc();	
        
        for ( i = 0; i < ngioc; i++)
                            {
                               
                               registro[i].punteggio = 0;
                              
                               
                               }
        
    	
     
        while( vinto = 1){
        for (i = 0; i <ngioc; i++) {
          
              
         stampa_gioco(registro, ngioc);         
                          
             
             
            if(k == 0){
                
                printf("\n %s sei il primo giocatore inserisci una parola di almeno 4 lettere: ", registro[i].nomeGiocatore); 
                
                scanf("%s",&pinserita[k]);
                
                while( strlen(pinserita[k])< 4){
                     
                     printf("\n\n\a ERRORE! Inserisci una parola di almeno 4 lettere! \n\n");
                     scanf("%s",&pinserita[k]);
                    
                    }
                
                 k++;
                 system("cls");
                
                }
            
            else{
                
              printf("\n Parole inserite: \n");  
              for(j = 0; j < k; j++) {
                
                printf(" \n %s \n", pinserita[j]);
                
                
                }  
            
              printf("\n\n %s  inserisci una lettera nella parola precedente per ottenere una nuova parola : ", registro[i].nomeGiocatore); 
              
              scanf("%s",&pinserita[k]);
            
             for(j = 0; j < k; j++) {
                
                	if(strcmp (pinserita[j], pinserita[k]) == 0){
                     
                     printf("\nParola gia\' inserita,  tocca al giocatore successivo\n");
                     registro[i].punteggio -= strlen(pinserita[k]);
                     i++;
                     k--;
                     system("pause");
                    
                     break;
                     
                     }
                     
                 }    
                          
     
                    if(strcmp (pinserita[k--], pinserita[k]) > 0){
                     
                           toglie= strlen(pinserita[k--]) - strlen(pinserita[k]);
                           printf("\n%s hai tolto %d lettere per cui meno %d\n", registro[i].nomeGiocatore, toglie);
                           registro[i].punteggio -= toglie;
                      
                           system("pause");
                    
                          
                     
                     }
                       
                        
                        if(strcmp (pinserita[k--], pinserita[k]) < 0){
                        
                          if (strlen(pinserita[k--]) - strlen(pinserita[k]) == 1){
                        
                              printf("\n Bravo %s hai scritto una parola nuova \n", registro[i].nomeGiocatore); 
                              registro[i].punteggio++;
                              system("pause"); 
                           
                           
                           }    
                        
                         else {
                             
                             printf("\n  %s hai aggiunto troppe lettere \n", registro[i].nomeGiocatore); 
                             
                             
                             }
                        
                       }        
                    
                
                }  
            
          }    
              
             
             if(registro[i].punteggio == 5){
                 
                 vinto == 1;
                 printf("\n %s hai vinto!!", registro[i].nomeGiocatore);
                 system("pause");
                 Menu();
                }       
                      
             
            k++;
            
            system("cls");
             
      
        }
        
      }
    
     
    
    
    
    
    
    
    void inseriscinomegioc()// funzione che permette di stabilire un numero di giocatori(max 10) e poi di inserire un nome per ogni giocatore
    {
         int k;// serve per fare il ciclo per la richiesta del nome dei giocatori
         
         
         
         
         printf("\n\n numero giocatori (2 - 6): "); //ciclo per la richiesta del numero di giocatori che va da 1 a 10
        fflush (stdin);
        scanf("%d",&ngioc);
        while ( ngioc < 2 || ngioc > MAX_NUM_GIOCATORI ) //se il numero non è corretto stampa un messaggio di errore di inserimento
        {
            printf("\n\n\a ERRORE! Inserire un numero da 2 a 6! \n\n");
            scanf("%d",&ngioc);
        }    
        for ( k = 0; k < ngioc; k++)  //ciclo per la richiesta del nome dei giocatori
        {
            fflush (stdin);
            printf("\n Giocatore %d inserisci il nome: ",(k+1));
            scanf("%s",&registro[k].nomeGiocatore);
            
    	}
         
         system("cls");    
                  
    }
    
    
    
    
    
    
    /* Stampa gioco */ 
    void stampa_gioco(struct Giocatore registro[], int ngioc) 
    { 
       int i;  
    
       system("cls");  
       
    
       for(i=0; i < ngioc; i++){ 
          printf("\n------[   %s    ]\n", registro[i].nomeGiocatore); 
          printf(">>>>>> Punteggio: %d pt.\n", registro[i].punteggio); 
           
       } 
    }

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.