El juego de la vida en C++
Buenas, volviendo un poco con el tema de la vida artificial que lo tengo apartado, ahora que estoy aprendiendo C++ he vuelto a los orígenes y he programado una versión del juego de la vida para consola usando C++ y la STL, biblioteca que quiero conocer.
Ya sabía algo de C básico, pero ahora quiero pasar el desarrollo de videojuegos a C++ y me he puesto a aprender Orientación a Objetos en C++ y a usar la STL que es una gran biblioteca estándar de C++ que contiene muchas cosas que nos facilitan el trabajo. Bueno después del salto dejo el código.
#include <iostream> #include <cstdlib> #include <vector> #include <unistd.h> using namespace std; class Mapa { public: int fil; int col; int vecinos; vector<vector<int> > mapa; Mapa(int f, int c); void dibujar(); int analizarVecinos(int posf, int posc); void ciclo(); }; Mapa::Mapa(int f, int c) { fil = f; col = c; mapa.resize(fil); for(int i=0; i<mapa.size(); i++) { mapa[i].resize(col); } for(int f=0; f<fil; f++) { for(int c=0; c<col; c++) { mapa[f]1 = rand()%2; } } } void Mapa::dibujar() { for(int f=0; f<fil; f++) { for(int c=0; c<col; c++) { if(mapa[f]1 == 1) cout << "* "; else cout << ". "; } cout << "\n"; } } int Mapa::analizarVecinos(int posf, int posc) { vecinos = 0; if(posf-1 >= 0 and posc-1 >= 0) if(mapa[posf-1][posc-1] == 1) vecinos++; if(posf-1 >= 0) if(mapa[posf-1][posc] == 1) vecinos++; if(posf-1 >= 0 and posc+1 <= col-1) if(mapa[posf-1][posc+1] == 1) vecinos++; if(posc-1 >= 0) if(mapa[posf][posc-1] == 1) vecinos++; if(posc+1 <= col-1) if(mapa[posf][posc+1] == 1) vecinos++; if(posf+1 <= fil-1 and posc-1 >= 0) if(mapa[posf+1][posc-1] == 1) vecinos++; if(posf+1 <= fil-1) if(mapa[posf+1][posc] == 1) vecinos++; if(posf+1 <= fil-1 and posc+1 <= col-1) if(mapa[posf+1][posc+1] == 1) vecinos++; return vecinos; } void Mapa::ciclo() { vector<vector<int> > nueva_conf = mapa; for (int f=0; f<fil; f++) { for(int c=0; c<col; c++) { int n_vecinos = analizarVecinos(f, c); if(mapa[f]1 == 0) { if(vecinos == 3) nueva_conf[f]1 = 1; else nueva_conf[f]1 = 0; } if (mapa[f]1 == 1) { if(vecinos == 2 || vecinos == 3) nueva_conf[f]1 = 1; else nueva_conf[f]1 = 0; } } } mapa = nueva_conf; } int main() { srand(time(NULL)); Mapa mapa(20, 20); while(1) { mapa.dibujar(); usleep(100000); system("clear"); mapa.ciclo(); } }
y qué hace? :P
Esa fue mi primera práctica en estructuras de datos y de la información para ir tomando cercanía con el C++ :p
Bline, a ver si las mías son así, el año que viene empiezo la carrera.
Yo hice lo mismo una vez:
http://host-a.net/Ideka/liife_es.rar
Sólo que es para Wii, y me olvidé de cómo compilarlo.
=D
Lol.
Adri, si el año que viene empiezas la carrera, por lo que he visto en todo el blog…
Te aburrirás en clase una barbaridad xDD
Te deberían convalidar asignaturas, al menos las básicas de programación del primer curso.
Saludos!
jajaja no! estoy deseando empezar y aprender de verdad con base para ser mucho mejor. Y por lo que he visto en primero más bien es matemática pura y dura tanto análisis como álgebra.
Hola, buenas.
¿De casualidad tú no eres adrigm el de los foros de la Comunidad Hispana de RPG Maker?
Eso del juego de la vida me lo han dejado a mí en un curso de la universidad, jeje. Espero poder resolverlo.
¡Un saludo!
Suelo entrar por allí, si. Tengo amigos en esa web.
Hola, de nuevo.
Pues, vaya, no sabía que tenías un blog y todo, jeje.
De hecho, yo te he visto más en el chat ese de la CH. A ver si un día coincidimos y conversamos un rato.
¡Un saludo!