test pour faire le plateau+nouveau menu dans testV1+ probleme compilation

This commit is contained in:
2024-11-14 18:30:20 +01:00
parent 03e17d1882
commit 57fcd8f1af
69 changed files with 1568 additions and 329 deletions

View File

@@ -0,0 +1,20 @@
import model.Game;
import view.GameView;
import controller.GameController;
import javax.swing.*;
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
Game game = new Game();
GameView gameView = new GameView(game); // Crée la vue sans contrôleur pour le moment
GameController controller = new GameController(game, gameView); // Initialise le contrôleur avec game et gameView
// Passe ensuite le contrôleur à la vue une fois que tout est initialisé
gameView.setController(controller);
gameView.setVisible(true); // Affiche la fenêtre
});
}
}

View File

@@ -0,0 +1,61 @@
package view;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import model.Board;
import model.Tile;
import controller.GameController;
public class BoardView extends JPanel {
private GameController controller;
private int rows = 5;
private int cols = 5;
public BoardView(Board board, GameController controller) {
this.controller = controller;
setLayout(new GridLayout(rows, cols, 5, 5));
initializeBoard();
}
// Méthode pour assigner le contrôleur après création de l'instance
public void setController(GameController controller) {
this.controller = controller;
}
private void initializeBoard() {
for (int i = 0; i < rows * cols; i++) {
JPanel tilePanel = new JPanel();
tilePanel.setBackground(Color.LIGHT_GRAY);
tilePanel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
tilePanel.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
handleTilePlacement(tilePanel);
}
});
add(tilePanel);
}
}
private void handleTilePlacement(JPanel tilePanel) {
if (controller != null) { // Assure que le contrôleur est bien assigné
Tile tile = controller.getNextTile();
if (tile != null) {
tilePanel.setBackground(Color.GREEN);
tilePanel.add(new JLabel(tile.getType()));
revalidate();
repaint();
controller.placeTile(tile);
}
}
}
public void refreshBoard() {
revalidate();
repaint();
}
}

View File

@@ -0,0 +1,31 @@
package controller;
import model.Game;
import model.Tile;
import view.GameView;
public class GameController {
private Game game;
private GameView gameView;
private Tile currentTile;
public GameController(Game game, GameView gameView) {
this.game = game;
this.gameView = gameView;
this.currentTile = null; // Initialise sans tuile au début
}
public void selectNextTile(Tile tile) {
this.currentTile = tile;
}
public Tile getNextTile() {
return currentTile; // Retourne la tuile actuellement sélectionnée
}
public void placeTile(Tile tile) {
game.placeTile(tile);
gameView.update(game);
currentTile = null; // Réinitialise après placement
}
}

View File

@@ -0,0 +1,52 @@
package view;
import model.Game;
import model.Tile;
import controller.GameController;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class GameView extends JFrame {
private JLabel scoreLabel;
private BoardView boardView;
private GameController controller; // Ajoute le contrôleur ici
public GameView(Game game) { // Constructeur sans le contrôleur en paramètre
setTitle("Dorfromantik en Java");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 500);
setLayout(new BorderLayout());
scoreLabel = new JLabel("Score : " + game.getScore());
boardView = new BoardView(game.getBoard(), null); // Initialise BoardView sans contrôleur
JButton nextTileButton = new JButton("Sélectionner une tuile");
nextTileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (controller != null) { // Vérifie que le contrôleur est bien assigné
Tile tile = new Tile("forêt", new String[]{"terre", "terre", "eau", "terre", "eau", "terre"});
controller.selectNextTile(tile);
}
}
});
add(scoreLabel, BorderLayout.NORTH);
add(boardView, BorderLayout.CENTER);
add(nextTileButton, BorderLayout.SOUTH);
}
// Nouvelle méthode setController pour permettre d'assigner le contrôleur après création
public void setController(GameController controller) {
this.controller = controller;
boardView.setController(controller); // Passe le contrôleur à BoardView
}
public void update(Game game) {
scoreLabel.setText("Score : " + game.getScore());
boardView.refreshBoard();
}
}

View File

@@ -0,0 +1,20 @@
package controller;
import model.Game;
import model.Tile;
import view.GameView;
public class GameController {
private Game game;
private GameView gameView;
public GameController(Game game, GameView gameView) {
this.game = game;
this.gameView = gameView;
}
public void placeTile(Tile tile) {
game.placeTile(tile);
gameView.update(game);
}
}

View File

@@ -0,0 +1,26 @@
package model;
import java.util.ArrayList;
import java.util.List;
public class Board {
private List<Tile> tiles;
public Board() {
tiles = new ArrayList<>();
}
public void addTile(Tile tile) {
tiles.add(tile);
}
public List<Tile> getTiles() {
return tiles;
}
public boolean isPlacementValid(Tile tile) {
// Logique simplifiée pour vérifier si la tuile peut être placée
// Ici, tu pourrais vérifier les bords de la tuile et du plateau
return true; // Retourne true pour simplifier
}
}

View File

@@ -0,0 +1,26 @@
package model;
public class Game {
private Board board;
private int score;
public Game() {
board = new Board();
score = 0;
}
public Board getBoard() {
return board;
}
public int getScore() {
return score;
}
public void placeTile(Tile tile) {
if (board.isPlacementValid(tile)) {
board.addTile(tile);
score += 10; // Par exemple, chaque tuile ajoute 10 points
}
}
}

View File

@@ -0,0 +1,19 @@
package model;
public class Tile {
private String type; // Par exemple : "forêt", "rivière", "champ", etc.
private String[] edges; // Les types des bords de la tuile (ex: "eau", "terre")
public Tile(String type, String[] edges) {
this.type = type;
this.edges = edges;
}
public String getType() {
return type;
}
public String getEdge(int index) {
return edges[index];
}
}

View File

@@ -0,0 +1,24 @@
package view;
import javax.swing.*;
import model.Board;
import model.Tile;
import java.awt.*;
public class BoardView extends JPanel {
private Board board;
public BoardView(Board board) {
this.board = board;
setLayout(new GridLayout(5, 5, 5, 5)); // Exemple de grille 5x5 pour le plateau
}
public void refreshBoard() {
removeAll();
for (Tile tile : board.getTiles()) {
add(new TileView(tile.getType()));
}
revalidate();
repaint();
}
}

View File

@@ -0,0 +1,28 @@
package view;
import model.Game;
import javax.swing.*;
import java.awt.*;
public class GameView extends JFrame {
private JLabel scoreLabel;
private BoardView boardView;
public GameView(Game game) {
setTitle("Dorfromantik en Java");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setLayout(new BorderLayout());
scoreLabel = new JLabel("Score : " + game.getScore());
boardView = new BoardView(game.getBoard());
add(scoreLabel, BorderLayout.NORTH);
add(boardView, BorderLayout.CENTER);
}
public void update(Game game) {
scoreLabel.setText("Score : " + game.getScore());
boardView.refreshBoard();
}
}

View File

@@ -0,0 +1,21 @@
package view;
import javax.swing.*;
import java.awt.*;
public class TileView extends JPanel {
private String type;
public TileView(String type) {
this.type = type;
setPreferredSize(new Dimension(50, 50)); // Taille de la tuile
setBackground(Color.LIGHT_GRAY);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLACK);
g.drawString(type, 10, 25); // Affiche le type de la tuile au centre
}
}