Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <pthread.h>
- #include <math.h>
- #define TAM_MATRIZ 7
- char matriz[TAM_MATRIZ][TAM_MATRIZ];
- pthread_mutex_t foo_mutex;
- time_t t;
- void printMatriz() { /*Imprime a matriz no terminal. */
- int i,j;
- for(i = 0; i < TAM_MATRIZ; i++) {
- for(j = 0; j < TAM_MATRIZ; j++) {
- printf("%c", matriz[i][j]);
- }
- printf("\n");
- }
- }
- void printMatrizFile(FILE *writer) { /*Imprime a matriz no arquivo de log de cada jogador. */
- int i,j;
- for(i = 0; i < TAM_MATRIZ; i++) {
- for(j = 0; j < TAM_MATRIZ; j++) {
- fprintf(writer, "%c", matriz[i][j]);
- }
- fprintf(writer, "\n");
- }
- }
- void getPosInicial(int id, int *posx, int *posy) { /*Busca a posição inicial de cada jogador. */
- int i, j;
- for(i = 0; i < TAM_MATRIZ; i++) {
- for(j = 0; j < TAM_MATRIZ; j++) {
- if((int)matriz[i][j] -48 == id+1) {
- *posx = i;
- *posy = j;
- }
- }
- }
- }
- void *jogo(void *threadid) { /*Onde a lógica do jogo acontece. */
- int id = (int)threadid;
- int endGame = 0;
- int movimento;
- int posx, posy;
- getPosInicial(id, &posx, &posy);
- FILE *writer;
- char file[17] = "log_jogador_1.txt";
- file[12] = id + 1 + 48;
- writer = fopen(file, "w");
- srand((unsigned) time(&t));
- if(writer != NULL) {
- while(endGame == 0) {
- movimento = rand() % 4;
- movimento ++;
- movimento *= 2;
- if(movimento == 8 && posx > 0) {
- if(matriz[posx-1][posy] == 'F') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- pthread_mutex_unlock(&foo_mutex);
- fprintf(writer, "%d - Ganhou\n", movimento);
- endGame = 1;
- }
- else if(matriz[posx-1][posy] == '0') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- matriz[posx-1][posy] = id + 1 + 48;
- pthread_mutex_unlock(&foo_mutex);
- posx = posx-1;
- fprintf(writer, "%d\n", movimento);
- }
- else {
- fprintf(writer, "X\n");
- }
- }
- else if(movimento == 6 && posy < TAM_MATRIZ -1) {
- if(matriz[posx][posy+1] == 'F') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- pthread_mutex_unlock(&foo_mutex);
- fprintf(writer, "%d - Ganhou\n", movimento);
- endGame = 1;
- }
- else if(matriz[posx][posy+1] == '0') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- matriz[posx][posy+1] = id + 1 + 48;
- pthread_mutex_unlock(&foo_mutex);
- posy = posy + 1;
- fprintf(writer, "%d\n", movimento);
- }
- else {
- fprintf(writer, "X\n");
- }
- }
- else if(movimento == 4 && posy > 0) {
- if(matriz[posx][posy-1] == 'F') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- fprintf(writer, "%d - Ganhou\n", movimento);
- pthread_mutex_unlock(&foo_mutex);
- endGame = 1;
- }
- else if(matriz[posx][posy-1] == '0') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- matriz[posx][posy-1] = id + 1 + 48;
- pthread_mutex_unlock(&foo_mutex);
- posy = posy - 1;
- fprintf(writer, "%d\n", movimento);
- }
- else {
- fprintf(writer, "X\n");
- }
- }
- else if(movimento == 2 && posx < TAM_MATRIZ -1) {
- if(matriz[posx+1][posy] == 'F') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- pthread_mutex_unlock(&foo_mutex);
- fprintf(writer, "%d - Ganhou\n", movimento);
- endGame = 1;
- }
- else if(matriz[posx+1][posy] == '0') {
- pthread_mutex_lock(&foo_mutex);
- matriz[posx][posy] = '0';
- matriz[posx+1][posy] = id + 1 + 48;
- pthread_mutex_unlock(&foo_mutex);
- posx = posx + 1;
- fprintf(writer, "%d\n", movimento);
- }
- else {
- fprintf(writer, "X\n");
- }
- }
- else{
- fprintf(writer, "Fora da Matriz\n");
- }
- printMatrizFile(writer);
- //printMatriz();
- }
- }
- fclose(writer);
- return 0;
- }
- void *inicializaConfig() { /* Ler o arquivo txt e preencher a matriz global. */
- FILE *reader;
- reader = fopen("labirinto.txt", "r");
- char caractere;
- if(reader != NULL) {
- int i, j;
- for(i = 0; i < TAM_MATRIZ; i++) {
- for(j = 0; j < TAM_MATRIZ; j++) {
- caractere = (char)fgetc(reader);
- matriz[i][j] = caractere;
- }
- caractere = (char)fgetc(reader);
- }
- }
- fclose(reader);
- return 0;
- }
- int main(int argc, char** argv)
- {
- pthread_mutex_init(&foo_mutex, NULL);
- int condicao1 = (int)argv[1][0] - 48;
- int condicao2 = (int)(TAM_MATRIZ * TAM_MATRIZ / 2);
- if(condicao1 < condicao2) {
- pthread_t threads[condicao1];
- pthread_create(&threads[0], NULL, inicializaConfig, NULL);
- pthread_join(threads[0], NULL);
- int i;
- //printMatriz();
- for(i = 0; i < condicao1; i++) {
- pthread_create(&threads[i], NULL, jogo, (void *)i); //(intptr_t)
- }
- for(i = 0; i < condicao1; i++) {
- pthread_join(threads[i], NULL);
- }
- pthread_mutex_destroy(&foo_mutex);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment