mirror of
				https://github.com/lov3b/Schack.git
				synced 2025-10-31 13:20:21 +01:00 
			
		
		
		
	halvvägs fixat schack
This commit is contained in:
		| @@ -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 på pjäsen om det är samma färg som den tur vi är på |                 // Kolla endast ifall vi kan röra på pjäsen om det är samma färg som den tur vi är på | ||||||
|                 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 gå/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) { | ||||||
|   | |||||||
| @@ -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 på kanterna inte kan röra sig |         // TODO: Lösa bugg där bunder på kanterna inte kan röra sig | ||||||
|   | |||||||
| @@ -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( | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 loveb
					loveb