Ir ao conteúdo
  • Cadastre-se

C++ jogo da vida - dificuldade em implementar as regras do jogo


raphasousz

Posts recomendados

Pf me ajudem, sou novo na programação e nesse fórum !!! Estou desenvolvendo um jogo da vida para um trabalho para a faculdade e estou com um problema.

Esse problema implica que as regras para decidir se a "célula" deve morrer ou nascer não estão sendo implementadas no meu programa,com isso,quando eu imprimo a matriz para a representar a próxima geração a matriz inicial se repete !!!

 

A descrição de como tem que ser feito esta em anexo.

 

SE ALGUÉM PODER ME AJUDAR AGRADEÇO MUITO.

 

Meu código já feito que esta com o problema relatado:

 

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;
void imprimematriz(const char matriz[][80]);//IMPRIME A MATRIZ
void alterageracoes (const char mundo [][80],const char geracoes [][80]);//CRIA OU MATA VIDA COM AS REGRAS

int main()
{
 char mundo [22][80];//MATRIZ geração ANTIGA
char geracoes [22][80];//MATRIZ DA NOVA geração
 // PREENCHENDO MATRIZ MUNDO
 for(int i=0;i<22;i++){
        for(int j=0;j<80;j++){
            if(i%4==0||j%4==0){
                mundo[j]= '*';
            }
            else mundo[j]=' ';
        }
    }
cout<<"Primeira geração:\n";
 imprimematriz(mundo);
system("pause");//PAUSA O PROGRAMA
system("CLS");//APAGA TELA
 //CASO O USUARIO NAO FICAR SATISFEITO COM A MATRIZ INICIAL
cout<< "Caso nao ficou satisfeito(a) com a matriz inicial você pode alterar por conta propria.\nTecle 1, Caso nao tecle outra tecla:\n";
int m;
cin>>m;
while(m==1){
int x,y,z;
cout<< "Selecione a posicao que se deseja alterar:\n";
cout << "linha\n";
cin >> x;
cout << "Coluna\n";
cin >> y;
cout<< "voce selecionou o valor de linha: "<<x<<" e coluna:"<<y<<" Que possui: "<<mundo[x][y]<<"\n";
if(x%4==0 || y%4==0){
    mundo[x][y]=' ';
}
else {
    mundo[x][y]='*';
}
cout<< "Agora a linha "<<x<<" e a coluna "<<y<<" possui "<<mundo[x][y]<<" de conteudo\n";
system("pause");
system("CLS");
cout << "Sua nova matriz:\n";
system("pause");
imprimematriz(mundo);
system("pause");
system("CLS");
cout<<"Deseja fazer outra alteracao ?\nTecle 1 para sim e outra tecla para nao:";
cin>>m;
}
system("CLS");
//COMEÇANDO AS GERAÇÔES E INCREMENTANDO AS REGRAS
cout<< "Para iniciar as geracoes? (1 para sim, outra tecla para nao)\n";
int w;
cin>>w;
int contadordegeracao=1;
system("CLS");
while(w==1){
cout<<"Essa eh a geração de numero:"<<contadordegeracao<<"\n";
alterageracoes(mundo,geracoes);
imprimematriz(mundo);
contadordegeracao++;
cout<<"Quer ir para a proxima geração? (1 para sim, outra tecla para n)\n";
cin>>w;
system("CLS");
}
cout<<"Obrigado por jogar !!! =)";
return 0;
}
void imprimematriz(const char matriz[][80]){ // FUNÇÃO QUE IMPRIME A MTRIZ
 for(int i=0;i<22;i++){
    for(int j=0;j<80;j++){
        cout << matriz[j] << " ";
        }
        cout << "\n";
}
}
//FUNÇÃO QUE ALTERA A MATRIZ COM AS REGRAS
void alterageracoes (const char mundo [][80],const char geracoes [][80]){
int cont;
for(int i=0;i<22;i++){
    for(int j=0;j<80;j++){
//CONTANDO CELULAS VIVAS AO REDOR DA CELULA ATUAL
cont = 0;
if(mundo[i-1][j-1] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[i-1][j] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[i-1][j+1] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[j-1] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[j+1] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[i+1][j-1] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[i+1][j] == '*' && mundo[j] != '*') {
cont++;
}
if(mundo[i+1][j+1] == '*' && mundo[j] != '*') {
cont++;
}
//MATANDO OU NASCENDO COM OS RESULTADOS DA VIZINHANÇA
if(cont==0 && mundo[j] =='*'){
geracoes[j]==' ';
}
if(cont == 1 && mundo[j] == '*') {
geracoes[j]==' ';
}
if(cont == 3 && mundo[j] == ' ') {
geracoes[j]=='*'; ;
}
if(cont >= 4 && mundo[j] == '*') {
geracoes[j]== ' ';
}
geracoes[j]==mundo[j];
}
}

}
 

Jogo da vida - EX.docx

Link para o comentário
Compartilhar em outros sites

for(int i=0;i<22;i++){
    for(int j=0;j<80;j++){
//CONTANDO CELULAS VIVAS AO REDOR DA CELULA ATUAL
cont = 0;
if(mundo[i-1][j-1] == '*' && mundo[i][j] != '*') {
cont++;
}

if(mundo[i-1][j+1] == '*' && mundo[j] != '*') {
cont++;
}

Nesta parte, o que irá acontecer no início do laço, quando i e j forem zeros? Quando será i-1 e j-1?

E se j = 79, quanto será que será j+1?

você está extrapolando os limites do array

Outra coisa esse tipo de condicional if (a>1 && a < 2)  é ambiguo. Separa com parenteses para evitar problemas:

if ((a>1) && (a < 2))

Uma possível correção seria algo assim:

for(int i=0;i<22;i++){
    for(int j=0;j<80;j++){
//CONTANDO CELULAS VIVAS AO REDOR DA CELULA ATUAL
cont = 0;
if ((i > 0) && (j > 0)) if ((mundo[i-1][j-1] == '*') && (mundo[i][j] != '*')) cont++;

if ((i >0) && (j < 79)) if ((mundo[i - 1][j + 1] == '*') && (mundo[i][j] != '*')) cont++;

Veja os outros casos em que há possibilidade de extrapolar o limite do array.

Outro erro é que você alterar o array dentro da função, mas passou como constante, então as alterações não são salvas. Retire o const:

void alterageracoes(char matriz[][80]);

As alterações da matriz dentro da função são salvas e então você passa ela novamente como argumento para calcular a próxima geração. Não há necessidade da outra matriz geracoes;

 

 

Outro erro que encontrei foi na hora de alterar a matriz:

if(cont==0 && mundo[i][j] =='*'){
geracoes[i][j]==' ';
}

O "==" é só para comparar. Para atribuir, utilize apenas um "=";

if ((cont==0) && (mundo[i][j] =='*')) mundo [i][j]=' ';

Veja se com isso resolve.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!