Buon pomeriggio ragazzi, alcuni giorni fa scrissi per il problema del loop del monopoly..ho risolto quasi tutto, ma ho un ultimo problema. Nell'esecuzione, quando un giocatore va una casella non sua, paga a sè stesso. un aiutino? vi posto il codice:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <conio.h>
typedef struct giocatore{
char nome[10];
int soldi;
int terr_pos[3];
int pos;
int bk;
}Giocatore;
void gioco(int scacchiera[7][5], Giocatore player[]);
int ricerca(Giocatore player[], int dado);
int ricerca_Winner(Giocatore player[]);
Giocatore player[6];
void main(){
srand(time(NULL));
int i,j,ro=0,end=0;
int scacchiera[7][5]={{1,2,3,4,5}, //via, arancione, arancione, arancione, rosso,
{20,0,0,0,6}, //azzurro, N/A, N/A, N/A, verde,
{19,0,0,0,7}, //azzurro, N/A, N/A, N/A, verde,
{18,0,0,0,8}, //nero, N/A, N/A, N/A, nero,
{17,0,0,0,9}, //verde, N/A, N/A, N/A, azzurro,
{16,0,0,0,10}, //verde, N/A, N/A, N/A, azzurro,
{15,14,13,12,11}}; //rosso, viola, viola, viola, rosso.
int terreni[19]={2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
for(int i=0; i<7; i++){
for(int j=0; j<5; j++){
printf("| %d |", scacchiera[i][j]);
}
printf("\n");
}
for(int i=0;i<6;i++) {
printf("Mettere il nome del giocatore %i : ", i+1);
gets(player[i].nome);
player[i].soldi=100;
player[i].pos=1;
}
for(i=0;i<6;i++){
for(j=0;j<3;j++){
do{
ro=rand()%19;
if(terreni[ro]==0){
end=1;
}else{
player[i].terr_pos[j]=terreni[ro];
terreni[ro]=0;
end=0;
}
}while(end==1);
}
}
for(i=0;i<6;i++){
printf("%s ha come terreni :", player[i].nome);
for(j=0;j<3;j++){
printf(" %d", player[i].terr_pos[j]);
}
printf("\n");
}
gioco(scacchiera,player);
}
void gioco(int scacchiera[7][5], Giocatore player[]){
int inizio,i,dadou,dadod,dado,bk,win=0,z,t;
inizio=rand()%6;
i=inizio;
printf("Inizia %s\n", player[i].nome);
do {
if (i>5) {
i=0;
}
if(player[i].bk!=1 && win<5){
printf("Tocca a %s\n", player[i].nome);
dado=0;
dadou=1+rand()%6;
dadod=1+rand()%6;
dado=dadou+dadod;
player[i].pos=player[i].pos+dado;
if (player[i].pos>20){
player[i].pos=player[i].pos-20;
}
if (player[i].pos>=2 && player[i].pos<=4){
for (int j=0; j<3; j++){
if (player[i].terr_pos[j]>=2 && player[i].terr_pos[j]<=4) {
printf("La Casella in cui %s e' finito e' sua. \n", player[i].nome);
j=3;
}
else
if (player[i].terr_pos[j]!=2 || player[i].terr_pos[j]!=3 || player[i].terr_pos[j]!=4) {
z=ricerca(player,dado);
if(player[z].bk==1){
j=3;
}
if(player[z].soldi<=0){
j=3;
}else
if(player[z].soldi>0){
printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
printf("Sei caduto sulla casella arancione quindi paghi 2 euro a %s \n", player[z].nome);
player[i].soldi=player[i].soldi-2;
player[z].soldi=player[z].soldi+2;
printf("%s ha %d soldi.\n", player[i].nome, player[i].soldi);
j=3;
}
}
}
}
if (player[i].pos==5 || player[i].pos==11 || player[i].pos==15){
for (int j=0; j<3; j++){
if (player[i].terr_pos[j]==5 || player[i].terr_pos[j]==11 || player[i].terr_pos[j]==15) {
printf("La Casella in cui %s e' finito e' sua.\n", player[i].nome);
j=3;
}
else
if (player[i].terr_pos[j]!=5 || player[i].terr_pos[j]!=11 || player[i].terr_pos[j]!=15) {
z=ricerca(player,dado);
if(player[z].bk==1){
j=3;
}
if(player[z].soldi<=0){
j=3;
}else
if(player[z].soldi>0){
printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
printf("Sei caduto sulla casella rossa quindi paghi 5 euro a %s \n", player[z].nome);
player[i].soldi=player[i].soldi-5;
player[z].soldi=player[z].soldi+5;
printf("%s ha %d soldi.\n", player[i].nome, player[i].soldi);
j=3;
}
}
}
}
if (player[i].pos==6 || player[i].pos==7 || player[i].pos==16 || player[i].pos==17){
for (int j=0; j<3; j++){
if (player[i].terr_pos[j]==6 || player[i].terr_pos[j]==7 || player[i].terr_pos[j]==16 || player[i].terr_pos[j]==17) {
printf("La Casella in cui %s e' finito e' sua.\n", player[i].nome);
j=3;
}
else
if (player[i].terr_pos[j]!=6 || player[i].terr_pos[j]!=7 || player[i].terr_pos[j]!=16 || player[i].terr_pos[j]!=17) {
z=ricerca(player,dado);
if(player[z].bk==1){
j=3;
}
if(player[z].soldi<=0){
j=3;
}else
if(player[z].soldi>0){
printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
printf("Sei caduto sulla casella verde quindi paghi 4 euro a %s \n", player[z].nome);
player[i].soldi=player[i].soldi-4;
player[z].soldi=player[z].soldi+4;
printf("%s ha %d soldi.\n", player[i].nome, player[i].soldi);
j=3;
}
}
}
}
if (player[i].pos==8 || player[i].pos==18){
for (int j=0; j<3; j++){
if (player[i].terr_pos[j]==8 || player[i].terr_pos[j]==18) {
printf("La Casella in cui %s e' finito e' sua.\n", player[i].nome);
j=3;
}
else
if (player[i].terr_pos[j]!=8 || player[i].terr_pos[j]!=18) {
z=ricerca(player,dado);
if(player[z].bk==1){
j=3;
}
if(player[z].soldi<=0){
j=3;
}else
if(player[z].soldi>0){
printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
printf("Sei caduto sulla casella nera quindi paghi 3 euro a %s \n", player[z].nome);
player[i].soldi=player[i].soldi-3;
player[z].soldi=player[z].soldi+3;
printf("%s ha %d soldi.\n", player[i].nome, player[i].soldi);
j=3;
}
}
}
}
if (player[i].pos==9 || player[i].pos==10 || player[i].pos==19 || player[i].pos==20){
for (int j=0; j<3; j++){
if (player[i].terr_pos[j]==9 || player[i].terr_pos[j]==10 || player[i].terr_pos[j]==19 || player[i].terr_pos[j]==20) {
printf("La Casella in cui %s e' finito e' sua.\n", player[i].nome);
j=3;
}
else
if (player[i].pos!=9 || player[i].pos!=10 || player[i].pos!=19 || player[i].pos!=20) {
z=ricerca(player,dado);
if(player[z].bk==1){
j=3;
}
if(player[z].soldi<=0){
j=3;
}else
if(player[z].soldi>0){
printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
printf("Sei caduto sulla casella azzurra quindi paghi 1 euro a %s \n", player[z].nome);
player[i].soldi=player[i].soldi-1;
player[z].soldi=player[z].soldi+1;
printf("%s ha %d soldi.\n", player[i].nome, player[i].soldi);
j=3;
}
}
}
}
if (player[i].pos>=12 && player[i].pos<=14){
for (int j=0; j<3; j++){
if (player[i].terr_pos[j]>=12 && player[i].terr_pos[j]<=14) {
printf("La Casella in cui %s e' finito e' sua.\n", player[i].nome);
j=3;
}
else
if (player[i].terr_pos[j]!=12 || player[i].terr_pos[j]!=13 || player[i].terr_pos[j]!=14) {
z=ricerca(player,dado);
if(player[z].bk==1){
j=3;
}
if(player[z].soldi<=0){
j=3;
}else
if(player[z].soldi>0){
printf("Mi dispiace %s, sei caduto su una casella non tua.. \n", player[i].nome);
printf("Sei caduto sulla casella viola quindi paghi 6 euro a %s \n", player[z].nome);
player[i].soldi=player[i].soldi-6;
player[z].soldi=player[z].soldi+6;
printf("%s ha %d soldi.\n", player[i].nome, player[i].soldi);
j=3;
}
}
}
}
win=0;
for (int i=0; i<6; i++) {
if (player[i].soldi<=0) {
player[i].bk=1;
win++;
}
}
}
i++;
}while(win<5);
if (win=4) {
int t=ricerca_Winner(player);
printf("Ha vinto il Giocatore %s con %d soldi.\n", player[t].nome, player[t].soldi);
}
}
int ricerca(Giocatore player[], int dado) {
for(int i=0; i<6; i++){
for(int j=0; j<3; j++){
if (player[i].terr_pos[j]==player[i].pos){
return i;
}else
if (player[i].soldi<=0){
player[i].bk=1;
return 0;
}
}
}
}
int ricerca_Winner(Giocatore player[]) {
int vincitore;
vincitore=0;
for (int i=0; i<6; i++) {
if( player[i].bk!=1)
vincitore=i;
}
return vincitore;
}
In esecuzione mostra così invece
Tocca a A
Mi dispiace A, sei caduto su una casella non tua..
Sei caduto sulla casella viola quindi paghi 6 euro a A
A ha 575 soldi.
Tocca a B
Mi dispiace B, sei caduto su una casella non tua..
Sei caduto sulla casella nera quindi paghi 3 euro a A
In pratica A si paga da sola.
grazie in anticipo!