From f8038a91c51c5e46c39eee1eb028df350bde64d9 Mon Sep 17 00:00:00 2001
From: EckBalu <eckbalu@gmail.com>
Date: Tue, 29 Nov 2022 14:12:34 +0100
Subject: [PATCH] game logic done

---
 .gradle/7.5.1/checksums/checksums.lock        | Bin 17 -> 17 bytes
 .gradle/7.5.1/checksums/md5-checksums.bin     | Bin 21847 -> 21897 bytes
 .gradle/7.5.1/checksums/sha1-checksums.bin    | Bin 38153 -> 38315 bytes
 .../executionHistory/executionHistory.bin     | Bin 59364 -> 151507 bytes
 .../executionHistory/executionHistory.lock    | Bin 17 -> 17 bytes
 .gradle/7.5.1/fileHashes/fileHashes.bin       | Bin 24397 -> 24647 bytes
 .gradle/7.5.1/fileHashes/fileHashes.lock      | Bin 17 -> 17 bytes
 .../buildOutputCleanup.lock                   | Bin 17 -> 17 bytes
 .gradle/file-system.probe                     | Bin 8 -> 8 bytes
 .idea/gradle.xml                              |   1 +
 .idea/kotlinScripting.xml                     |   4 +
 .idea/libraries/KotlinJavaRuntime.xml         |  26 +++
 .idea/misc.xml                                |   2 +-
 .idea/modules/javafx-game-starter-jdk17.iml   |  17 ++
 .idea/workspace.xml                           |  74 ++++----
 build.gradle                                  |   1 +
 src/main/kotlin/cell/AliveCell.kt             |   8 +
 src/main/kotlin/cell/Cell.kt                  |  16 +-
 src/main/kotlin/cell/CellArray.kt             |  25 +++
 src/main/kotlin/cell/DeadCell.kt              |   9 +
 src/main/kotlin/com/example/main.kts          |   3 +
 src/main/kotlin/logic/CellController.kt       | 164 +++++++++++++++++-
 src/main/kotlin/logic/Order.kt                |  10 +-
 23 files changed, 310 insertions(+), 50 deletions(-)
 create mode 100644 .idea/kotlinScripting.xml
 create mode 100644 .idea/libraries/KotlinJavaRuntime.xml
 create mode 100644 .idea/modules/javafx-game-starter-jdk17.iml
 create mode 100644 src/main/kotlin/com/example/main.kts

diff --git a/.gradle/7.5.1/checksums/checksums.lock b/.gradle/7.5.1/checksums/checksums.lock
index 40178fa8c4c2b2fd6a317ec704e2ef2979fc8bd2..ee79fce184381ac4d90595c0d40cf431c6d989b3 100644
GIT binary patch
literal 17
VcmZSHDpdA8EskXe0~j!#0st@H1cLwo

literal 17
VcmZSHDpdA8EskXe0~jzK0st@91bYAg

diff --git a/.gradle/7.5.1/checksums/md5-checksums.bin b/.gradle/7.5.1/checksums/md5-checksums.bin
index 4abba3335efaa1fefd635d6e7d23e86c19b3fd1d..3532ba46001b4ecf5846f6882f2dfde073e09f79 100644
GIT binary patch
delta 104
zcmcb<im`Jw;|3E6MwiW|5(+E=;&p+h4w8F>7{DMje6z2NH4|guM#UfE8x2+nZg%t#
x<25n{N@@bJA_xn7^Iy8Msnxll(K2l3p#z_GF)%Q;9C{j64K{&+r3pyu0RZD49GL(B

delta 36
scmeBN&3Jtk;|3E6M(53@5(+Gvb7hQ~7$Y|-{t(}2a6oXgqlXwT0Odjp*#H0l

diff --git a/.gradle/7.5.1/checksums/sha1-checksums.bin b/.gradle/7.5.1/checksums/sha1-checksums.bin
index 466543a5ae695c131abed6f77a364224df3e605e..bd7f2d2b46cea1cf8fdcc02ae2d037db003a4d11 100644
GIT binary patch
delta 240
zcmeBN#k6`g(*_d>#{A8u5|%9dQ@qO-MH+@OfWcJG&8adom<9H{S29xi{H`A=YQOob
z{7fPKE{P{C&$3rR1xq)#8r^1RtlX$LgLku|#|a-JW1x&K5UYZ)$o;5S&to-}?3Ee5
zE(>yhxw7<|-a`fk#+E}*qpBfBury6>Oc9Q~GOx4U{@#r6fc2){d8@ba{F*r%qAuPN
rqHa+HkVZ3o_3<}<C%sCqQ0<)9&`@r+=Kk)^ZBShgAiC7{fOG)>o-j^0

delta 42
zcmV+_0M-Ais{)Ct0<bg~0c^817&!#9h8&Lrvn?Qz60_Da(gy)Cu_53Mvq4D6Oh=Rt
AlK=n!

diff --git a/.gradle/7.5.1/executionHistory/executionHistory.bin b/.gradle/7.5.1/executionHistory/executionHistory.bin
index 57779fe7fb950333de91eb6f31159545d54effe7..05b26ec28994363f22ef2e5f8b5269029e6a26b1 100644
GIT binary patch
delta 13383
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

delta 46
ycmcaSpYzFi<_RK#j0|AleT{*^MGeSQ+?cpSd}4vkWJw7}W`_Phn`0%~&jSD|lnuiG

diff --git a/.gradle/7.5.1/executionHistory/executionHistory.lock b/.gradle/7.5.1/executionHistory/executionHistory.lock
index 1f7fdff57fd110b3d560a87713f63a38a1d88111..d255a882985746c08d21e57cdf78161b981b12eb 100644
GIT binary patch
literal 17
TcmZP$^qZ<UG0vZv0RprDA?gCe

literal 17
TcmZP$^qZ<UG0vZv0RngcA<P1%

diff --git a/.gradle/7.5.1/fileHashes/fileHashes.bin b/.gradle/7.5.1/fileHashes/fileHashes.bin
index c74d1f972bd8ed93252399a87c4004a2808b19cd..0ecd3fe7f2208f48be943812e370c404dc9c715c 100644
GIT binary patch
delta 3248
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

delta 2784
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

diff --git a/.gradle/7.5.1/fileHashes/fileHashes.lock b/.gradle/7.5.1/fileHashes/fileHashes.lock
index e59626a068b0fca03bb0142ad8dc04c4c376a90f..fbd1709fd026a1cb848a0fd11a4c95695a08f040 100644
GIT binary patch
literal 17
VcmZS9cJ_&ya&+kl1~6da0st(E1L^<(

literal 17
UcmZS9cJ_&ya&+kl1_-DH04(_gTL1t6

diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index f6c45a7eb45e57f4e73fb8a541f20c8ebcc250f6..db43ea3726acd45a7170fe3103747f21585ca969 100644
GIT binary patch
literal 17
UcmZRcZha_bcFx~&1_($405;GB)c^nh

literal 17
UcmZRcZha_bcFx~&1_<y105-G)xc~qF

diff --git a/.gradle/file-system.probe b/.gradle/file-system.probe
index 888ba331e12c78fac6c96e40fbb4da76382957e0..6d37ac60418a44fd05ec38e0eae2cb391de9caed 100644
GIT binary patch
literal 8
PcmZQzU~D;b`Dz0I3QYrW

literal 8
PcmZQzU~D<CT)iCt2y6nI

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index ba1ec5c..611e7c8 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
   <component name="GradleSettings">
     <option name="linkedExternalProjectsSettings">
       <GradleProjectSettings>
diff --git a/.idea/kotlinScripting.xml b/.idea/kotlinScripting.xml
new file mode 100644
index 0000000..2a4c386
--- /dev/null
+++ b/.idea/kotlinScripting.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="KotlinScriptingSettings" supportWarning="false" />
+</project>
\ No newline at end of file
diff --git a/.idea/libraries/KotlinJavaRuntime.xml b/.idea/libraries/KotlinJavaRuntime.xml
new file mode 100644
index 0000000..a209aee
--- /dev/null
+++ b/.idea/libraries/KotlinJavaRuntime.xml
@@ -0,0 +1,26 @@
+<component name="libraryTable">
+  <library name="KotlinJavaRuntime" type="repository">
+    <properties maven-id="org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.21" />
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.7.21/kotlin-stdlib-jdk8-1.7.21.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.7.21/kotlin-stdlib-1.7.21.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.21/kotlin-stdlib-common-1.7.21.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.21/kotlin-stdlib-jdk7-1.7.21.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.7.21/kotlin-stdlib-jdk8-1.7.21-javadoc.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.7.21/kotlin-stdlib-1.7.21-javadoc.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.21/kotlin-stdlib-common-1.7.21-javadoc.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0-javadoc.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.21/kotlin-stdlib-jdk7-1.7.21-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.7.21/kotlin-stdlib-jdk8-1.7.21-sources.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.7.21/kotlin-stdlib-1.7.21-sources.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.21/kotlin-stdlib-common-1.7.21-sources.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0-sources.jar!/" />
+      <root url="jar://$MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.21/kotlin-stdlib-jdk7-1.7.21-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index a7174d6..c049206 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -4,5 +4,5 @@
   <component name="FrameworkDetectionExcludesConfiguration">
     <file type="web" url="file://$PROJECT_DIR$" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="corretto-17" project-jdk-type="JavaSDK" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="corretto-17" project-jdk-type="JavaSDK" />
 </project>
\ No newline at end of file
diff --git a/.idea/modules/javafx-game-starter-jdk17.iml b/.idea/modules/javafx-game-starter-jdk17.iml
new file mode 100644
index 0000000..44e2fa4
--- /dev/null
+++ b/.idea/modules/javafx-game-starter-jdk17.iml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module version="4">
+  <component name="FacetManager">
+    <facet type="kotlin-language" name="Kotlin">
+      <configuration version="5" platform="JVM 1.8" allPlatforms="JVM [1.8]">
+        <compilerSettings />
+        <compilerArguments>
+          <stringArguments>
+            <stringArg name="jvmTarget" arg="1.8" />
+            <stringArg name="apiVersion" arg="1.7" />
+            <stringArg name="languageVersion" arg="1.7" />
+          </stringArguments>
+        </compilerArguments>
+      </configuration>
+    </facet>
+  </component>
+</module>
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 9742a68..fd725a3 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,25 +5,18 @@
   </component>
   <component name="ChangeListManager">
     <list default="true" id="ec779897-06a9-43c6-9402-278f1567af53" name="Changes" comment="">
-      <change beforePath="$PROJECT_DIR$/.idea/.gitignore" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/kotlin_gol.iml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/.idea/vcs.xml" beforeDir="false" />
-      <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/cell/AliveCell.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/AliveCell.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/cell/Cell.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/Cell.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/cell/CellArray.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/CellArray.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/cell/DeadCell.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/DeadCell.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/cell/Position.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/Position.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/gui/GamePanel.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/gui/GamePanel.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/gui/MyFrame.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/gui/MyFrame.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/gui/MyMouseListener.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/gui/MyMouseListener.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/gui/MyMouseMotionListener.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/gui/MyMouseMotionListener.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/logic/Calculations.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/logic/Calculations.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/logic/CellController.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/logic/CellController.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/logic/Order.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/logic/Order.kt" afterDir="false" />
-      <change beforePath="$PROJECT_DIR$/src/kotlin/main/main/Main.kt" beforeDir="false" />
+      <change beforePath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/buildOutputCleanup/buildOutputCleanup.lock" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.gradle/file-system.probe" beforeDir="false" afterPath="$PROJECT_DIR$/.gradle/file-system.probe" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/gradle.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/gradle.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/build.gradle" beforeDir="false" afterPath="$PROJECT_DIR$/build.gradle" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/kotlin/cell/AliveCell.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/AliveCell.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/kotlin/cell/Cell.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/Cell.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/kotlin/cell/CellArray.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/CellArray.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/kotlin/cell/DeadCell.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/cell/DeadCell.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/kotlin/logic/CellController.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/logic/CellController.kt" afterDir="false" />
+      <change beforePath="$PROJECT_DIR$/src/main/kotlin/logic/Order.kt" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/kotlin/logic/Order.kt" afterDir="false" />
     </list>
     <option name="SHOW_DIALOG" value="false" />
     <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -77,20 +70,20 @@
     <option name="hideEmptyMiddlePackages" value="true" />
     <option name="showLibraryContents" value="true" />
   </component>
-  <component name="PropertiesComponent">{
-  &quot;keyToString&quot;: {
-    &quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;,
-    &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
-    &quot;WebServerToolWindowFactoryState&quot;: &quot;false&quot;,
-    &quot;last_opened_file_path&quot;: &quot;/home/ecki/projects/bme/prog3/nhz/prog3_nagyhf/src&quot;,
-    &quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
-    &quot;project.structure.last.edited&quot;: &quot;Project&quot;,
-    &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
-    &quot;project.structure.side.proportion&quot;: &quot;0.2&quot;,
-    &quot;run.code.analysis.last.selected.profile&quot;: &quot;pProject Default&quot;,
-    &quot;settings.editor.selected.configurable&quot;: &quot;reference.settings.ide.settings.notifications&quot;
+  <component name="PropertiesComponent"><![CDATA[{
+  "keyToString": {
+    "RunOnceActivity.OpenProjectViewOnStart": "true",
+    "RunOnceActivity.ShowReadmeOnStart": "true",
+    "WebServerToolWindowFactoryState": "false",
+    "last_opened_file_path": "/home/ecki/projects/bme/prog3/nhz/prog3_nagyhf/src",
+    "nodejs_package_manager_path": "npm",
+    "project.structure.last.edited": "Modules",
+    "project.structure.proportion": "0.15",
+    "project.structure.side.proportion": "0.14614499",
+    "run.code.analysis.last.selected.profile": "pProject Default",
+    "settings.editor.selected.configurable": "reference.settings.ide.settings.notifications"
   }
-}</component>
+}]]></component>
   <component name="RecentsManager">
     <key name="MoveFile.RECENT_KEYS">
       <recent name="$PROJECT_DIR$/src/main/kotlin/main" />
@@ -100,7 +93,7 @@
       <recent name="$PROJECT_DIR$/src/main/main" />
     </key>
   </component>
-  <component name="RunManager" selected="Gradle.kotlin_gol [run]">
+  <component name="RunManager">
     <configuration type="JetRunConfigurationType">
       <option name="MAIN_CLASS_NAME" value="main/kotlin/com/example/Main" />
       <module name="kotlin_gol" />
@@ -109,6 +102,12 @@
         <option name="Make" enabled="true" />
       </method>
     </configuration>
+    <configuration default="true" type="JetRunConfigurationType">
+      <module name="kotlin_gol" />
+      <method v="2">
+        <option name="Make" enabled="true" />
+      </method>
+    </configuration>
     <configuration name="/home/ecki/projects/bme/kotlin/kotlin_gol [run]" type="GradleRunConfiguration" factoryName="Gradle" temporary="true">
       <ExternalSystemSettings>
         <option name="executionName" />
@@ -151,12 +150,6 @@
       <DebugAllEnabled>false</DebugAllEnabled>
       <method v="2" />
     </configuration>
-    <configuration default="true" type="JetRunConfigurationType">
-      <module name="kotlin_gol" />
-      <method v="2">
-        <option name="Make" enabled="true" />
-      </method>
-    </configuration>
     <configuration default="true" type="KotlinStandaloneScriptRunConfigurationType">
       <module name="kotlin_gol" />
       <option name="filePath" />
@@ -184,7 +177,8 @@
       <option name="presentableId" value="Default" />
       <updated>1669674283421</updated>
       <workItem from="1669674286277" duration="4187000" />
-      <workItem from="1669678533992" duration="1585000" />
+      <workItem from="1669678533992" duration="1660000" />
+      <workItem from="1669709242168" duration="9901000" />
     </task>
     <servers />
   </component>
diff --git a/build.gradle b/build.gradle
index 7c7fc08..7c4c457 100644
--- a/build.gradle
+++ b/build.gradle
@@ -12,6 +12,7 @@ repositories {
 
 dependencies {
     testImplementation 'junit:junit:4.13.2'
+    implementation("org.jetbrains.kotlin:kotlin-script-runtime:1.5.21")
 }
 
 tasks.withType(KotlinCompile).configureEach {
diff --git a/src/main/kotlin/cell/AliveCell.kt b/src/main/kotlin/cell/AliveCell.kt
index e69de29..7651bc8 100644
--- a/src/main/kotlin/cell/AliveCell.kt
+++ b/src/main/kotlin/cell/AliveCell.kt
@@ -0,0 +1,8 @@
+package cell
+
+class AliveCell(position: Position) : Cell(position) {
+    override fun isAlive(): Boolean {
+        return true
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/cell/Cell.kt b/src/main/kotlin/cell/Cell.kt
index 746d0dc..79c5f80 100644
--- a/src/main/kotlin/cell/Cell.kt
+++ b/src/main/kotlin/cell/Cell.kt
@@ -1,7 +1,17 @@
 package cell
 
-class Cell {
-    fun isAlive(): Boolean {
-        TODO("Not yet implemented")
+abstract class Cell (position: Position) {
+    private var mark: Boolean = false
+    private val position: Position = position
+    fun getPosition(): Position {return position}
+    abstract fun isAlive(): Boolean
+    public fun setMark(stat: Boolean) { mark=stat }
+    public fun getPositionX() : Int {
+        return position.getX()
     }
+    public fun getPositionY() : Int {
+        return position.getY()
+    }
+
+    fun getMark(): Boolean { return mark }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/cell/CellArray.kt b/src/main/kotlin/cell/CellArray.kt
index e69de29..c2dc160 100644
--- a/src/main/kotlin/cell/CellArray.kt
+++ b/src/main/kotlin/cell/CellArray.kt
@@ -0,0 +1,25 @@
+package cell
+
+class CellArray(width: Int, height: Int) {
+    val cells = ArrayList<ArrayList<Cell>>()
+
+    init {
+        val x: Int = width / 10
+        val y: Int = height / 10
+        for (i in 0..x) {
+            val column = ArrayList<Cell>()
+            for (j in 0..y)
+                column.add(j, DeadCell(Position(i, j)))
+            cells.add(column)
+        }
+    }
+
+    fun size(): IntRange { return cells.indices}
+
+    operator fun get(i: Int) : ArrayList<Cell> {return cells[i]}
+    fun set(c: CellArray) {
+        cells.clear()
+        cells.addAll(c.cells)
+    }
+}
+
diff --git a/src/main/kotlin/cell/DeadCell.kt b/src/main/kotlin/cell/DeadCell.kt
index e69de29..3e47349 100644
--- a/src/main/kotlin/cell/DeadCell.kt
+++ b/src/main/kotlin/cell/DeadCell.kt
@@ -0,0 +1,9 @@
+package cell
+
+class DeadCell(position: Position) : Cell(position){
+
+    override fun isAlive(): Boolean {
+        return false
+    }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/example/main.kts b/src/main/kotlin/com/example/main.kts
new file mode 100644
index 0000000..6a47962
--- /dev/null
+++ b/src/main/kotlin/com/example/main.kts
@@ -0,0 +1,3 @@
+val result = 2
+println(result.plus(1))
+println(result)
\ No newline at end of file
diff --git a/src/main/kotlin/logic/CellController.kt b/src/main/kotlin/logic/CellController.kt
index 586c19c..0921b72 100644
--- a/src/main/kotlin/logic/CellController.kt
+++ b/src/main/kotlin/logic/CellController.kt
@@ -1,9 +1,167 @@
 package logic
 
+import cell.AliveCell
 import cell.Cell
+import cell.CellArray
+import cell.DeadCell
 
-class CellController {
-    fun numberOfLiveNeighbour(cell: Cell): Any? {
-        TODO("Not yet implemented")
+class CellController(height: Int, width: Int, order: Order) {
+    private val cells: CellArray = CellArray(height, width)
+    private val order: Order = Order(order)
+
+    fun setOrder(born: String, survive: String) {
+        order.setBorn(born)
+        order.setSurvive(survive)
+    }
+
+    fun iterate(pause: Boolean) {
+        if(!pause){
+            for(i in cells.size()) {
+                for(iterator in cells[i])
+                    markItsFate(iterator)
+            }
+        }
+    }
+
+    fun makeKillings(pause: Boolean) {
+        if(!pause){
+            for(i in cells.size()) {
+                for(cell in cells[i]){
+                    decideItsFate(cell)
+                }
+            }
+        }
+    }
+
+    private fun markItsFate(cell: Cell) {
+        if(cell.isAlive()){
+            if(order.shouldDie(cell, this))
+                markCell(cell)
+        } else {
+            if(order.shouldBorn(cell, this))
+                markCell(cell)
+        }
+    }
+
+    private fun decideItsFate(cell: Cell) {
+        if(cell.isAlive() && cell.getMark())
+            kill(cell)
+        else if (!cell.isAlive() && cell.getMark())
+            born(cell)
+    }
+
+    fun numberOfAliveNeighbour(cell: Cell): Int {
+        var result = 0
+        if(topIsAlive(cell)) result++
+        if(topLeftIsAlive(cell)) result++
+        if(topRightIsAlive(cell)) result++
+        if(bottomIsAlive(cell)) result++
+        if(bottomLeftIsAlive(cell)) result++
+        if(bottomRightIsAlive(cell)) result++
+        if(leftIsAlive(cell)) result++
+        if(rightIsAlive(cell)) result++
+        return result
+    }
+
+    private fun topIsAlive(cell: Cell): Boolean {
+        if(isOnTop(cell)) return false
+        return top(cell).isAlive()
+    }
+    private fun topLeftIsAlive(cell: Cell): Boolean {
+        if(isOnTop(cell) && isOnLeft(cell)) return false
+        return topLeft(cell).isAlive()
+    }
+
+    private fun topRightIsAlive(cell: Cell): Boolean {
+        if(isOnTop(cell) && isOnRight(cell)) return false
+        return topRight(cell).isAlive()
+    }
+
+    private fun bottomIsAlive(cell: Cell): Boolean {
+        if(isOnBottom(cell)) return false
+        return bottom(cell).isAlive()
+    }
+    private fun bottomLeftIsAlive(cell: Cell): Boolean {
+        if(isOnBottom(cell) && isOnLeft(cell)) return false
+        return bottomLeft(cell).isAlive()
+    }
+
+    private fun bottomRightIsAlive(cell: Cell): Boolean {
+        if(isOnBottom(cell) && isOnRight(cell)) return false
+        return bottomRight(cell).isAlive()
+    }
+
+    private fun leftIsAlive(cell: Cell): Boolean {
+        if(isOnLeft(cell)) return false
+        return left(cell).isAlive()
+    }
+
+    private fun rightIsAlive(cell: Cell): Boolean {
+        if(isOnRight(cell)) return false
+        return right(cell).isAlive()
+    }
+
+    private fun top(cell:Cell) : Cell {
+        return cells[cell.getPositionX()][cell.getPositionY()-1]
+    }
+    private fun topLeft(cell: Cell): Cell {
+        return cells[cell.getPositionX()-1][cell.getPositionY()-1]
+    }
+
+    private fun topRight(cell: Cell): Cell {
+        return cells[cell.getPositionX()+1][cell.getPositionY()-1]
+    }
+
+    private fun bottom(cell:Cell) : Cell {
+        return cells[cell.getPositionX()][cell.getPositionY()+1]
+    }
+    private fun bottomLeft(cell: Cell): Cell {
+        return cells[cell.getPositionX()-1][cell.getPositionY()+1]
+    }
+
+    private fun bottomRight(cell: Cell): Cell {
+        return cells[cell.getPositionX()+1][cell.getPositionY()+1]
+    }
+
+    private fun left(cell:Cell) : Cell {
+        return cells[cell.getPositionX()-1][cell.getPositionY()]
+    }
+
+    private fun right(cell:Cell) : Cell {
+        return cells[cell.getPositionX()+1][cell.getPositionY()]
+    }
+
+    private fun isOnTop(cell: Cell): Boolean {
+        return cell.getPositionY() == 0
+    }
+    private fun isOnBottom(cell: Cell): Boolean {
+        return cell.getPositionY() == (cells[0].size - 1)
+    }
+    private fun isOnLeft(cell: Cell): Boolean {
+        return cell.getPositionX() == 0
+    }
+    private fun isOnRight(cell: Cell): Boolean {
+        return cell.getPositionX() == (cells.cells.size - 1)
+    }
+
+    fun randomBegin() {
+        for(i in cells.size()){
+            for(cell in cells[i]){
+                if(Math.random() <= 0.5)
+                    born(cell)
+            }
+        }
+    }
+
+    private fun markCell(cell: Cell) {
+        cells[cell.getPositionX()][cell.getPositionY()].setMark(true)
+    }
+
+    private fun born(cell: Cell) {
+        cells[cell.getPositionX()][cell.getPositionY()] = AliveCell(cell.getPosition())
+    }
+
+    private fun kill(cell: Cell) {
+        cells[cell.getPositionX()][cell.getPositionY()] = DeadCell(cell.getPosition())
     }
 }
\ No newline at end of file
diff --git a/src/main/kotlin/logic/Order.kt b/src/main/kotlin/logic/Order.kt
index d7c0005..80ff0bc 100644
--- a/src/main/kotlin/logic/Order.kt
+++ b/src/main/kotlin/logic/Order.kt
@@ -4,22 +4,26 @@ import cell.Cell
 import logic.Calculations.Companion.strSlice
 
 class Order(born: String, survive: String) {
+    constructor(order: Order) : this(order.born.toString(), order.survive.toString())
+
     private val born: ArrayList<Int> = strSlice(born.toString())
     private val survive: ArrayList<Int> = strSlice(survive.toString())
 
 
     fun setBorn(born: String) {
         this.born.clear()
+        this.born.addAll(strSlice(born))
     }
 
-    fun setSurvive(born: String) {
+    fun setSurvive(survive: String) {
         this.survive.clear()
+        this.survive.addAll(strSlice(survive))
     }
 
     fun shouldDie(cell: Cell, cellc: CellController) : Boolean {
         for (i in survive.indices) {
             if (cell.isAlive()) {
-                if (survive[i] == cellc.numberOfLiveNeighbour(cell)) {
+                if (survive[i] == cellc.numberOfAliveNeighbour(cell)) {
                     return false
                 }
             }
@@ -30,7 +34,7 @@ class Order(born: String, survive: String) {
     fun shouldBorn(cell: Cell, cellc: CellController): Boolean {
         for (i in born.indices) {
             if (!cell.isAlive()) {
-                if (born[i] == cellc.numberOfLiveNeighbour(cell)) {
+                if (born[i] == cellc.numberOfAliveNeighbour(cell)) {
                     return true
                 }
             }
-- 
GitLab