Salve a tutti , ho un problema con il movimento dei giocatori quando lanciano i dadi al secondo turno. Praticamente ho :
Matrice del terreno comune:
B //9 A //10 A //11 A R
Z //8 V
Z //7 V
N //6 N
V //5 Z
V //4 Z
R //3 P// 2 P //1 (P //giocatore 1 si trova qui al primo round effettuando somma 11 si dovrebbe poi trovare a A // 11 ) R
Al primo round mi trovo con tutte le posizioni però poi succede questo:
Second Round - Turno di Giocatore 1:
Parti dalla posizione (6, 3)
Hai tirato: 6 e 5. Totale: 11
Ti trovi ora alla posizione (6, 2) - Casella: P // in questo caso il giocatore 1 si trova a (6,3) ma dopo il lancio dei dadi del secondo turno si trova a (6,2) com'è possibile ? // commento nella matrice quello che dovrebbe succedere (allego anche codice sotto)
Second Round - Turno di Giocatore 2:
Parti dalla posizione (4, 4)
Hai tirato: 5 e 6. Totale: 11
Ti trovi ora alla posizione (5, 0) - Casella: V
Second Round - Turno di Giocatore 3:
Parti dalla posizione (4, 4)
Hai tirato: 4 e 1. Totale: 5
Ti trovi ora alla posizione (5, 4) - Casella: Z
Second Round - Turno di Giocatore 4:
Parti dalla posizione (2, 4)
Hai tirato: 4 e 2. Totale: 6
Ti trovi ora alla posizione (4, 4) - Casella: Z
Second Round - Turno di Giocatore 5:
Parti dalla posizione (1, 4)
Hai tirato: 3 e 3. Totale: 6
Ti trovi ora alla posizione (3, 4) - Casella: N
Second Round - Turno di Giocatore 6:
Parti dalla posizione (0, 4)
Hai tirato: 6 e 2. Totale: 8
Ti trovi ora alla posizione (4, 4) - Casella: Z
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define NUM_GIOCATORI 6
#define SOLDI_INIZIALI 100
#define HEIGHT 7
#define WIDTH 5
struct Giocatore {
char nome[50];
int soldi;
char terreni[2][7];
int posX; // Aggiungi la coordinata X
int posY; // Aggiungi la coordinata Y
};
int calcolaValoreTerreno(char colore) {
int valore = 0;
switch (colore) {
case 'A': valore = 2; break;
case 'V': valore = 4; break;
case 'R': valore = 5; break;
case 'N': valore = 3; break;
case 'Z': valore = 1; break;
case 'P': valore = 6; break;
default: break;
}
return valore;
}
void printColoredChar(char c) {
switch (c) {
case 'A':
printf("\033[38;5;208m%c\033[0m ", c); // Orange (A)
break;
case 'V':
printf("\033[38;5;45m%c\033[0m ", c); // Violet (V)
break;
case 'R':
printf("\033[38;5;160m%c\033[0m ", c); // Red (R)
break;
case 'N':
printf("\033[38;5;0m%c\033[0m ", c); // Black (N)
break;
case 'Z':
printf("\033[38;5;39m%c\033[0m ", c); // Azzurro (Azure) (Z)
break;
case 'P':
printf("\033[38;5;165m%c\033[0m ", c); // Purple (P)
break;
case 'B':
printf("\033[38;5;15m%c\033[0m ", c); // White (B)
break;
default:
printf("%c ", c); // Default color
break;
}
}
void muoviGiocatore(int *posX, int *posY, int sommaDadi) {
int start = *posX + *posY * WIDTH;
int M = (HEIGHT + WIDTH) * 2 - 4;
int k = (start + sommaDadi) % M;
int pos = -1;
if (k < WIDTH) pos = k;
else if (k < (HEIGHT + WIDTH - 2)) pos = k * WIDTH - (WIDTH - 1) * (WIDTH - 1);
else if (k < (HEIGHT + WIDTH * 2 - 3)) pos = (M - k) + (HEIGHT - 1) * (WIDTH - 1);
else if (k < M) pos = (M - k) * WIDTH;
*posX = pos / WIDTH;
*posY = pos % WIDTH;
}
int main() {
srand(time(NULL));
char nomi_giocatori[NUM_GIOCATORI][50] = {
"Giocatore 1", "Giocatore 2", "Giocatore 3",
"Giocatore 4", "Giocatore 5", "Giocatore 6"
};
struct Giocatore giocatori[NUM_GIOCATORI]; // Definizione dell'array giocatori
for (int i = 0; i < NUM_GIOCATORI; ++i) {
strcpy(giocatori[i].nome, nomi_giocatori[i]);
giocatori[i].soldi = SOLDI_INIZIALI;
giocatori[i].posX = 0; // Inizializza posX a 0
giocatori[i].posY = 0; // Inizializza posY a 0
}
char terreno_comune[7][5] = {
{'B', 'A', 'A', 'A', 'R'},
{'Z', ' ', ' ', ' ', 'V'},
{'Z', ' ', ' ', ' ', 'V'},
{'N', ' ', ' ', ' ', 'N'},
{'V', ' ', ' ', ' ', 'Z'},
{'V', ' ', ' ', ' ', 'Z'},
{'R', 'P', 'P', 'P', 'R'}
};
printf("Matrice del terreno comune:\n");
for (int i = 0; i < 7; ++i) {
for (int j = 0; j < 5; ++j) {
printColoredChar(terreno_comune[i][j]);
}
printf("\n");
}
printf("\n");
struct FinalPositions {
int x;
int y;
};
struct FinalPositions finalPositions[NUM_GIOCATORI];
// First round loop
for (int i = 0; i < NUM_GIOCATORI; ++i) {
printf("Turno di %s:\n", giocatori[i].nome);
int posX = 0, posY = 0; // Impostazione della posizione iniziale a (0, 0)
int dado1 = (rand() % 6) + 1;
int dado2 = (rand() % 6) + 1;
int sommaDadi = dado1 + dado2;
printf("Hai tirato: %d e %d. Totale: %d\n", dado1, dado2, sommaDadi);
muoviGiocatore(&posX, &posY, sommaDadi); // Muovi il giocatore in base alla somma dei dadi
printf("Ti trovi ora alla posizione (%d, %d) - Casella: ", posX, posY);
printColoredChar(terreno_comune[posX][posY]);
printf("\n\n");
// Aggiorna la posizione del giocatore nel tuo array di giocatori
giocatori[i].posX = posX;
giocatori[i].posY = posY;
// Store final positions after the first round
finalPositions[i].x = posX;
finalPositions[i].y = posY;
}
// Second round loop
for (int i = 0; i < NUM_GIOCATORI; ++i) {
printf("Second Round - Turno di %s:\n", giocatori[i].nome);
int posX = finalPositions[i].x;
int posY = finalPositions[i].y;
printf("Parti dalla posizione (%d, %d)\n", posX, posY);
int dado1 = (rand() % 6) + 1;
int dado2 = (rand() % 6) + 1;
int sommaDadi = dado1 + dado2;
printf("Hai tirato: %d e %d. Totale: %d\n", dado1, dado2, sommaDadi);
muoviGiocatore(&posX, &posY, sommaDadi); // Move the player based on the dice roll
printf("Ti trovi ora alla posizione (%d, %d) - Casella: ", posX, posY);
printColoredChar(terreno_comune[posX][posY]);
printf("\n\n");
// Update the position of the player in the array of players
giocatori[i].posX = posX;
giocatori[i].posY = posY;
}
return 0;
}