diff --git a/pom.xml b/pom.xml
index ccf17e28ed1e3cbd9b9ee92decca69465492087d..8bdcd5d2f15bc0347ce8212d6bcdea6aa01c6009 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
 	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 	<modelVersion>4.0.0</modelVersion>
 	<groupId>vsb-cs-java1</groupId>
-	<artifactId>lab04</artifactId>
+	<artifactId>lab06</artifactId>
 	<version>0.0.1-SNAPHOST</version>
 	<packaging>jar</packaging>
 	<properties>
diff --git a/src/main/java/lab/BulletAnimated.java b/src/main/java/lab/BulletAnimated.java
index bfe0a20c81daf4414b2022c10de4cf95efa40b9b..729c7c08e4db9dd1f443481b30db610cb289b9dc 100644
--- a/src/main/java/lab/BulletAnimated.java
+++ b/src/main/java/lab/BulletAnimated.java
@@ -7,15 +7,16 @@ import javafx.scene.image.Image;
 
 public class BulletAnimated  implements DrawableSimulable, Collisionable{
 
+	private static final double STRENGTH_CANNON_COEFICIENT = 4.;
+	
 	private Point2D position;
 	private Point2D start;
 	private Point2D speed;
 	private Point2D initialSpeed;
 	private double size;
 	private double mass = 2;
-	private double strenghtOfCannon = 2;
 	private double cannonLength = 100;
-	private boolean accelerate = true;
+	private boolean accelerate = false;
 	private boolean hitToGround = false;
 
 	private double crossSectionalArea;
@@ -24,7 +25,10 @@ public class BulletAnimated  implements DrawableSimulable, Collisionable{
 	private Image image;
 	private World world;
 	private Cannon cannon;
+	private boolean fired;
 
+	private HitListener hitListener = new EmptyHitListener();
+	
 	public BulletAnimated(World world, Cannon cannon) {
 		this(world, cannon, new Point2D(0, 0), new Point2D(0, 0), 10);
 	}
@@ -32,7 +36,7 @@ public class BulletAnimated  implements DrawableSimulable, Collisionable{
 	public BulletAnimated(World world, Cannon cannon, Point2D start, Point2D speed, double size) {
 		this.start = start;
 		this.position = this.start;
-		this.initialSpeed = speed;
+		this.initialSpeed = Point2D.ZERO;
 		this.speed = speed;
 		this.size = size;
 		this.world = world;
@@ -49,9 +53,13 @@ public class BulletAnimated  implements DrawableSimulable, Collisionable{
 	}
 
 	public void simulate(double deltaT) {
+		if (!fired) {
+			return;
+		}
 		double timeStep = deltaT * 1000;
 		if (accelerate && start.distance(position) < cannonLength) {
 			double cannonAngle = cannon.getAngle(); 
+			double strenghtOfCannon = cannon.getStrength() * STRENGTH_CANNON_COEFICIENT/100.;
 			speed = speed
 					.add(new Point2D(Math.cos(cannonAngle) * strenghtOfCannon, Math.sin(cannonAngle) * strenghtOfCannon)
 							.multiply(1 / mass));
@@ -74,7 +82,6 @@ public class BulletAnimated  implements DrawableSimulable, Collisionable{
 			reload();
 		}
 		
-		
 	}
 
 	public Rectangle2D getBoundingBox() {
@@ -86,14 +93,25 @@ public class BulletAnimated  implements DrawableSimulable, Collisionable{
 	}
 	
 	public void hitBy(Collisionable other) {
+		hitListener.hit();
 		reload();
 	}
 	
 	public void reload() {
 		position = start;
-		speed = initialSpeed;
+		speed = Point2D.ZERO;
 		hitToGround = false;
+		accelerate = false;
+		fired = false;
+	}
+
+	public void fire() {
+		if (fired) {
+			return;
+		}
+		fired = true;
 		accelerate = true;
+		speed = initialSpeed;
 	}
 	
 }
diff --git a/src/main/java/lab/Cannon.java b/src/main/java/lab/Cannon.java
index d728a05d612527764f69dd424f768aee706dca59..8e428ef6da91ae2995f6f7659202b723a300d9ab 100644
--- a/src/main/java/lab/Cannon.java
+++ b/src/main/java/lab/Cannon.java
@@ -8,11 +8,13 @@ import javafx.scene.transform.Affine;
 public class Cannon implements DrawableSimulable {
 
 	private double angle = 0;
+	private double strength = 50.;
 	private Point2D position;
 	private Point2D size;
 	private World world;
 	
 	
+	
 	 
 
 	public Cannon(World world, Point2D position, Point2D size) {
@@ -50,4 +52,13 @@ public class Cannon implements DrawableSimulable {
 	public void setAngle(double doubleValue) {
 		angle = doubleValue;
 	}
+
+	public double getStrength() {
+		return strength;
+	}
+	
+	public void setStrength(double doubleValue) {
+		this.strength = doubleValue;
+	}
+	
 }
diff --git a/src/main/java/lab/EmptyGameListener.java b/src/main/java/lab/EmptyGameListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..d703a087911a52848d409f3113c3cefd5bcbbc2f
--- /dev/null
+++ b/src/main/java/lab/EmptyGameListener.java
@@ -0,0 +1,13 @@
+package lab;
+
+public class EmptyGameListener implements GameListener {
+
+	@Override
+	public void stateChanged(int shoots, int hits) {
+	}
+
+	@Override
+	public void gameOver() {
+	}
+
+}
diff --git a/src/main/java/lab/EmptyHitListener.java b/src/main/java/lab/EmptyHitListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..fba8b0bee8605e85052efc91f5ce6625a8dd99a1
--- /dev/null
+++ b/src/main/java/lab/EmptyHitListener.java
@@ -0,0 +1,9 @@
+package lab;
+
+public class EmptyHitListener implements HitListener {
+
+	@Override
+	public void hit() {
+	}
+
+}
diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java
index 66a0e8754cd5572e61dfb535e37b5d060ee3728d..c7b578b86edb768bfdc33c65e13c81466ecec266 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -1,9 +1,10 @@
-package lab;
+	package lab;
 
 import javafx.animation.AnimationTimer;
 import javafx.beans.value.ObservableValue;
 import javafx.fxml.FXML;
 import javafx.scene.canvas.Canvas;
+import javafx.scene.control.Label;
 import javafx.scene.control.Slider;
 
 public class GameController {
@@ -13,9 +14,18 @@ public class GameController {
 	@FXML
 	private Slider angleSlider;
 	
+	@FXML
+	private Slider strengthSlider;
+	
 	@FXML
 	private Canvas canvas;
 	
+	@FXML
+	private Label shoots;
+	
+	@FXML
+	private Label hits;
+	
 	private AnimationTimer animationTimer;
 	
 	public GameController() {
@@ -39,6 +49,9 @@ public class GameController {
 		};
 		angleSlider.valueProperty().addListener(this::angleChanged);
 		world.setCannonAngle(angleSlider.getValue());
+		
+		strengthSlider.valueProperty().addListener(this::strenghtChanged);
+		world.setCannonStrength(strengthSlider.getValue());
 		animationTimer.start();
 	}
 
@@ -54,7 +67,7 @@ public class GameController {
 	
 	@FXML
 	private void firePressed() {
-		System.out.println("Fire");
+		world.fire();
 	}
 	
 	
@@ -63,5 +76,8 @@ public class GameController {
 		world.setCannonAngle(newValue.doubleValue());
 	}
 
-	
+	private void strenghtChanged(ObservableValue<? extends Number> observable
+			, Number oldValue, Number newValue) {
+		world.setCannonStrength(newValue.doubleValue());
+	}
 }
diff --git a/src/main/java/lab/GameListener.java b/src/main/java/lab/GameListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..337d3c3df790e80a3407d454324287015a8225c4
--- /dev/null
+++ b/src/main/java/lab/GameListener.java
@@ -0,0 +1,8 @@
+package lab;
+
+public interface GameListener {
+	
+	void stateChanged(int shoots, int hits);
+	
+	void gameOver();
+}
diff --git a/src/main/java/lab/HitListener.java b/src/main/java/lab/HitListener.java
new file mode 100644
index 0000000000000000000000000000000000000000..51cc8dd80725b18868a8000d5eba9764598395d2
--- /dev/null
+++ b/src/main/java/lab/HitListener.java
@@ -0,0 +1,5 @@
+package lab;
+
+public interface HitListener {
+	void hit();
+}
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index 6e53001fffb1e9158254bf631e76ef4a99d76669..58d0489d942a63c58979f2388ca217364380b005 100644
--- a/src/main/java/lab/World.java
+++ b/src/main/java/lab/World.java
@@ -8,10 +8,17 @@ import javafx.scene.canvas.GraphicsContext;
 
 public class World {
 	
-	private final static int NUMBER_OF_DRAGONS = 5;
+	private final static int NUMBER_OF_DRAGONS = 2;
 	
 	private double width;
 	private double height;
+	
+	private GameListener gameListener = new EmptyGameListener();
+	
+	private int hits = 0;
+	
+	private int shoots = 0;
+	
 	private DrawableSimulable []entities; 
 	
 	public World(double width, double height) {
@@ -61,16 +68,6 @@ public class World {
 				}
 			}
 		}
-		/*bulletAnimatted.simulate(timeDelta);
-		cannon.simulate(timeDelta);
-		
-		for(Dragon dragon: dragons) {
-			if (bulletAnimatted.overlaps(dragon)) {
-				dragon.hit();
-				bulletAnimatted.reload();
-			}
-			dragon.simulate(timeDelta);
-		}*/
 	}
 
 	public double getWidth() {
@@ -98,5 +95,26 @@ public class World {
 		}
 		
 	}
+	
+	public void setCannonStrength(double doubleValue) {
+		for (DrawableSimulable d: entities) {
+			if (d instanceof Cannon) {
+				Cannon cannon = (Cannon) d;
+				cannon.setStrength(doubleValue);
+			}
+		}
+		
+	}
+
+	public void fire() {
+		for (DrawableSimulable e: entities) {
+			if (e instanceof BulletAnimated) {
+				BulletAnimated ba = (BulletAnimated) e;
+				ba.fire();
+				shoots++;
+				gameListener.stateChanged(shoots, hits);
+			}
+		}
+	}
 
 }
diff --git a/src/main/resources/lab/GameView.fxml b/src/main/resources/lab/GameView.fxml
index 373c455bcc00a75df52c48ec9190ada1394b7a89..e0732c4641c1ecbf46598064b90e1aa66c27711e 100644
--- a/src/main/resources/lab/GameView.fxml
+++ b/src/main/resources/lab/GameView.fxml
@@ -1,16 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <?import javafx.geometry.Insets?>
+<?import javafx.scene.Group?>
 <?import javafx.scene.canvas.Canvas?>
 <?import javafx.scene.control.Button?>
+<?import javafx.scene.control.Label?>
 <?import javafx.scene.control.Slider?>
 <?import javafx.scene.layout.BorderPane?>
+<?import javafx.scene.layout.ColumnConstraints?>
+<?import javafx.scene.layout.GridPane?>
 <?import javafx.scene.layout.HBox?>
+<?import javafx.scene.layout.RowConstraints?>
 
 <BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" xmlns="http://javafx.com/javafx/17" xmlns:fx="http://javafx.com/fxml/1" fx:controller="lab.GameController">
-   <center>
-      <Canvas fx:id="canvas" height="400.0" width="600.0" BorderPane.alignment="CENTER" />
-   </center>
    <bottom>
       <HBox alignment="CENTER" BorderPane.alignment="CENTER_LEFT">
          <children>
@@ -19,8 +21,31 @@
                <HBox.margin>
                   <Insets bottom="11.0" left="14.0" right="11.0" top="12.0" />
                </HBox.margin></Button>
-            <Slider HBox.hgrow="ALWAYS" />
+            <Slider fx:id="strengthSlider" showTickLabels="true" showTickMarks="true" value="50.0" HBox.hgrow="ALWAYS" />
          </children>
       </HBox>
    </bottom>
+   <center>
+      <Group BorderPane.alignment="CENTER">
+         <children>
+            <GridPane layoutX="20.0" layoutY="20.0" prefHeight="61.0" prefWidth="167.0">
+              <columnConstraints>
+                <ColumnConstraints hgrow="SOMETIMES" maxWidth="79.0" minWidth="10.0" prefWidth="51.0" />
+                <ColumnConstraints hgrow="SOMETIMES" maxWidth="124.0" minWidth="10.0" prefWidth="116.0" />
+              </columnConstraints>
+              <rowConstraints>
+                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+                <RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" />
+              </rowConstraints>
+               <children>
+                  <Label text="Shoots:" />
+                  <Label fx:id="shoots" text="0" GridPane.columnIndex="1" />
+                  <Label text="Hits:" GridPane.rowIndex="1" />
+                  <Label fx:id="hits" text="0" GridPane.rowIndex="1" GridPane.columnIndex="1" />
+               </children>
+            </GridPane>
+            <Canvas fx:id="canvas" height="400.0" width="600.0" />
+         </children>
+      </Group>
+   </center>
 </BorderPane>