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 Color moveableColor = new Color(255, 191, 0);
private boolean turn = true;
private LinkedHashSet<Point> whiteAttacks = new LinkedHashSet<>();
private LinkedHashSet<Point> blackAttacks = new LinkedHashSet<>();
public boolean developerMode = false;
public Board() throws IOException {
@ -127,12 +126,33 @@ public class Board extends JPanel implements MouseListener {
try {
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
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);
validMovesToDraw.addAll(validMoves);
validMovesToDraw.addAll(blackAttacks);
}
} catch (Exception e) {
validMovesToDraw.clear();

View File

@ -11,6 +11,27 @@ public class Pawn extends PieceKnownIfMoved {
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
public LinkedHashSet<Point> validMoves(Piece[][] pieces) {
// TODO: Lösa bugg där bunder kanterna inte kan röra sig
@ -18,7 +39,7 @@ public class Pawn extends PieceKnownIfMoved {
// Om bonden har gått en gång, får 1 steg, annars 2
final int upTo = moved ? 1 : 2;
// Kolla om man kan rakt frak
for (int pawnDY = 1; pawnDY <= upTo; pawnDY++) {
System.out.println("this.position.x: " + this.position.x);

View File

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

View File

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