diff --git a/src/main/java/lab/GameController.java b/src/main/java/lab/GameController.java
index a13d5192cb718e83d99735c0b14d569253de3d18..893113431014ecb3f6747444d902293f9f15c9d2 100644
--- a/src/main/java/lab/GameController.java
+++ b/src/main/java/lab/GameController.java
@@ -32,6 +32,7 @@ public class GameController {
 	}
 	
 	public void startGame() {
+		
 		this.world = new World(canvas.getWidth(), canvas.getHeight());	
 		//Draw scene on a separate thread to avoid blocking UI.
 		animationTimer = new DrawingThread(canvas, world);
@@ -40,6 +41,14 @@ public class GameController {
 		
 		strengthSlider.valueProperty().addListener(this::strenghtChanged);
 		world.setCannonStrength(strengthSlider.getValue());
+		world.setGameListener(new EmptyGameListener() {
+			@Override
+			public void stateChanged(int shoots, int hits) {
+				GameController.this.setShoots(shoots);
+				GameController.this.setHits(hits);
+
+			}
+		});
 		animationTimer.start();
 	}
 
@@ -63,4 +72,18 @@ public class GameController {
 			, Number oldValue, Number newValue) {
 		world.setCannonStrength(newValue.doubleValue());
 	}
+
+	
+	
+	
+	
+	private void setHits(int hits) {
+		this.hits.setText(""+hits);
+	}
+
+	private void setShoots(int shoots) {
+		this.shoots.setText(""+shoots);
+	}
+	
+	
 }
diff --git a/src/main/java/lab/HitListener.java b/src/main/java/lab/HitListener.java
index 51cc8dd80725b18868a8000d5eba9764598395d2..d1b4b89bcee4cff29fd70d145dc44cf1d7ee5b85 100644
--- a/src/main/java/lab/HitListener.java
+++ b/src/main/java/lab/HitListener.java
@@ -1,5 +1,6 @@
 package lab;
 
+@FunctionalInterface
 public interface HitListener {
 	void hit();
 }
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
index 817ed95fa86f528fa9878800f2a6126d816533ac..d357add7bc9438229ecb3f4e966735cac78e67f1 100644
--- a/src/main/java/lab/World.java
+++ b/src/main/java/lab/World.java
@@ -21,13 +21,24 @@ public class World {
 	private DrawableSimulable []entities; 
 	
 	public World(double width, double height) {
-		super();
+		
 		this.width = width;
 		this.height = height;
 		Cannon cannon = new Cannon(this, new Point2D(50, 50), new Point2D(100, 20));
+		BulletAnimated bullet;
 		entities = new DrawableSimulable[2 + NUMBER_OF_DRAGONS];
 		entities[0] = cannon;
-		entities[1] = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40);
+		entities[1] = bullet = new BulletAnimated(this, cannon, new Point2D(30, 60), new Point2D(0, 0), 40);
+		bullet.setHitListener(this::hits);
+				
+				/*new HitListener() {
+			@Override
+			public void hit() {
+				hits++;
+				gameListener.stateChanged(shoots, hits);
+			}
+			
+		});*/
 		Random rnd = new Random();
 		
 		for (int i = 2; i < entities.length; i++) {
@@ -39,6 +50,11 @@ public class World {
 		}
 	}
 
+	private void hits() {
+		hits++;
+		gameListener.stateChanged(shoots, hits);
+	}
+
 	public Point2D getCanvasPoint(Point2D worldPoint) {
 		return new Point2D(worldPoint.getX(), height - worldPoint.getY());
 	}