diff --git a/MAVENProject/pom.xml b/MAVENProject/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ec1364affc745197437648a5faa2d415c752c68
--- /dev/null
+++ b/MAVENProject/pom.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>ACLISN2022.cyberpac2077</groupId>
+    <artifactId>MAVENProject</artifactId>
+    <version>1.0-SNAPSHOT</version>
+
+    <properties>
+        <maven.compiler.source>17</maven.compiler.source>
+        <maven.compiler.target>17</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
\ No newline at end of file
diff --git a/MAVENProject/src/main/java/engine/Cmd.java b/MAVENProject/src/main/java/engine/Cmd.java
new file mode 100644
index 0000000000000000000000000000000000000000..5dac240f1f1bba481bded682140b348cfaf65ba6
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/Cmd.java
@@ -0,0 +1,9 @@
+package engine;
+
+/**
+ * @author Horatiu Cirstea
+ *
+ */
+public enum Cmd {
+	 LEFT,RIGHT,UP,DOWN,IDLE; 
+}
diff --git a/MAVENProject/src/main/java/engine/DrawingPanel.java b/MAVENProject/src/main/java/engine/DrawingPanel.java
new file mode 100644
index 0000000000000000000000000000000000000000..9586bce41c8b8c519d0a4c541a0f1df1d3f2950c
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/DrawingPanel.java
@@ -0,0 +1,96 @@
+package engine;
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ */
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.image.BufferedImage;
+
+import javax.swing.JPanel;
+
+public class DrawingPanel extends JPanel {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * la clase chargee de Dessiner
+	 */
+	private GamePainter painter;
+
+	/**
+	 * image suivante est l'image cachee sur laquelle dessiner
+	 */
+	private BufferedImage nextImage;
+
+	/**
+	 * image en cours est l'image entrain d'etre affichee
+	 */
+	private BufferedImage currentImage;
+
+	/**
+	 * la taille des images
+	 */
+	private int width, height;
+
+	/**
+	 * constructeur Il construit les images pour doublebuffering ainsi que le
+	 * Panel associe. Les images stockent le painter et on demande au panel la
+	 * mise a jour quand le painter est fini
+	 * 
+	 * @param width
+	 *            largeur de l'image
+	 * @param height
+	 *            hauteur de l'image
+	 */
+	public DrawingPanel(GamePainter painter) {
+		super();
+		this.width = painter.getWidth();
+		this.height = painter.getHeight();
+		this.setPreferredSize(new Dimension(this.width, this.height));
+		this.painter=painter;
+
+		// cree l'image buffer et son graphics
+		this.nextImage = new BufferedImage(width, height,
+				BufferedImage.TYPE_INT_RGB);
+		this.currentImage = new BufferedImage(width, height,
+				BufferedImage.TYPE_INT_RGB);
+	}
+
+	/**
+	 * demande de mettre a jour le rendu de l'image sur le Panel. Creer une
+	 * nouvelle image vide sur laquelle dessiner
+	 */
+	public void drawGame() {
+		// generer la nouvelle image
+		this.painter.draw(this.nextImage);
+
+		// inverses les images doublebuffereing
+		BufferedImage temp = this.currentImage;
+		// l'image a dessiner est celle qu'on a construite
+		this.currentImage = this.nextImage;
+		// l'ancienne image est videe
+		this.nextImage = temp;
+		this.nextImage.getGraphics()
+				.fillRect(0, 0, this.width, this.height);
+		// met a jour l'image a afficher sur le panel
+		this.repaint();
+	}
+
+	/**
+	 * redefinit la methode paint consiste a dessiner l'image en cours
+	 * 
+	 * @param g
+	 *            graphics pour dessiner
+	 */
+	public void paint(Graphics g) {
+		super.paint(g);
+		g.drawImage(this.currentImage, 0, 0, getWidth(), getHeight(), 0, 0,
+				getWidth(), getHeight(), null);
+	}
+
+}
diff --git a/MAVENProject/src/main/java/engine/Game.java b/MAVENProject/src/main/java/engine/Game.java
new file mode 100644
index 0000000000000000000000000000000000000000..12005596b711bcf72fcc217fd91a57fe0b3998db
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/Game.java
@@ -0,0 +1,24 @@
+package engine;
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ *         un jeu qui peut evoluer (avant de se terminer) sur un plateau width x
+ *         height
+ */
+public interface Game {
+
+	/**
+	 * methode qui contient l'evolution du jeu en fonction de la commande
+	 * 
+	 * @param userCmd
+	 *            commande utilisateur
+	 */
+	public void evolve(Cmd userCmd);
+
+	/**
+	 * @return true si et seulement si le jeu est fini
+	 */
+	public boolean isFinished();
+
+}
diff --git a/MAVENProject/src/main/java/engine/GameController.java b/MAVENProject/src/main/java/engine/GameController.java
new file mode 100644
index 0000000000000000000000000000000000000000..461a610c19b38db3408f0f2de88470771e19a300
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/GameController.java
@@ -0,0 +1,21 @@
+package engine;
+
+import java.awt.event.KeyListener;
+
+/**
+ * @author Horatiu Cirstea
+ * 
+ * controleur qui envoie des commandes au jeu 
+ * 
+ */
+public interface GameController extends KeyListener {
+
+	/**
+	 * quand on demande les commandes, le controleur retourne la commande en
+	 * cours
+	 * 
+	 * @return commande faite par le joueur
+	 */
+	public Cmd getCommand();
+
+}
diff --git a/MAVENProject/src/main/java/engine/GameEngineGraphical.java b/MAVENProject/src/main/java/engine/GameEngineGraphical.java
new file mode 100644
index 0000000000000000000000000000000000000000..c2d643da69e7822bd42e23e094fd9bf83454cfd9
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/GameEngineGraphical.java
@@ -0,0 +1,70 @@
+package engine;
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ * moteur de game generique.
+ * On lui passe un game et un afficheur et il permet d'executer un game.
+ */
+public class GameEngineGraphical {
+
+	/**
+	 * le game a executer
+	 */
+	private Game game;
+
+	/**
+	 * l'afficheur a utiliser pour le rendu
+	 */
+	private GamePainter gamePainter;
+
+	/**
+	 * le controlleur a utiliser pour recuperer les commandes
+	 */
+	private GameController gameController;
+
+	/**
+	 * l'interface graphique
+	 */
+	private GraphicalInterface gui;
+
+	/**
+	 * construit un moteur
+	 * 
+	 * @param game
+	 *            game a lancer
+	 * @param gamePainter
+	 *            afficheur a utiliser
+	 * @param gameController
+	 *            controlleur a utiliser
+	 *            
+	 */
+	public GameEngineGraphical(Game game, GamePainter gamePainter, GameController gameController) {
+		// creation du game
+		this.game = game;
+		this.gamePainter = gamePainter;
+		this.gameController = gameController;
+	}
+
+	/**
+	 * permet de lancer le game
+	 */
+	public void run() throws InterruptedException {
+
+		// creation de l'interface graphique
+		this.gui = new GraphicalInterface(this.gamePainter,this.gameController);
+
+		// boucle de game
+		while (!this.game.isFinished()) {
+			// demande controle utilisateur
+			Cmd c = this.gameController.getCommand();
+			// fait evoluer le game
+			this.game.evolve(c);
+			// affiche le game
+			this.gui.paint();
+			// met en attente
+			Thread.sleep(100);
+		}
+	}
+
+}
diff --git a/MAVENProject/src/main/java/engine/GamePainter.java b/MAVENProject/src/main/java/engine/GamePainter.java
new file mode 100644
index 0000000000000000000000000000000000000000..790d64fa73c1108a3f7535bad11f49392c32ab46
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/GamePainter.java
@@ -0,0 +1,26 @@
+package engine;
+
+import java.awt.image.BufferedImage;
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ * 
+ * represente la maniere de dessiner sur un JPanel
+ * 
+ */
+public interface GamePainter {
+
+	/**
+	 * methode dessiner a completer. Elle construit une image correspondant au
+	 * jeu. Game est un attribut de l'afficheur
+	 * 
+	 * @param image
+	 *            image sur laquelle dessiner
+	 */
+	public abstract void draw(BufferedImage image);
+
+	public abstract int getWidth();
+
+	public abstract int getHeight();
+	
+}
diff --git a/MAVENProject/src/main/java/engine/GraphicalInterface.java b/MAVENProject/src/main/java/engine/GraphicalInterface.java
new file mode 100644
index 0000000000000000000000000000000000000000..19d20bdbefba47579a4f99e24eb200d5cc426b43
--- /dev/null
+++ b/MAVENProject/src/main/java/engine/GraphicalInterface.java
@@ -0,0 +1,50 @@
+package engine;
+
+import javax.swing.JFrame;
+
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ * interface graphique avec son controller et son afficheur
+ *
+ */
+public class GraphicalInterface  {
+
+	/**
+	 * le Panel pour l'afficheur
+	 */
+	private DrawingPanel panel;
+	
+	/**
+	 * la construction de l'interface graphique: JFrame avec panel pour le game
+	 * 
+	 * @param gamePainter l'afficheur a utiliser dans le moteur
+	 * @param gameController l'afficheur a utiliser dans le moteur
+	 * 
+	 */
+	public GraphicalInterface(GamePainter gamePainter, GameController gameController){
+		JFrame f=new JFrame();
+		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+		
+		// attacher le panel contenant l'afficheur du game
+		this.panel=new DrawingPanel(gamePainter);
+		f.setContentPane(this.panel);
+		
+		// attacher controller au panel du game
+		this.panel.addKeyListener(gameController);	
+		
+		f.pack();
+		f.setVisible(true);
+		f.getContentPane().setFocusable(true);
+		f.getContentPane().requestFocus();
+	}
+	
+	/**
+	 * mise a jour du dessin
+	 */
+	public void paint() {
+		this.panel.drawGame();	
+	}
+	
+}
diff --git a/MAVENProject/src/main/java/model/PacmanController.java b/MAVENProject/src/main/java/model/PacmanController.java
new file mode 100644
index 0000000000000000000000000000000000000000..a69318e28e39f08f0f0fa7730dcd2dbdd2dca681
--- /dev/null
+++ b/MAVENProject/src/main/java/model/PacmanController.java
@@ -0,0 +1,71 @@
+package model;
+
+import java.awt.event.KeyEvent;
+
+import engine.Cmd;
+import engine.GameController;
+
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ * controleur de type KeyListener
+ * 
+ */
+public class PacmanController implements GameController {
+
+	/**
+	 * commande en cours
+	 */
+	private Cmd commandeEnCours;
+	
+	/**
+	 * construction du controleur par defaut le controleur n'a pas de commande
+	 */
+	public PacmanController() {
+		this.commandeEnCours = Cmd.IDLE;
+	}
+
+	/**
+	 * quand on demande les commandes, le controleur retourne la commande en
+	 * cours
+	 * 
+	 * @return commande faite par le joueur
+	 */
+	public Cmd getCommand() {
+		return this.commandeEnCours;
+	}
+
+	@Override
+	/**
+	 * met a jour les commandes en fonctions des touches appuyees
+	 */
+	public void keyPressed(KeyEvent e) {
+
+		switch (e.getKeyChar()) {
+		// si on appuie sur 'q',commande joueur est gauche
+		case 'l':
+		case 'L':
+			this.commandeEnCours = Cmd.LEFT;
+			break;
+		}
+
+	}
+
+	@Override
+	/**
+	 * met a jour les commandes quand le joueur relache une touche
+	 */
+	public void keyReleased(KeyEvent e) {
+		this.commandeEnCours = Cmd.IDLE;
+	}
+
+	@Override
+	/**
+	 * ne fait rien
+	 */
+	public void keyTyped(KeyEvent e) {
+
+	}
+
+}
diff --git a/MAVENProject/src/main/java/model/PacmanGame.java b/MAVENProject/src/main/java/model/PacmanGame.java
new file mode 100644
index 0000000000000000000000000000000000000000..ba44c56d53467fd7cc9931bb3b62785dab1ba7fc
--- /dev/null
+++ b/MAVENProject/src/main/java/model/PacmanGame.java
@@ -0,0 +1,56 @@
+package model;
+
+import java.io.BufferedReader;
+import java.io.FileReader;
+import java.io.IOException;
+
+import engine.Cmd;
+import engine.Game;
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ *         Version avec personnage qui peut se deplacer. A completer dans les
+ *         versions suivantes.
+ * 
+ */
+public class PacmanGame implements Game {
+
+	/**
+	 * constructeur avec fichier source pour le help
+	 * 
+	 */
+	public PacmanGame(String source) {
+		BufferedReader helpReader;
+		try {
+			helpReader = new BufferedReader(new FileReader(source));
+			String ligne;
+			while ((ligne = helpReader.readLine()) != null) {
+				System.out.println(ligne);
+			}
+			helpReader.close();
+		} catch (IOException e) {
+			System.out.println("Help not available");
+		}
+	}
+
+	/**
+	 * faire evoluer le jeu suite a une commande
+	 * 
+	 * @param commande
+	 */
+	@Override
+	public void evolve(Cmd commande) {
+		System.out.println("Execute "+commande);
+	}
+
+	/**
+	 * verifier si le jeu est fini
+	 */
+	@Override
+	public boolean isFinished() {
+		// le jeu n'est jamais fini
+		return false;
+	}
+
+}
diff --git a/MAVENProject/src/main/java/model/PacmanPainter.java b/MAVENProject/src/main/java/model/PacmanPainter.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f33ee42e6954c893e3971105e18bc59c52e7870
--- /dev/null
+++ b/MAVENProject/src/main/java/model/PacmanPainter.java
@@ -0,0 +1,52 @@
+package model;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.image.BufferedImage;
+
+import engine.GamePainter;
+
+/**
+ * @author Horatiu Cirstea, Vincent Thomas
+ *
+ * afficheur graphique pour le game
+ * 
+ */
+public class PacmanPainter implements GamePainter {
+
+	/**
+	 * la taille des cases
+	 */
+	protected static final int WIDTH = 100;
+	protected static final int HEIGHT = 100;
+
+	/**
+	 * appelle constructeur parent
+	 * 
+	 * @param game
+	 *            le jeutest a afficher
+	 */
+	public PacmanPainter() {
+	}
+
+	/**
+	 * methode  redefinie de Afficheur retourne une image du jeu
+	 */
+	@Override
+	public void draw(BufferedImage im) {
+		Graphics2D crayon = (Graphics2D) im.getGraphics();
+		crayon.setColor(Color.blue);
+		crayon.fillOval(0,0,10,10);
+	}
+
+	@Override
+	public int getWidth() {
+		return WIDTH;
+	}
+
+	@Override
+	public int getHeight() {
+		return HEIGHT;
+	}
+
+}
diff --git a/MAVENProject/src/main/java/start/Main.java b/MAVENProject/src/main/java/start/Main.java
new file mode 100644
index 0000000000000000000000000000000000000000..f75076d011d5a8c067277ccf675dc1be66fd5e64
--- /dev/null
+++ b/MAVENProject/src/main/java/start/Main.java
@@ -0,0 +1,25 @@
+package start;
+
+import model.PacmanPainter;
+import engine.GameEngineGraphical;
+import model.PacmanController;
+import model.PacmanGame;
+
+/**
+ * lancement du moteur avec le jeu
+ */
+public class Main {
+
+	public static void main(String[] args) throws InterruptedException {
+
+		// creation du jeu particulier et de son afficheur
+		PacmanGame game = new PacmanGame("helpFilePacman.txt");
+		PacmanPainter painter = new PacmanPainter();
+		PacmanController controller = new PacmanController();
+
+		// classe qui lance le moteur de jeu generique
+		GameEngineGraphical engine = new GameEngineGraphical(game, painter, controller);
+		engine.run();
+	}
+
+}
diff --git a/acl-project.iml b/acl-project.iml
deleted file mode 100644
index 48426fcce918b28a721230cc9a22a71d40ba14f5..0000000000000000000000000000000000000000
--- a/acl-project.iml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
-  <component name="NewModuleRootManager">
-    <output url="file://$MODULE_DIR$/bin" />
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
-</module>
\ No newline at end of file