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",®istro[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);
}
}