Caronte 444 Postado Julho 8, 2017 Share Postado Julho 8, 2017 (editado) Olá, terminei o trabalho da faculdade com um pouco de facilidade, não precisei de muito tempo para fazer, mas queria que alguém visse se tem bugs, porque ainda não achei nenhum, depois de ter tirado um monte. O que é para fazer: Aqui vai o código: Spoiler #include <stdio.h>//#include <stdlib.h>//#include <time.h>#define TRUE 1#define FALSE 0 int rolarDado();int genRandomEspecials(int vet[], int qnt, int holePos, int restartPos, int stopPos, int diceBackPos);int selecionarJogadores(int min, int max);int createVetJogadores(int njog, int vet[], int qnt);int Morreram(int jogadores[] ,int qnt);int Ganhou(int jogadores[], int qnt, int final);void fillVetor(int vet[], int qnt, int num);void printVet(int vet[], int qnt);// Buraco://id=10 qnt=1// Restart/Puniçao: //id=20 qnt=2// Stop/Congela: //id=30 qnt=5// GoBack: //id=40 qnt=15int main() { int caminho[70]; int jogadoresPos[5]; int njogadores; int maxjogadores = 5; srand(time(NULL) ); fillVetor(caminho, 70, 0); genRandomEspecials(caminho, 70, 1, 2, 5, 15); printVet(caminho, 70); printf("\n\n\n"); njogadores = selecionarJogadores(2, 5); jogadoresPos[5] = createVetJogadores(njogadores, jogadoresPos, maxjogadores); printf("%d Jogadores selecionados\n\n", njogadores); printVet(jogadoresPos, 5); printf("\n\n"); printf("Jogo iniciado: \n\n"); int dado = rolarDado(); int vez = 0; int Passou = 0; while(Morreram(jogadoresPos, 5) == FALSE && Ganhou(jogadoresPos, 5, 69) == FALSE && Passou != 1){ dado = rolarDado(); if(jogadoresPos[ vez ] != -1){ if (jogadoresPos[ vez ] > -1){ if(jogadoresPos[vez]+dado > 69){ printf("--Rolou %d no dado e passou a ultima casa\n", dado); dado = (69-jogadoresPos[vez]); } switch( caminho[ (jogadoresPos[ vez ]+ dado) ] ){ case 0: printf("Jogador % andar %d casas\n[saindo da casa %d para casa %d]\n\n", vez+1, dado, jogadoresPos[vez], jogadoresPos[vez]+dado); jogadoresPos[vez] += dado; system("PAUSE>>null"); vez++; break; case 10: printf("Jogador % [saindo da casa %d para casa %d]\n -> caiu no buraco, fim de jogo!\n\n", vez+1, jogadoresPos[vez], jogadoresPos[vez]+dado); jogadoresPos[vez] = -1; system("PAUSE>>null"); vez++; break; case 20: printf("Jogador % andar %d casas\n[saindo da casa %d para casa %d]\n", vez+1, dado, jogadoresPos[vez], jogadoresPos[vez]+dado); printf(" -> Casa %d eh casa de penalidade: jogador %d volta ao inicio do jogo\n\n", jogadoresPos[vez]+dado, vez+1); system("PAUSE>>null"); jogadoresPos[vez] = 0; vez++; break; case 30: printf("Jogador % andar %d casas\n[saindo da casa %d para casa %d]\n", vez+1, dado, jogadoresPos[vez], jogadoresPos[vez]+dado); printf("ficar parado por 1 rodada\n\n" ); jogadoresPos[vez] = (jogadoresPos[vez] + dado) * -100; system("PAUSE>>null"); vez++; break; } } else { printf("---Jogador %d esta parado nesta rodada.\n\n", vez+1); jogadoresPos[vez] /= 100; jogadoresPos[vez] *= -1; vez++; } } else { vez += 1; } if(vez >= njogadores){ vez = 0; } } if(Morreram(jogadoresPos, 5) == TRUE){ int i; for(i=0;i<5;i++){ if(jogadoresPos[i] != -1){ return printf("Parabens ao jogador %d, foi o unico restante e ganhou o jogo.", i+1); } } } if(Ganhou(jogadoresPos, 5, 69) == TRUE){ int i; for(i=0;i<5;i++){ if(jogadoresPos[i] >= 69){ return printf("Parabens ao jogador %d, foi o primeiro a chegar na ultima casa.", i+1); } } } }int Morreram(int jogadores[] ,int qnt) { int i, jogadoresvivos=0; for(i=0;i<qnt;i++){ if(jogadores[i] != -1){ jogadoresvivos++; } } if(jogadoresvivos <= 1){ return TRUE; } else { return FALSE; }}int Ganhou(int jogadores[], int qnt, int final) { int i; for(i=0;i<qnt;i++){ if(jogadores[i] == final){ return TRUE; } } return FALSE;}int createVetJogadores(int njog, int vet[], int qnt){ int t; for(t=0;t<5;t++){ if(njog > 0){ vet[t] = 0; njog--; } else{ vet[t] = -1; } }}int selecionarJogadores(int min, int max){ int nj; printf("\n\n*Digite um numero de %d-%d jogadores: ", min, max); scanf("%d", &nj); if (nj >= 2 && nj <= 5){ return nj; } else { system("cls"); printf("\n!!! Numero invalido de jogadores !!!"); return selecionarJogadores(min, max); } }void fillVetor(int vet[], int qnt, int num){ int i; for(i=0;i<qnt;i++){ vet[i] = num; }}int genRandomEspecials(int vet[], int qnt, int holePos, int restartPos, int stopPos, int diceBackPos){ int i; int count[] = {holePos, restartPos, stopPos, diceBackPos}; int total = (count[0] + count[1] + count[2] + count[3]); // 23 int sortPos = rand() % 68 + 1; srand( (unsigned)time(NULL) ); while(total != 0){ sortPos = rand() % 68 + 1; if(vet[sortPos] == 0){ if(count[0] > 0){ vet[sortPos] = 10; // Buraco count[0]--; total--; } else if (count[1] > 0){ vet[sortPos] = 20; // Restart count[1]--; total--; } else if (count[2] > 0){ vet[sortPos] = 30; // Stop / Congela count[2]--; total--; } else if (count[3] > 0){ vet[sortPos] = 40; // GoBack count[3]--; total--; } } }}void printVet(int vet[], int qnt){ int i; printf("{"); for(i=0;i<qnt;i++){ i == qnt-1 ? printf("%d", vet[i]) : printf("%d, ", vet[i]); } printf("}");}int rolarDado(){// srand(time(NULL)); int dado = rand() % 6 + 1; return dado;}/*1 buraco, representando o final do jogo para o jogador que cair no mesmo;2 casas com a punição de voltar para o início do jogo; 5 casas que deixarão o jogador parado por uma rodada;15 casas que exigirão que o jogador volte N casas, onde N será definido pelo arremesso de um dado (função rand()). */ Editado Julho 8, 2017 por Caronte Link para o comentário Compartilhar em outros sites More sharing options...
DarkWore 112 Postado Julho 8, 2017 Share Postado Julho 8, 2017 Muito Bom Caronte, Como Sempre, Grande Abraço meu amigo. Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados