Skip to content

Instantly share code, notes, and snippets.

@denisb411
Last active June 18, 2018 13:59
Show Gist options
  • Save denisb411/510b5f81655ebc97f37312b9433a8d18 to your computer and use it in GitHub Desktop.
Save denisb411/510b5f81655ebc97f37312b9433a8d18 to your computer and use it in GitHub Desktop.
zombie exercices using matrix - c
#include <stdio.h>
#include <stdlib.h>
/* Trabalho - The Walking Dead
Algoritmos e Lógica de Programação e Matemática Discreta
Desenvolvedores:
Thainnara dos Santos RA: 2760481811013
Vitor Gonçalves RA: 2760481811016 */
#define VAZIO 0
#define HUMANO 1
#define ZUMBI 2
int main (){
int m,n,i,j,dias,y;
int dias_passados = 1;
int num_vizinhos_humano=0,num_vizinhos_zumbi=0,num_vizinhos_vazio=0;/*contadores*/
printf("Quantidade de linhas da matriz: ");
scanf("%d",&m);
printf("Quantidade de colunas da matriz: ");
scanf("%d",&n);
printf("Quantidade de dias: ");
scanf("%d",&dias);
//vc precisa declarar o tamanho da matriz depois de perguntar o tamanho ok? ok
int M[m][n];
int Mtmp[m][n];
//rand() % (max_number + 1 - minimum_number) + minimum_number
int num_aleatorio;
printf("Configuracao Inicial da Populacao: \n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
num_aleatorio = rand() % (2 + 1 - 0) + 0; //gera um numero aleatorio entre 0 < n < 3
M[i][j] = num_aleatorio;
// scanf("%d",&M[i][j]);
}
}
printf("\n\n");
printf("Estado Inicial da Populacao\n\n");
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ", M[i][j]);
}
printf("\n");
}
printf("\n\n");
int keep_it_up=1;
//iteracao dos dias
while(keep_it_up){
printf("Dia %i: \n\n",dias_passados);
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ", M[i][j]);
}
printf("\n");
}
printf("\n\n");
//faz uma iteração simples em todos os elementos da matriz, como vc fez lá em cima pra printar
int linha, coluna;
int atual;
int ii, jj;
int vizinho_atual;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
//checando os vizinhos
// printf("Checking element %d,%d ....\n", i, j);
for(ii=-1; ii<2; ii++){
for(jj=-1; jj<2; jj++){
if ((ii == 0) && (jj == 0)){ //nao checar ele mesmo
continue;
}
if((i == 0) && (ii == -1)){ //caso seja nao tenha linha acima, usar a ultima
linha = m - 1;
} else if ((i == m-1) && (ii == 1)){ // caso nao tenha linha abaixo, usar a primeira
linha = 0;
} else {
linha = i + ii;
}
if((j == 0) && (jj == -1)){ //caso nao tenha coluna à esquerda, usar a ultima
coluna = n - 1;
} else if ((j == n-1) && (jj == 1)){ // caso nao tenha coluna à direita, usar a primeira
coluna = 0;
} else {
coluna = j + jj;
}
//para debuggar
// printf("position %d , %d\n", linha, coluna);
vizinho_atual = M[linha][coluna];
// printf("%d\n",vizinho_atual);
if(vizinho_atual == VAZIO){
num_vizinhos_vazio++;
} else if (vizinho_atual == HUMANO){
num_vizinhos_humano++;
} else {
num_vizinhos_zumbi++;
}
}
}
atual = M[i][j];
if ((atual == HUMANO) && (num_vizinhos_zumbi==1)) { //Se  X  for humano e possuir pelo menos um vizinho zumbi, então  X  é infectado e se torna um zumbi no dia seguinte;
Mtmp[i][j] = ZUMBI;
} else if ((atual == ZUMBI) && (num_vizinhos_humano > 1 )) { //Se  X  for zumbi e possuir dois ou mais vizinhos humanos, ele é caçado e morto pelos humanos;
Mtmp[i][j] = VAZIO;
} else if ((atual == ZUMBI) && (num_vizinhos_humano == 0)) { // Se  X  for zumbi e não possuir nenhum vizinho humano, ele morre de fome e fica vazio no dia seguinte;
Mtmp[i][j] = VAZIO;
} else if ((atual == VAZIO) && (num_vizinhos_humano == 2)) { // Se  X  estiver vazio e possuir exatamente dois vizinhos humanos, independente dos demais vizinhos serem zumbis ou vazio, então um humano nasce em  X  no dia seguinte.
Mtmp[i][j] = HUMANO;
} else { //Se nenhuma das alternativas anteriores for verdade, então  X  permanece como está.
Mtmp[i][j] = atual;
}
// printf("h: %d z:%d v:%d\n\n",hum,zomb,vazio);
num_vizinhos_humano = 0; num_vizinhos_zumbi = 0; num_vizinhos_vazio = 0;
}
}
for(i=0;i<m;i++){
for(j=0;j<n;j++){
M[i][j] = Mtmp[i][j];
}
}
dias_passados += 1;
if (dias_passados == (dias + 1)) {
keep_it_up = 0;
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment