Sie sind auf Seite 1von 22

UNIVERSIDAD MAYOR DE SAN ANDRS

FACULTAD DE CIENCIAS PURAS Y NATURALES


CARRERA DE INFORMTICA

EL JUEGO DE
MATERIA
SISTEMAS (INF 391)
DOCENTE
INTEGRANTES
MOISES

LA VIDA

SIMULACIN

LIC. JAVIER REYES

LAURA

CUARITA

DE

JUAN

RAMOS ARUQUIPA FABIO


ROMER
SEA APAZA FREDDY
YAHUITA PONCE YECID A.
YAVI FERNANDEZ OSCAR R.
FECHA

1 DE AGOSTO DEL 2013

LA PAZ BOLIVIA
2013

INDICE GENERAL
1. INTRODUCCION - VIDA ARTIFICIAL Y AUTOMATAS CELULARES
1.1. DEFINICION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2. DEFINICION DE AUTOMATA CELULAR . . . . . . . . . . . . . . .

2. EL JUEGO DE LA VIDA DE CONWAY


2.1. DESCRIPCION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2. REGLAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3. PATRONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. DESARROLLO
3.1. DESCRIPCION DE LA APLICACION . . . . . . . . . . . . . . . . . .
3.2. IMPLEMENTACION . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3. EJEMPLOS DE FUNCIONAMIENTO . . . . . . . . . . . . . . . . . .
4. VARIANTES DEL JUEGO

3
3
3
4
6
6
7
14
15

4.1. VARIANTES EN LAS REGLAS . . . . . . . . . . . . . . . . . . . . .

15

4.2. VARIANTES EN EL TABLERO . . . . . . . . . . . . . . . . . . . . .

15

5. BIBLIOGRAFIA

16

1. INTRODUCCION - VIDA
ARTIFICIAL Y
AUTOMATAS CELULARES
1.1. DEFINICION

La vida artificial es el campo de la


ciencia que se dedica al estudio de la
vida y de los mecanismos esenciales de
la misma a travs de la creacin de
sistemas artificiales que tratan de imitar o
exhibir propiedades similares a la de los
seres

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)).

Los investigadores de la vida artificial


se han dividido habitualmente en dos
grupos de opinin:

Vertiente de vida artificial


dura/fuerte: consideran que la vida
es un proceso que se puede
conseguir fuera de cualquier medio
particular.
Vertiente de vida artificial dbil:
niega la posibilidad de generar un
((proceso de vida)) fuera de una
solucin qumica basada en el

carbono.

Dentro de este campo, atendiendo a


la primera vertiente, se utilizan muy
diversas

tcnicas

artificial,

como

de

la

inteligencia

los

algoritmos

evolutivos,

programacin

gentica,

inteligencia

de

son

enjambre,

qumica

artificial...

1.2.

DEFINICION
CELULAR

DE

AUTOMATA

Los autmatas celulares son redes de


autmatas simples conectados localmente.
Cada autmata simple produce una salida
a partir de varias entradas, modificando en
el proceso su estado segn una funcin de
transicin. Por lo general, en un autmata
1
1. INTRODUCCION - VIDA ARTIFICIAL Y AUTOMATAS CELULARES

celular, el estado de una clula en una


generacin determinada depende nica y
exclusivamente de los estados de las
clulas vecinas y de su propio estado en
la generacin anterior.
Los

autmatas

herramientas

tiles

celulares
para

son

modelar

cualquier sistema en el universo. Pueden


considerarse como una buena alternativa
a las ecuaciones diferenciales y han sido

utilizados para modelar sistemas fsicos,


como

interacciones

formacin

de

entre

galaxias,

partculas,
cintica

de

sistemas moleculares y crecimiento de


cristales,

como

diversos

sistemas

biolgicos a nivel celular, multicelular y


poblacional.

2. EL JUEGO DE LA VIDA
DE CONWAY
2.1. DESCRIPCION

El juego de la vida de Conway es el


autmata celular ms conocido y ms
estudiado, diseado por el matemtico
John Horton Conway en 1970. El juego es
un autmata celular bidimensional en el
cual cada celda (clula) puede estar en uno
de los dos estados posibles, viva o muerta.
Partiendo de un estado inicial, la
simulacin va haciendo evolucionar al
autmata en base a unas sencillas
funciones de transicin. Una clula va a
estar en un estado concreto, el cual ser
determinado nicamente del estado
inmediatamente anterior de las clulas
vecinas y el de la propia clula, tal y como
se describi en la seccin de autmatas
celulares.

2.2.

REGLAS

El conjunto bsico inicial que propuso


Conway se compone de tres reglas muy
sencillas:

Cada clula viva con dos o tres


clulas vecinas vivas sobrevive a la
siguiente generacin.

Cada clula viva con ninguna, una,


o ms de tres clulas vivas a su
alrededor pasa a estar muerta
(soledad y superpoblacin).
Cada clula muerta con tres clulas
vecinas vivas resucita en la
siguiente generacin.

Sin

embargo

se

pueden

realizar

variaciones en estas reglas para obtener


comportamientos distintos a los habituales.
La manera de representar las reglas es X/Y,
donde X e Y son nmeros enteros. Cada uno
de los dgitos que forman estos nmeros
representa un nmero de vecinos valido para
nacer o continuar viviendo respectivamente.
3
2. EL JUEGO DE LA VIDA DE CONWAY

Por ejemplo, las reglas que propuso


Conway se representaran como 3/23.
Esto significa que una clula muerta
volver a vivir si tiene 3 clulas vecinas
vivas, y que una clula viva sobrevive si
tiene 2 o 3 clulas vecinas vivas. En el
resto de los casos la clula contina sin
vida o muere.

2.3.

PATRONES

Un patrn es una configuracin de

clulas vivas que permanece estable.


Existen bsicamente tres clases de
patrones en el juego de la vida de
Conway.

Patrones estticos (still lifes): Un


conjunto de clulas vivas que se
mantiene

esttico,

sin

que

se

produzcan nuevos nacimientos o


muertes.

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

nacimientos y muertes, produciendo


transiciones

que

se

repiten

continuamente.

Patrones

que

se

trasladan

(spaceships):

Un

conjunto

de

clulas vivas que permanece con la


misma forma, pero que se desplaza
por el tablero.
2. EL JUEGO DE LA VIDA DE CONWAY

Figura 2.3: Patrn


parpadeador
(blinker)

Figura 2.4:
Patrn sapo
(toad)

Figura 2.5: Patrn


planeador (glider)

Figura 2.6: Patrn nave ligera (LWSS)

3. DESARROLLO

3.1. DESCRIPCION DE LA APLICACION

Se ha realizado una versin del Juego de la Vida de


Conway utilizando el lenguaje de programacin Visual C
Sharp. En esta versin se ha incluido la funcionalidad
bsica del juego junto con algunas opciones aadidas.

Posibilidad de ejecucin pas a paso, de cara a poder


ver el resultado de una aplicacin de las reglas a una
configuracin dada, y ejecucin continuada, para ver
el desarrollo de una configuracin inicial en el tiempo.
Control de velocidad en la ejecucin continuada.
Posibilidad de configurar las reglas del juego.

La aplicacin muestra un tablero con una matriz de clulas


(110x110), en principio todas en color blanco (muertas). Sobre el
tablero aparece un men con las opciones

((Reglas)) (Se

escoge una de las reglas ya descritas en previamente en el


punto 2). La opcin ((Ejecutar)) (permite iniciar la simulacin
dadas las reglas), ((Descripcin)) (Muestra de que trata el juego
de la vida y la informacin del grupo),

((Salir)) (se cierra la

aplicacin mediante el icono al lado derecho X).

Para modificar el estado del juego, solo debemos


cambiar la regla y poner en marcha de nuevo la aplicacin
con la opcin ((Ejecutar)).

6
3. DESARROLLO

3.2. IMPLEMENTACION

Para la creacin de la versin del Juego de la vida se han


implementado de 3 clases.

La clase Juego. Contiene la lgica del juego.


La clase Tablero. Contiene el cdigo correspondiente
a la interfaz grfica del juego.
La clase Reglas. Contiene el cdigo correspondiente
a la interfaz grfica de la seleccin de las reglas.

El cdigo se concentra principalmente en la primera de


las 3 clases, ya que las otras dos tan solo implementan
mtodos de respuesta a eventos del sistema que realizaran
llamadas a los mtodos de la clase Juego.

tablero. Una matriz de valores booleanos que


representan las celulas del juego. Si el valor de una
celula X,Y es true, la celula esta viva. En caso
contrario esta muerta.
alto. Un valor entero que representa el alto del tablero
del juego.
ancho. Un valor entero que representa el ancho del
tableo del juego.
reglaVida. Una matriz que representa las condiciones
que tiene que cumplir una celula para seguir viva.
reglaNacer.

Una

matriz

que

representa

las

condiciones que tiene que cumplir una celula para


nacer.
nPasos. Un entero que contabiliza el numero de pasos que se
han dado en el juego.

A continuacion se describen los metodos principales.

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

private int contarVecinosVivos(int fila, int columna)


{
int res = 0;
//Cuenta las clulas vivas que rodean a la celula situada en
[fila,columna]
for (int i = -1; i <= 1; i++)
for (int j = -1; j <= 1; j++)
if (i != 0 || j != 0)
if (estado[(filas + fila + i)%filas, (columnas +
columna + j)%columnas] == true)
res++;
3. DESARROLLO

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

private void backgroundWorker1_DoWork(object sender,


DoWorkEventArgs e)
{
bool[,] estadoAux = new bool[filas, columnas];
backgroundWorker1.ReportProgress(0);
Thread.Sleep(1000);
while (true)
3. DESARROLLO

{
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

seleccionada del men


calcularNuevoEstado = calcularEstado23_3;
}
private void reglas2ToolStripMenuItem_Click(object sender,
EventArgs e)
{
reglas1ToolStripMenuItem.Checked = false;
reglas2ToolStripMenuItem.Checked = true;
reglas3ToolStripMenuItem.Checked = false;
//Se establen las reglas segn la opcin seleccionada del
men
calcularNuevoEstado = calcularEstado34_34;
}
private void reglas3ToolStripMenuItem_Click(object sender,
EventArgs e)
{
reglas1ToolStripMenuItem.Checked = false;
reglas2ToolStripMenuItem.Checked = false;
reglas3ToolStripMenuItem.Checked = true;
//Se establen las reglas segn la opcin seleccionada del
men
calcularNuevoEstado = calcularEstado1358_357;
}
}
}3. DESARROLLO

3.3.

EJEMPLOS DE FUNCIONAMIENTO

14

4. VARIANTES DEL JUEGO


4.1.

VARIANTES EN LAS REGLAS

Desde la creacin del juego se han desarrollado


nuevas reglas. Algunos ejemplos de variantes en las
reglas son los siguientes.

/3 (estable) casi todo es una chispa


5678/35678 (catico) diamantes, catstrofes
1357/1357 (crece) todo son replicantes
1358/357 (catico) un reino equilibrado de
amebas
23/3 (catico) "Juego de la Vida de Conway"

23/36 (catico) "HighLife"(tiene replicante)


235678/3678 (estable) mancha de tinta que se
seca rpidamente
245/368 (estable) muerte, locomotoras y naves
34/34 (crece) "Vida 34"
51/346 (estable) "Larga vida casi todo son
osciladores

4.2.

VARIANTES EN EL TABLERO

Se han desarrollado variantes adicionales mediante


la modificacin de otros elementos del universo. Las
variantes anteriores son para un universo
bidimensional formado por cuadrados, pero tambin
se han desarrollado variantes unidimensionales y
tridimensionales, as como variantes 2-D donde la
malla es hexagonal o triangular en lugar de
cuadrada.
15

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

Das könnte Ihnen auch gefallen