-
Notifications
You must be signed in to change notification settings - Fork 0
/
MOVE_BUSY.c
121 lines (110 loc) · 3.66 KB
/
MOVE_BUSY.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_STR 50
#include "MOVE_FISH.h"
#include "MOVE_HARBOR.h"
#include "MANO.h"
#include "FISH_LOGIC.h"
int esquerda_ou_direita_BUSY(int altura, int largura, int *matrizPointer, int y, int x, int pontodePesca){
int retornoFuncao = 0;
int peixe = 0;
int maior = 0;
if(y!= 0){
int casas_antes_do_y = 0;
for(int i = 0; i <= y-1; i++){
if(*(matrizPointer+(largura*x)+i) == pontodePesca){
casas_antes_do_y = i;
peixe = qual_peixe(altura,largura,matrizPointer,casas_antes_do_y,x);
if(peixe > maior){
maior = peixe;
retornoFuncao = (i+1);
retornoFuncao = -retornoFuncao;
}
}
}
}
int casas_antes_do_y = largura;
for(int substituto_y = largura-1; substituto_y >= y+1; substituto_y--){
if(*(matrizPointer+(largura*x)+substituto_y) == pontodePesca){
casas_antes_do_y = substituto_y;
peixe = qual_peixe(altura,largura,matrizPointer,substituto_y,x);
if(peixe > maior){
maior = peixe;
retornoFuncao = casas_antes_do_y;
}
}
}
return retornoFuncao;
}
char * locomove_esquerda_ou_direita_BUSY(int altura, int largura, int *matrizPointer, int y, int x){
int pontodePesca = *(matrizPointer+(largura*x)+y);
int vetorLinha[largura];
int retornoFuncao = 0;
for(int j = 0; j < largura; j++){
vetorLinha[j] = *(matrizPointer+(largura*x)+j);
if(vetorLinha[j] == 21 || vetorLinha[j] == 11 || vetorLinha[j] == 31 || vetorLinha[j] == 10 || vetorLinha[j] == 20 || vetorLinha[j] == 30 || vetorLinha[j] == 1 || vetorLinha[j] == *(matrizPointer+(largura*x)+(y+1)) || vetorLinha[j] == *(matrizPointer+(largura*x)+(y-1)) ){
vetorLinha[j] = 0;
}
}
for(int j = 0; j < largura; j++){
if(vetorLinha[j] > pontodePesca){
pontodePesca = vetorLinha[j];
}
}
retornoFuncao = esquerda_ou_direita_BUSY(altura,largura, matrizPointer,y,x, pontodePesca);
if(retornoFuncao == 0){
return "NOTHING";
}else if(retornoFuncao < 0){
return "LEFT";
}else if(retornoFuncao > 0){
return "RIGHT";
}
}
void funcBUSY(int x, int y, int s, int largura, int altura, int *matrizPointer){
int retorno;
int acoes = 4;
char result[10];
char *retornoF;
srand(s);
int num = rand()%acoes;
switch(num){
case 0:
retornoF = locomove_esquerda_ou_direita_BUSY(altura, largura, matrizPointer, y, x);
if(strcmp(retornoF,"NOTHING")==0){
funcBUSY(x,y,s+879,largura,altura,matrizPointer);
}else{
printf("%s\n",retornoF);
scanf("%s",&result);
}
break;
case 1:
retornoF = locomove_esquerda_ou_direita_BUSY( altura, largura, matrizPointer, y, x);
if(strcmp(retornoF,"NOTHING")==0){
funcBUSY(x,y,s+879,largura,altura,matrizPointer);
}else{
printf("%s\n",retornoF);
scanf("%s",&result);
}
break;
case 2:
retorno = detectar_peixes_na_linha_de_cima(altura, largura, matrizPointer,y, x);
if(retorno == 0){
funcBUSY(x,y,s+317,largura,altura,matrizPointer);
}else{
printf("UP\n");
scanf("%s",&result);
}
break;
case 3:
retorno = detectar_peixes_na_linha_de_baixo(altura, largura,matrizPointer, y, x);
if(retorno == 0){
funcBUSY(x,y,s+43,largura,altura,matrizPointer);
}else{
printf("DOWN\n");
scanf("%s",&result);
}
break;
}
}