Beruflich Dokumente
Kultur Dokumente
EL JUEGO DE
MATERIA
SISTEMAS (INF 391)
DOCENTE
INTEGRANTES
MOISES
LA VIDA
SIMULACIN
LAURA
CUARITA
DE
JUAN
LA PAZ BOLIVIA
2013
INDICE GENERAL
1. INTRODUCCION - VIDA ARTIFICIAL Y AUTOMATAS CELULARES
1.1. DEFINICION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
3
3
4
6
6
7
14
15
15
15
5. BIBLIOGRAFIA
16
1. INTRODUCCION - VIDA
ARTIFICIAL Y
AUTOMATAS CELULARES
1.1. DEFINICION
vivos
mediante
modelos
de
simulacin.
El termino fue acuado por el cientfico
Christopher Langton a finales de los ochenta
en la ((International Conference on the
Synthesis and Simulation of Living System)).
carbono.
tcnicas
artificial,
como
de
la
inteligencia
los
algoritmos
evolutivos,
programacin
gentica,
inteligencia
de
son
enjambre,
qumica
artificial...
1.2.
DEFINICION
CELULAR
DE
AUTOMATA
autmatas
herramientas
tiles
celulares
para
son
modelar
interacciones
formacin
de
entre
galaxias,
partculas,
cintica
de
como
diversos
sistemas
2. EL JUEGO DE LA VIDA
DE CONWAY
2.1. DESCRIPCION
2.2.
REGLAS
Sin
embargo
se
pueden
realizar
2.3.
PATRONES
esttico,
sin
que
se
Figura 2.1:
Patrn bloque
(block)
Figura 2.2:
Patrn barco
(boat)
Patrones recurrentes (oscilators): Un
conjunto de clulas vivas que no se
mueve por el mundo, pero que no es
esttico,
ya
que
se
producen
que
se
repiten
continuamente.
Patrones
que
se
trasladan
(spaceships):
Un
conjunto
de
Figura 2.4:
Patrn sapo
(toad)
3. DESARROLLO
((Reglas)) (Se
6
3. DESARROLLO
3.2. IMPLEMENTACION
Una
matriz
que
representa
las
3. DESARROLLO
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace JuegoVida
{
public partial class frmPrincipal : Form
{
private int margenH = 20;
private int margenV = 20;
private int filas = 110;
private int columnas = 110;
private int anchoCelda = 4;
private bool[,] estado;
delegate bool CalcularNuevoEstadoCelula(int fila, int
columna);
CalcularNuevoEstadoCelula calcularNuevoEstado;
public frmPrincipal()
{
InitializeComponent();
//Para evitar parpadeo al repintar la ventana
this.SetStyle(
ControlStyles.DoubleBuffer |
ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint |
ControlStyles.ResizeRedraw,
true);
//Se actualiza el estilo de dibujo del control
this.UpdateStyles();
//Establecemos el tamao de la ventana
SetClientSizeCore((2 * margenH) + (columnas *
anchoCelda),
(2 * margenV) + (filas * anchoCelda));
//Se inicializa la matriz de clulas
estado = new bool[filas, columnas];
//Reglas por defecto
3. DESARROLLO
9
calcularNuevoEstado = calcularEstado23_3;
}
private bool calcularEstado23_3(int fila, int columna)
{
bool res = false;
//Nmero de vecinos vivos
int numVecinosVivos = contarVecinosVivos(fila,
columna);
//Copiamos el estado anterior
res = estado[fila, columna];
//Aplicamos reglas:
//Una clula muerta pasa a viva si tiene 3 vecinas vivas
if (numVecinosVivos == 3)
res = true;
//Si una clula no tiene 2 3 vecinas muere o permanece
muerta
if (numVecinosVivos != 2 &&
numVecinosVivos != 3)
res = false;
return res;
}
private bool calcularEstado34_34(int fila, int columna)
{
bool res = false;
//Nmero de vecinos vivos
int numVecinosVivos = contarVecinosVivos(fila,
columna);
//Copiamos el estado anterior
res = estado[fila, columna];
//Aplicamos reglas:
//Una clula muerta pasa a viva si tiene 3 o 4 vecinas vivas
if (numVecinosVivos == 3 ||
numVecinosVivos == 4)
res = true;
//Si una clula no tiene 3 4 vecinas muere o permanece
muerta
3. DESARROLLO
if (numVecinosVivos != 3 &&
numVecinosVivos != 4)
res = false;
return res;
}
private bool calcularEstado1358_357(int fila, int columna)
{
bool res = false;
//Nmero de vecinos vivos
int numVecinosVivos = contarVecinosVivos(fila,
columna);
//Copiamos el estado anterior
res = estado[fila, columna];
//Aplicamos reglas:
//Una clula muerta pasa a viva si tiene 3,5 o 7 vecinas
vivas
if (numVecinosVivos == 3 ||
numVecinosVivos == 5 ||
numVecinosVivos == 7)
res = true;
//Si una clula no tiene 1,3,5 o 8 vecinas muere o
permanece muerta
if (numVecinosVivos != 1 &&
numVecinosVivos != 3 &&
numVecinosVivos != 5 &&
numVecinosVivos != 8)
res = false;
return res;
}
10
return res;
}
private void inicializarAleatorio()
{
Random rand = new Random((int)DateTime.Now.Ticks);
//Se inicializa la matriz de clulas con valores aleatorios
for (int i = 0; i < filas; i++)
for (int j = 0; j < columnas; j++)
estado[i, j] = (rand.Next(0, 100) >= 90);
}
private void frmPrincipal_Paint(object sender,
PaintEventArgs e)
{
Graphics g = e.Graphics;
//Se dibuja la matriz de clulas
for (int i = 0; i < filas; i++)
{
for (int j = 0; j < columnas; j++)
{
Rectangle rect =
new Rectangle(margenH + (anchoCelda * j),
margenV + 10 + (anchoCelda * i),
anchoCelda,
anchoCelda);
g.DrawRectangle(Pens.Gray, rect);
if (estado[i, j])
{
g.FillRectangle(Brushes.Black, rect);
}
}
}
}
11
{
for (int i = 0; i < filas; i++)
{
for (int j = 0; j < columnas; j++)
{
estadoAux[i, j] = calcularNuevoEstado(i, j);
}
}
estado = (bool[,])estadoAux.Clone();
backgroundWorker1.ReportProgress(0);
Thread.Sleep(50);
}
}
private void backgroundWorker1_ProgressChanged(object
sender, ProgressChangedEventArgs e)
{
Refresh();
}
private void acercaDeToolStripMenuItem1_Click(object
sender, EventArgs e)
{
FrmAcerca frm = new FrmAcerca();
frm.ShowDialog();
}
private void iniciarToolStripMenuItem_Click(object sender,
EventArgs e)
{
//Inicializamos la matriz de clulas
inicializarAleatorio();
//Se inicia la ejecucin
backgroundWorker1.RunWorkerAsync();
}
private void reglas1ToolStripMenuItem_Click(object sender,
EventArgs e)
12
{
reglas1ToolStripMenuItem.Checked = true;
reglas2ToolStripMenuItem.Checked = false;
reglas3ToolStripMenuItem.Checked = false;
//Se establen las reglas segn la opcin
3. DESARROLLO
13
3.3.
EJEMPLOS DE FUNCIONAMIENTO
14
4.2.
VARIANTES EN EL TABLERO
5. BIBLIOGRAFIA
Wikipedia (www.wikipedia.org)
A turing machine in Conway's game of life (rendell-attic.org/gol/tm.htm)
GAIA: Inteligencia arti cial (www.redcienti ca.com/gaia/index.html
Video demostrativo del juego de la vida (www.youtube.com/watch?v=s92EW7jVeq0)
16