Sei sulla pagina 1di 4

/*

Aluno:Pedro Henrique Antunes Rocha


Computao Bsica*/
#include <stdio.h>
#include <string.h>
int main (){
int i,j,geracao,nvizinhos,M[21][21],E[21][21];/*Variveis i e j para o for, geraca
o para contar a quantidde de geraes, nvizinhos para contar o nmero de vizinhos, M[2
1][21] uma matriz de 21 linhas e colunas para armazenar o jogo, a primeira linha
e coluna so usadas para armazenar as coordenadas da matriz e E[21][21] para serv
ir de espelho da matriz M e alterar seus valores sem impedir as condies em M.*/
M[0][0]=0;/*Valores das coordenadas inicializados para a primeira linha e coluna
das matrizes M e E.Os valores acima de 10 foram inicializados apenas com uma un
idade para manter o afastamento correto na hora de imprimir a matriz.*/
M[0][1]=1;
M[0][2]=2;
M[0][3]=3;
M[0][4]=4;
M[0][5]=5;
M[0][6]=6;
M[0][7]=7;
M[0][8]=8;
M[0][9]=9;
M[0][10]=0;
M[0][11]=1;
M[0][12]=2;
M[0][13]=3;
M[0][14]=4;
M[0][15]=5;
M[0][16]=6;
M[0][17]=7;
M[0][18]=8;
M[0][19]=9;
M[0][20]=20;
M[1][0]=1;
M[2][0]=2;
M[3][0]=3;
M[4][0]=4;
M[5][0]=5;
M[6][0]=6;
M[7][0]=7;
M[8][0]=8;
M[9][0]=9;
M[10][0]=0;
M[11][0]=1;
M[12][0]=2;
M[13][0]=3;
M[14][0]=4;
M[15][0]=5;
M[16][0]=6;
M[17][0]=7;
M[18][0]=8;
M[19][0]=9;
M[20][0]=20;
E[0][0]=0;
E[0][1]=1;
E[0][2]=2;
E[0][3]=3;
E[0][4]=4;

E[0][5]=5;
E[0][6]=6;
E[0][7]=7;
E[0][8]=8;
E[0][9]=9;
E[0][10]=0;
E[0][11]=1;
E[0][12]=2;
E[0][13]=3;
E[0][14]=4;
E[0][15]=5;
E[0][16]=6;
E[0][17]=7;
E[0][18]=8;
E[0][19]=9;
E[0][20]=20;
E[1][0]=1;
E[2][0]=2;
E[3][0]=3;
E[4][0]=4;
E[5][0]=5;
E[6][0]=6;
E[7][0]=7;
E[8][0]=8;
E[9][0]=9;
E[10][0]=0;
E[11][0]=1;
E[12][0]=2;
E[13][0]=3;
E[14][0]=4;
E[15][0]=5;
E[16][0]=6;
E[17][0]=7;
E[18][0]=8;
E[19][0]=9;
E[20][0]=20;
for(i=1;i<21;i++){/*Faz com que todos os termos da matriz M ,com exceo da primeira
linha e coluna,sejam preenchidos por um espao vazio*/
for(j=1;j<21;j++){
M[i][j]=' ';
}
}
for(i=1;i<21;i++){/*Faz com que todos os termos da matriz E ,com exceo da primeira
linha e coluna,sejam preenchidos por um espao vazio*/
for(j=1;j<21;j++){
E[i][j]=' ';
}
}
i=-1;/*inicializa-se i e j com valores negativos para entrarem no while sem sere
m impressos*/
j=-1;
printf(">>>>>>>>>>>>>JOGO DA VIDA<<<<<<<<<<<<<<<\n");
printf("Regras:\n");
printf("1-Se a celula esta viva e tem menos de dois vizinhos,ela morre de solida
o. Se\nela tem mais de tres vizinhos,ela morre por problemas devidos a super-pop
ulacao.\n");
printf("2-Uma celula morta rodeado por tres celulas vivas resultara em uma celul
a viva\nna proxima geracao.\n");
printf("\n");
printf("3-Uma celula viva, adjacente a duas ou tres celulas vivas, permanece viv

a.\n");
printf("\n");
printf("4-Todas as celulas vao de gerao a geracao ao mesmo tempo.\n");
printf("\n");
printf("Para passar para a proxima gerao basta apertar a tecla ENTER.\n");
while (i!=0 && j!=0){/*While utilizador para parar de pedir o Usurio as coordenad
as at ele inserir pelo menos uma coordenada com 0.*/
M[i][j]='*';
do{
i=-1;
j=-1;
printf("\n");
printf("Digite as coordenadas de linha e coluna (no formato L,C *lembrese da vrgula)\nque deseja que tenham vida(entre com pelo menos um 0 nas coordenad
as para parar)\n");
scanf("%d,%d",&i,&j);/*Leitura das coordenadas os quais o usurio entra*/
if (((i<0)||(i>20))||((j<0)||(j>20))){
printf("Entre com valores de 0 ate 20.\n");/*Correo de dados caso o us
urio entre com valores acima de 20 ou abaixo de 0.*/
}
printf("--------------------------------------\n");
}while(((i<0)||(i>20))||((j<0)||(j>20)));/*do-while para repetir a entrada d
e dados do usurio caso ele entre com dados invlidos.*/
getchar();/*getchar para mostrar a matriz original sem pul-la*/
}
printf ("---------------------------------------------\n");
for (i=0;i<21;i++){/*for para vasculhar cada termo da matriz M e imprim-lo*/
for(j=0;j<21;j++){
if ((i==0)||(j==0)){/*If para imprimir a primeira linha e coluna com %d,
pois so nmeros, e depois imprimir o resto com %c pois so char.*/
printf(" %d",M[i][j]);
}else printf(" %c",M[i][j]);
}
printf("\n");
}
printf("----------------------------------------------------\n");
printf("Essa e a sua geracao original,agora tecle enter para ver cada geracao.\n
");
getchar();
for(geracao=0;geracao<30;geracao++){/*for para fazer o jogo durante as 30 geraes.*
/
printf("Geracao %d:\n",geracao+1);
for (i=1;i<21;i++){
for (j=1;j<21;j++){/*for para vasculhar toda a matriz M e procurar a qua
ntidade de vizinhos de cada termo dela com exceo da primeira linha e coluna.*/
nvizinhos=0;
E[i][j]=M[i][j];/*Para fazer com que a matriz espelho fique igual ma
triz M, para ento poder alterar os dados.*/
if (M[i+1][j+1]== '*') nvizinhos+=1;/*condies para encontrar os vizinh
os de cada termo e armazenar a quantidade na varivel nvizinhos*/
if (M[i+1][j]== '*') nvizinhos+=1;
if (M[i][j+1]== '*') nvizinhos+=1;
if (M[i-1][j-1]== '*') nvizinhos+=1;
if (M[i-1][j]== '*') nvizinhos+=1;
if (M[i][j-1]== '*') nvizinhos+=1;
if (M[i-1][j+1]== '*') nvizinhos+=1;
if (M[i+1][j-1]== '*') nvizinhos+=1;

if (nvizinhos==3) E[i][j]='*';/*Condies para as regras do jogo, se o n


vizinhos for igual a 3 a casa que est sendo vasculhada ser substituida pelo '*' */
if ((nvizinhos!=3)&&(nvizinhos!=2)) E[i][j]=' ';/*Condies para as regr
as do jogo,se o nzinhos for um nemro diferente de 2 e de 3 o espao vasculhado se t
orna um espao vazio. */
}
}
for (i=0;i<21;i++){
for (j=0;j<21;j++){/*For para a impresso da matriz depois das alteraes feit
as pelas regras do jogo*/
M[i][j]=E[i][j];/*Como as alteraes foram feitas na matriz E, seu dados
so substituido para a matriz M se tornando agora a matriz da prxima gerao.*/
if ((i==0)||(j==0)){
printf(" %d",M[i][j]);/*If para imprimir a primeira linha e colu
na com %d, pois so nmeros, e depois imprimir o resto com %c pois so char.*/
}else printf(" %c",M[i][j]);
}
printf("\n");
}
printf("----------------------------------------------------\n");
getchar();/*getchar para impedir de imprimir uma matriz atrs da outra sem int
errupo, fazendo com que o usurio precise teclar ENTER para ir para a prxima gerao*/
}
return (0);
}

Potrebbero piacerti anche