"First, solve the problem.
Then, write the code."
John Johnson
Flash/AS3

Game of Life/Gra w życie

Mrówka Langtona/Langton's ant
zamknięty:
październik 2011
zleceniodawca:
projekt uczelniany
Opis:

Najpierw krótki wstęp teoretyczny:

Gra w życie (Life, The game of life) – jeden z pierwszych i najbardziej znanych przykładów automatu komórkowego, wymyślony w roku 1970 przez brytyjskiego matematyka Johna Conwaya.

Gra toczy się na planszy podzielonej na komórki. Każda komórka ma ośmiu "sąsiadów" i może znajdować się w jednym z dwóch stanów: może być albo "żywa", albo "martwa". Stany komórek zmieniają się w pewnych jednostkach czasu. Stan wszystkich komórek w pewnej jednostce czasu jest używany do obliczenia stanu wszystkich komórek w następnej jednostce. Po obliczeniu wszystkie komórki zmieniają swój stan dokładnie w tym samym momencie. Udział człowieka sprowadza się jedynie do ustalenia stanu początkowego komórek.

Zdefiniowano kilka wzorców reguł generowania, najbardziej rozpowszechnione są reguły wymyślone przez Conwaya:

  • martwa komórka mająca dokładnie 3 żywych sąsiadów, staje się żywa w następnej jednostce czasu,
  • żywa komórka z 2-3 żywymi sąsiadami pozostaje żywa; przy innej liczbie umiera (z samotności albo zatłoczenia).

http://pl.wikipedia.org/wiki/Gra_w_%C5%BCycie

 

A teraz kilka słów o samym projekcie:

  • został napisany za pomocą ActionScript 3,
  • umożliwia manulane rozłożenie komórek żywych i martwych,
  • jak i również wczytanie z plików XML ustawień w nich zdefiniowanych,
  • istnieje opcja zmiany zasad gry (więcej na ten temat - wiki) oraz ich walidację.

Przykładowy fragment kodu ukazujący podstawową obsługę plików XML w AS3:

<?xml version="1.0" encoding="UTF-8"?>
<cells>
    <size>2</size>
    <cell>
        <xpos>12</xpos>
        <ypos>9</ypos>
    </cell>
    <cell>
        <xpos>13</xpos>
        <ypos>9</ypos>
    </cell>
</cells>
var xmlCells:XML;
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);

xmlLoader.load(new URLRequest("xml/glider.xml"));

function xmlLoaded(event:Event):void
{
	xmlCells = new XML(xmlLoader.data);
	for (var i:int=0; i<xmlCells.size; i++)
	{
		var yPos:int = xmlCells.cell[i].yPos;
		var xPos:int = xmlCells.cell[i].xPos;
		//obsługa danych
	}
}
do góry