display ships on window + add mouse listener

This commit is contained in:
Quentin Legot 2021-04-22 12:26:17 +02:00
parent 43ab7ebfa7
commit c43b200888
4 changed files with 114 additions and 14 deletions

View File

@ -36,7 +36,7 @@ public class Main {
} }
private static void parseArgs(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { private static void parseArgs(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Player[] players = new AbstractPlayer[2]; Player[] players = new Player[2];
ArrayList<Pair<String, Class<? extends AbstractPlayer>>> playerClass = new ArrayList<>(2); ArrayList<Pair<String, Class<? extends AbstractPlayer>>> playerClass = new ArrayList<>(2);
playerClass.add(new Pair<>("human", Human.class)); playerClass.add(new Pair<>("human", Human.class));
playerClass.add(new Pair<>("random", Random.class)); playerClass.add(new Pair<>("random", Random.class));

View File

@ -0,0 +1,39 @@
package battleship.control;
import battleship.view.Window;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class WindowMouseListener implements MouseListener {
private final Window window;
public WindowMouseListener(Window view) {
this.window = view;
}
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
System.out.println("(" + x + ", " + y + ")");
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent ignored) {}
@Override
public void mouseExited(MouseEvent ignored) {}
}

View File

@ -1,6 +1,9 @@
package battleship.view; package battleship.view;
import battleship.control.WindowMouseListener;
import battleship.model.Game; import battleship.model.Game;
import battleship.model.Ship;
import battleship.model.player.Human;
import battleship.model.player.Player; import battleship.model.player.Player;
import battleship.utils.Pair; import battleship.utils.Pair;
@ -9,24 +12,35 @@ import java.awt.*;
public class Window extends AbstractView { public class Window extends AbstractView {
private final JFrame frame; final JFrame frame;
private final int height = 600; public final int height = 600;
private final int width = 1200; public final int width = 1200;
String upperText = "";
public Window(Game game) { public Window(Game game) {
super(game); super(game);
this.frame = new JFrame("Battleship"); this.frame = new JFrame("Battleship");
frame.setSize(width + width / 13, height + height / 4); frame.setSize(width + width / 13, height + height / 4);
frame.setContentPane(new Draw()); frame.setResizable(false);
frame.setContentPane(new Draw(this));
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setVisible(true); frame.setVisible(true);
frame.addMouseListener(new WindowMouseListener(this));
} }
@Override @Override
public void setShips(Player player) { public void setShips(Player player) {
upperText = "Placez votre navire joueur " + player.getId();
if(player instanceof Human) {
for(int i : shipsSize) {
upperText += "Placez votre premier navire de taille " + i + " à l'aide de la souris";
}
} else {
super.setShips(player);
}
} }
@Override @Override
@ -46,14 +60,20 @@ public class Window extends AbstractView {
} }
class Draw extends JPanel { class Draw extends JPanel {
private final Window window;
public Draw(Window window) {
this.window = window;
}
public void paintComponent(Graphics g) { public void paintComponent(Graphics g) {
/*JTextArea area = new JTextArea(); g.drawString(upperText, (int) (window.width /2 - (upperText.length() * 2.5)), 50);
area.setBounds(20,10,400,20); int width = window.width;
//area.append("A B C D E F G H I J"); int height = window.height;
frame.add(area);*/
for (int abscisse = width / 24; abscisse< width +1; abscisse+= width / 24) { for (int abscisse = width / 24; abscisse< width +1; abscisse+= width / 24) {
g.drawLine(abscisse, height /6, abscisse, height); g.drawLine(abscisse, height /6, abscisse, height);
if ( width * 0.44167 < abscisse && abscisse < (width >> 1)) { if ( width * 0.44167 < abscisse && abscisse < width / 2) {
abscisse += width / 24 ; abscisse += width / 24 ;
} }
} }
@ -61,9 +81,50 @@ public class Window extends AbstractView {
g.drawLine(width / 24, ordonnee, (int) (width /2.18), ordonnee); g.drawLine(width / 24, ordonnee, (int) (width /2.18), ordonnee);
g.drawLine((int) (width / 1.845), ordonnee, width, ordonnee); g.drawLine((int) (width / 1.845), ordonnee, width, ordonnee);
} }
TextArea a = new TextArea("Aouiuxdytftgykhulijhguhghf"); // TODO: 12/04/2021 Dessiner les navires
setLayout(new GridLayout(width, height)); int initialHeight = height / 12;
a.replaceRange("dqsdqsfdqsd", 0, 1); for(int i = 1; i < 3; ++i) {
int initialWidth = width / 24;
Player player = game.players[i-1];
System.out.println(i);
for(Ship ship : player.getShips()) {
int x1 = 0;
int y1 = 0;
int shipWidth = 0;
int shipHeight = 0;
switch(ship.getDirection()) {
case DOWN:
x1 = initialWidth * ship.getCoords().getRight();
y1 = initialHeight * ship.getCoords().getLeft();
shipWidth = initialWidth;
shipHeight = initialHeight * ship.getSize();
break;
case UP:
shipWidth = initialWidth;
shipHeight = initialHeight * ship.getSize();
x1 = initialWidth * ship.getCoords().getRight();
y1 = initialHeight * ship.getCoords().getLeft() - shipHeight;
break;
case RIGHT:
x1 = initialWidth * ship.getCoords().getRight();
y1 = initialHeight * ship.getCoords().getLeft();
shipWidth = initialWidth * ship.getSize();
shipHeight = initialHeight;
break;
case LEFT:
shipWidth = initialWidth * ship.getSize();
shipHeight = initialHeight;
x1 = initialWidth * ship.getCoords().getRight() - shipWidth;
y1 = initialHeight * ship.getCoords().getLeft();
break;
}
x1 += i == 1 ? initialWidth : initialWidth + width / 2;
y1 += height / 6;
g.setColor(new Color(255, 0, 0));
g.fillRect(x1, y1, shipWidth, shipHeight);
}
}
System.out.println(window.toString());
} }
} }
} }