halvvägs fixat schack

This commit is contained in:
loveb 2022-04-05 15:06:47 +02:00
parent 507315cefe
commit c3f85f0128
4 changed files with 56 additions and 6 deletions

View File

@ -20,8 +20,7 @@ public class Board extends JPanel implements MouseListener {
private Point selectedPiece = new Point(); private Point selectedPiece = new Point();
private Color moveableColor = new Color(255, 191, 0); private Color moveableColor = new Color(255, 191, 0);
private boolean turn = true; private boolean turn = true;
private LinkedHashSet<Point> whiteAttacks = new LinkedHashSet<>(); public boolean developerMode = false;
private LinkedHashSet<Point> blackAttacks = new LinkedHashSet<>();
public Board() throws IOException { public Board() throws IOException {
@ -127,11 +126,32 @@ public class Board extends JPanel implements MouseListener {
try { try {
Piece p = pieces[mouseCoordinateX][mouseCoordinateY]; Piece p = pieces[mouseCoordinateX][mouseCoordinateY];
// Kolla endast ifall vi kan röra pjäsen om det är samma färg som den tur vi är // Kolla endast ifall vi kan röra pjäsen om det är samma färg som den tur vi är
if (p.isWhite() == turn) { if (p.isWhite() == turn||developerMode) {
LinkedHashSet<Point> blackAttacks = new LinkedHashSet<>();
LinkedHashSet<Point> whiteAttacks = new LinkedHashSet<>();
// Fråga alla pjäser vart de kan /ta
for (Piece[] pieceArr : pieces) {
for (Piece piece : pieceArr) {
// Ifall det är tomrum skippa
if (piece == null) {
continue;
}
// Lägg till alla attacker för respektive färg
if (piece.white) {
whiteAttacks.addAll(piece.validAttacks(pieces));
} else {
blackAttacks.addAll(piece.validAttacks(pieces));
}
}
}
LinkedHashSet validMoves = p.validMoves(pieces); LinkedHashSet validMoves = p.validMoves(pieces);
validMovesToDraw.addAll(validMoves); validMovesToDraw.addAll(validMoves);
validMovesToDraw.addAll(blackAttacks);
} }
} catch (Exception e) { } catch (Exception e) {

View File

@ -11,6 +11,27 @@ public class Pawn extends PieceKnownIfMoved {
setPieceIcon("Pawn"); setPieceIcon("Pawn");
} }
@Override
public LinkedHashSet<Point> validAttacks(Piece[][] pieces) {
LinkedHashSet<Point> movable = new LinkedHashSet<>();
// Kolla ifall vi kan ta någon
for (int pawnX : new int[]{-1, 1}) {
// Position vi kollar just nu, snett upp åt höger & vänster
try {
Point pos = new Point(this.position.x + pawnX, this.position.y + (this.white ? -1 : 1));
Piece piece = pieces[pos.x][pos.y];
if (piece == null || piece.white != piece.white) {
movable.add(pos);
}
} catch (Exception e) {
// Out of bounds
}
}
return movable;
}
@Override @Override
public LinkedHashSet<Point> validMoves(Piece[][] pieces) { public LinkedHashSet<Point> validMoves(Piece[][] pieces) {
// TODO: Lösa bugg där bunder kanterna inte kan röra sig // TODO: Lösa bugg där bunder kanterna inte kan röra sig

View File

@ -36,6 +36,10 @@ public abstract class Piece {
public abstract LinkedHashSet<Point> validMoves(Piece[][] pieces); public abstract LinkedHashSet<Point> validMoves(Piece[][] pieces);
public LinkedHashSet<Point> validAttacks(Piece[][] pieces) {
return validMoves(pieces);
}
public void draw(Graphics2D g2) { public void draw(Graphics2D g2) {
g2.drawImage( g2.drawImage(

View File

@ -52,6 +52,7 @@ public class Schack {
JMenuItem showLocalIP = new JMenuItem("Show IP"); JMenuItem showLocalIP = new JMenuItem("Show IP");
JMenuItem askForRemi = new JMenuItem("Ask for remi"); JMenuItem askForRemi = new JMenuItem("Ask for remi");
JMenuItem surrender = new JMenuItem("Surrender"); JMenuItem surrender = new JMenuItem("Surrender");
JMenuItem developerMode = new JMenuItem("Toggle Developermode");
// Actions // Actions
connectToOpponent.addActionListener((ActionEvent ae) -> { connectToOpponent.addActionListener((ActionEvent ae) -> {
@ -71,6 +72,9 @@ public class Schack {
surrender.addActionListener((ActionEvent ae) -> { surrender.addActionListener((ActionEvent ae) -> {
System.out.println("I'M FRENCH! (TODO)"); System.out.println("I'M FRENCH! (TODO)");
}); });
developerMode.addActionListener(ae -> {
board.developerMode = !board.developerMode;
});
// Add the menu stuff // Add the menu stuff
frame.setJMenuBar(menuBar); frame.setJMenuBar(menuBar);
@ -80,6 +84,7 @@ public class Schack {
connectMenu.add(showLocalIP); connectMenu.add(showLocalIP);
gameMenu.add(askForRemi); gameMenu.add(askForRemi);
gameMenu.add(surrender); gameMenu.add(surrender);
gameMenu.add(developerMode);
frame.pack(); frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true); frame.setVisible(true);