Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- int l, c,luzfound = 0, score = 0, steps = 0, arrow = 0; // a luz nao foi encontrada ainda, vai ser mudado para 1 quando for.
- typedef struct celula {
- int tipo;
- int cheiroFraco;
- int cheiroMedio;
- int cheiroForte;
- int brisaFraca;
- int brisaMedia;
- int brisaForte;
- } celula;
- int walk(char dir, int i, int j){ //passa a direcao para andar (w,a,s,d) , a posicao i (linhas) e j (colunas) e o numero de passos.
- steps--;
- score--;
- if (dir == 'w'){
- i--;
- }
- if (dir == 's'){
- i++;
- }
- if (dir == 'a'){
- j--;
- }
- if (dir == 'd'){
- j++;
- }
- if(i < 0){
- printf("Movimento invalido!\n");
- i++;
- }
- if(j < 0){
- printf("Movimento invalido!\n");
- j++;
- }
- if(i > l-1){
- printf("Movimento invalido!\n");
- i--;
- }
- if(j > c-1){
- printf("Movimento invalido!\n");
- j--;
- }
- if(dir == 'w' || dir == 's') return i;
- if(dir == 'a' || dir == 'd') return j;
- }
- void sensations(int i, int j, celula ** M){ //sensações no local
- if (i == 0 && j == 0 && luzfound == 1){
- printf("Voce saiu do mundo de Wumpus a salvo!\n");
- score += 1000;
- }
- if (M[i][j].tipo == 1){
- printf("Voce encontrou um abismo!\n");
- score -= 1000;
- steps = 0;
- i = j = 0; //volta para o inicio
- }
- if (M[i][j].tipo == 2){
- printf("Voce encontrou um monstro!\n");
- score -=10000;
- steps = 0;
- i = j = 0; //volta para o inicio
- }
- if (M[i][j].tipo == 3){
- printf("Parabens, voce encontrou a luz\n");
- score += 1000;
- luzfound = 1;
- }
- //imprimindo as sensações
- int k;
- for(k = 0;k<M[i][j].cheiroFraco;k++){
- printf("Você sente um cheiro fraco\n");
- }
- for(k = 0;k<M[i][j].cheiroMedio;k++){
- printf("Você sente um cheiro médio\n");
- }
- for(k = 0;k<M[i][j].cheiroForte;k++){
- printf("Você sente um cheiro forte\n");
- }
- for(k = 0;k<M[i][j].brisaFraca;k++){
- printf("Você sente uma brisa fraca\n");
- }
- for(k = 0;k<M[i][j].brisaMedia;k++){
- printf("Você sente uma brisa média\n");
- }
- for(k = 0;k<M[i][j].brisaForte;k++){
- printf("Você sente uma brisa forte\n");
- }
- }
- int shoot(int i, int j, celula ** M, char side){ //retorna 0 se errar ou for inválido, 1 se acertar. - Função flecha
- if (arrow == 0){
- printf("Você já gastou a sua flecha!\n");
- return 0;
- }
- arrow--;
- if (side == 'w'){
- i--;
- }
- if (side == 's'){
- i++;
- }
- if (side == 'a'){
- j--;
- }
- if (side == 'd'){
- j++;
- }
- if (i < 0 || j < 0 || i > l-1 || j > c-1) return 0;
- if (M[i][j].tipo == 2){
- printf("Você matou Wumpus!\n");
- return 1;
- }else{
- printf("Errou!\n");
- return 0;
- }
- }
- int askwhat(int i, int j, celula ** M, char side){ //função de pergunta
- score--;
- if (side == 'w'){
- i--;
- }
- if (side == 's'){
- i++;
- }
- if (side == 'a'){
- j--;
- }
- if (side == 'd'){
- j++;
- }
- if (i < 0 || j < 0 || i > l-1 || j > c-1){
- printf("Você encontrou uma parede\n");
- return 0;
- }
- sensations(i, j, M);
- }
- int main() {
- int i, j, k = 0;
- int begin, end, l = 0, c = 0;
- char side, dir;
- //-----Função de leitura--------//
- FILE* fp;
- char* mat_content; //vetor que tem a leitura
- celula **M;
- fp = fopen("matriz.txt", "r");
- if (fp==NULL)
- return -1;
- //----Fim leitura arquivo----//
- //Próximas 2 linhas scanf do arquivo
- fscanf(fp, "%d", &l);
- fscanf(fp, "%d", &c);
- steps = l*c;
- //-------Declaração da matriz ------//
- M = (celula **)calloc((l*c), sizeof(celula*)); //declara setando como 0
- for(i=0; i<l; i++)
- M[i] = (celula *)calloc(c, sizeof(celula)); //declara setando como 0
- begin = ftell(fp); //começo
- fseek(fp, 0, SEEK_END); //vai até o fim
- end = ftell(fp); //conta a posição do fim
- fseek(fp, begin+1, SEEK_SET); //começa a setar à partir do begin
- mat_content = (char*)malloc((end-begin)*sizeof(char)); //alocação
- fread(mat_content,sizeof(char), (end-begin), fp); //read
- //-------Fim Declaração da Matriz -------//
- //------Atribuição de cada tipo à struct-------//
- for(i=0; i<l; i++){
- for(j=0; j<c; j++){
- while(mat_content[k] != '\n'){
- if (mat_content[k] == 'A')
- M[i][j].tipo = 1; // Abismo é tipo 1
- if (mat_content[k] == 'M')
- M[i][j].tipo = 2; // Monstro é tipo 2
- if (mat_content[k] == 'L')
- M[i][j].tipo = 3; // Luz é tipo 3
- if (mat_content[k] == 'B')
- M[i][j].brisaForte++; //é B
- if (mat_content[k] == 'C')
- M[i][j].cheiroForte++; //é C
- if (mat_content[k] == 'b'){
- if(mat_content[k+1] == 'B'){
- M[i][j].brisaMedia++; //é bB
- k++;
- }else{
- M[i][j].brisaFraca++; //é b
- }
- }
- if (mat_content[k] == 'c'){
- if(mat_content[k+1] == 'C'){
- M[i][j].cheiroMedio++; //é cC
- k++;
- }else{
- M[i][j].cheiroFraco++; //é c
- }
- }
- k++;
- }//Linha abaixo testando o scan
- k++;
- printf("\ni = %d, j = %d k = %d - [%d %d %d %d %d %d %d]", i, j, k, M[i][j].tipo, M[i][j].brisaFraca, M[i][j].brisaMedia, M[i][j].brisaForte, M[i][j].cheiroFraco, M[i][j].cheiroMedio, M[i][j].cheiroForte);
- }
- }
- //--------Fim da Atribuição-----------//
- i = 0;
- j = 0;
- /*
- scanf("%c",&dir);
- do {
- printf("Sua coordenada atual é {%d, %d}\n", i, j);
- scanf("%c",&dir);
- if(dir == 'q'){ //q é o modo shoot
- printf("Digite o lado para qual quer atirar\n");
- scanf("%c", &side);
- if(shoot(i, j, M, side) == 1){
- score += 10000;
- }
- scanf("%c", &dir);
- }
- if(dir == 'w' || dir == 's'){
- i = walk(dir, i, j);
- }
- if(dir == 'a' || dir == 'd'){
- j = walk(dir, i, j);
- }
- sensations(i, j, M);
- }while (steps != 0);
- printf("Você chegou ao fim do jogo, a sua pontuação é: %d", score);
- */
- //--------- Dando free no programa--------/
- fclose(fp);
- for(i=0; i<c; i++)
- free(M[i]);
- free(M);
- free(mat_content);
- //--------- Fim do free ----------//
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement