diff --git a/.gitignore b/.gitignore
index db44c8a723e017349e18633821c8ee475d15621c..ef1ca707313f688f2dbbbe5a1ff69b12decdafaf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
 .settings/
 .project
 .classpath
+/bin/
diff --git a/src/main/java/lab/Bullet.java b/src/main/java/lab/Bullet.java
new file mode 100644
index 0000000000000000000000000000000000000000..d6e6ebf404072d0f012e883480a2eaff31031428
--- /dev/null
+++ b/src/main/java/lab/Bullet.java
@@ -0,0 +1,40 @@
+package lab;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+public class Bullet {
+	
+	private final World world;
+	
+	private final Point2D startPosition;
+	
+	private Point2D position;
+	
+	private Point2D velocity;
+	
+	private final double size;
+
+	public Bullet(World world, Point2D startPosition, Point2D velocity, double size) {
+		this.world = world;
+		this.startPosition = startPosition;
+		this.position = startPosition;
+		this.velocity = velocity;
+		this.size = size;
+		
+	}
+	
+	public void draw(GraphicsContext gc) {
+		gc.setFill(Color.RED);
+		Point2D p = world.getPositionInCanvas(position);
+		gc.fillOval(p.getX(), p.getY(), size, size);
+		
+	}
+	
+	public void simulate(double deltaT) {
+		position = position.add(velocity.multiply(deltaT));
+		position = new Point2D((position.getX() + world.getWidht()) % world.getWidht(), 
+				(position.getY() + world.getHeight()) % world.getHeight());
+	}
+}
diff --git a/src/main/java/lab/BulletAnimated.java b/src/main/java/lab/BulletAnimated.java
new file mode 100644
index 0000000000000000000000000000000000000000..73baf26d96fc8b05ef23e76a823cbd5052bcc2e8
--- /dev/null
+++ b/src/main/java/lab/BulletAnimated.java
@@ -0,0 +1,11 @@
+package lab;
+
+import javafx.scene.image.Image;
+
+public class BulletAnimated {
+
+	
+	private final Image image = new Image(this.getClass().getResourceAsStream("fireball-transparent.gif"));
+	
+	
+}
diff --git a/src/main/java/lab/Cannon.java b/src/main/java/lab/Cannon.java
new file mode 100644
index 0000000000000000000000000000000000000000..e240ba3fa95e39be64e87a5c7790013e7d2ed3ef
--- /dev/null
+++ b/src/main/java/lab/Cannon.java
@@ -0,0 +1,37 @@
+package lab;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+import javafx.scene.transform.Affine;
+import javafx.scene.transform.Transform;
+
+public class Cannon {
+
+	private double angle;
+	
+	private final Point2D position;
+
+	private final World world;
+
+	public Cannon(World world,int angle, Point2D position) {
+		this.world = world;
+		this.angle = angle;
+		this.position = position;
+	}
+	
+	
+	public void draw(GraphicsContext gc) {
+		gc.save();
+		gc.setFill(Color.STEELBLUE);
+		Point2D p = world.getPositionInCanvas(position);
+		gc.transform(new Affine(Transform.rotate(angle - 90, p.getX(), p.getY())));
+		gc.fillRect(p.getX(), p.getY(), 100, 10);
+		gc.restore();
+	}
+	
+	public void simulate(double deltaT) {
+		angle = angle + 10*deltaT;
+	}
+	
+}
diff --git a/src/main/java/lab/DrawingThread.java b/src/main/java/lab/DrawingThread.java
index f2436cda938c0cee27acd4e925cd42dedd975197..b78d31a59414e7a0225379c9ef4d3623dc6e9312 100644
--- a/src/main/java/lab/DrawingThread.java
+++ b/src/main/java/lab/DrawingThread.java
@@ -8,9 +8,11 @@ public class DrawingThread extends AnimationTimer {
 
 	private final GraphicsContext gc;
 	private long lastTime;
+	private final World world;
 
 	public DrawingThread(Canvas canvas) {
 		this.gc = canvas.getGraphicsContext2D();
+		this.world = new World(canvas.getWidth(), canvas.getHeight());
 	}
 
 	/**
@@ -20,11 +22,11 @@ public class DrawingThread extends AnimationTimer {
 	public void handle(long now) {
 		if (lastTime > 0) {
 			double deltaT = (now - lastTime) / 1e9;
-			// call simulate on world
+			world.simulate(deltaT);
 		}
 		//call draw on world
+		world.draw(gc);
 		lastTime= now;
-
 	}
 
 }
diff --git a/src/main/java/lab/World.java b/src/main/java/lab/World.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e9e3aa3442b80e71f5b3a167ae87b5b0d0ded1f
--- /dev/null
+++ b/src/main/java/lab/World.java
@@ -0,0 +1,48 @@
+package lab;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+public class World {
+	
+	private double width;
+	
+	private double height;
+	
+	private final Bullet bullet;
+
+	private final Cannon cannon;
+
+	public World(double width, double height) {
+		this.width = width;
+		this.height = height;
+		this.bullet = new Bullet(this, new Point2D(25, 150), new Point2D(100, 100), 30);
+		this.cannon = new Cannon(this, 45, new Point2D(20, 20));
+	}
+	
+	
+	public void simulate(double deltaT) {
+		bullet.simulate(deltaT);
+		cannon.simulate(deltaT);
+	}
+	
+	
+	public void draw(GraphicsContext gc) {
+		gc.clearRect(0, 0, width, height);
+		bullet.draw(gc);
+		cannon.draw(gc);
+	}
+	
+	public Point2D getPositionInCanvas(Point2D point) {
+		return new Point2D(point.getX(), height - point.getY());
+	}
+
+
+	public double getWidht() {
+		return width;
+	}
+	
+	public double getHeight() {
+		return height;
+	}
+}