Last active
June 18, 2018 13:59
-
-
Save denisb411/510b5f81655ebc97f37312b9433a8d18 to your computer and use it in GitHub Desktop.
zombie exercices using matrix - c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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