mirror of
				https://github.com/lov3b/Schack.git
				synced 2025-10-31 05:10:22 +01:00 
			
		
		
		
	Nu funkar schack checken för bönder
This commit is contained in:
		| @@ -33,7 +33,6 @@ public class Pawn extends PieceKnownIfMoved { | ||||
|  | ||||
|     @Override | ||||
|     public LinkedHashSet<Point> validMoves(Piece[][] pieces, boolean isSelected) { | ||||
|         // TODO: Lösa bugg där bunder på kanterna inte kan röra sig | ||||
|         LinkedHashSet<Point> movable = new LinkedHashSet<>(); | ||||
|  | ||||
|         // Om bonden har gått en gång, får gå 1 steg, annars 2 | ||||
| @@ -41,8 +40,6 @@ public class Pawn extends PieceKnownIfMoved { | ||||
|  | ||||
|         // Kolla om man kan gå rakt frak | ||||
|         for (int pawnDY = 1; pawnDY <= upTo; pawnDY++) { | ||||
|             System.out.println("this.position.x: " + this.position.x); | ||||
|             System.out.println("calced y: " + (this.position.y + (this.white ? -pawnDY : pawnDY))); | ||||
|             Point pos = new Point(this.position.x, this.position.y + (this.white ? -pawnDY : pawnDY)); | ||||
|             boolean shouldBreak = addMovesIfCan(pos, movable, pieces, isSelected); | ||||
|             if (shouldBreak) { | ||||
| @@ -68,7 +65,8 @@ public class Pawn extends PieceKnownIfMoved { | ||||
|         try { | ||||
|             Piece p = pieces[pos.x][pos.y]; | ||||
|             if (p.white != this.white) { | ||||
|                 movable.add(pos); | ||||
|                 tryToMoveAndCheckIfCheck(pieces, movable, pos); | ||||
|  | ||||
|             } | ||||
|         } catch (Exception e) { | ||||
|         } | ||||
| @@ -98,7 +96,7 @@ public class Pawn extends PieceKnownIfMoved { | ||||
|             } | ||||
|         } catch (NullPointerException npe) { | ||||
|             // This is an empty spot | ||||
|             movable.add(pos); | ||||
|             tryToMoveAndCheckIfCheck(pieces, movable, pos); | ||||
|         } catch (IndexOutOfBoundsException ioobe) { | ||||
|             // This means that the player is at the edge | ||||
|             System.out.println(pos); | ||||
|   | ||||
| @@ -84,29 +84,8 @@ public abstract class Piece { | ||||
|                 // Vi kan ta men inte gå längre. | ||||
|                 if (!isSelected) { | ||||
|                     movable.add(pos); | ||||
|                     return true; | ||||
|                 } | ||||
|  | ||||
|                 // Kom ihåg vart vi var | ||||
|                 Point previousPosition = new Point(this.position); | ||||
|  | ||||
|                 // Kom ihåg motståndarpjäs | ||||
|                 Piece opponentPiece = pieces[pos.x][pos.y]; | ||||
|  | ||||
|                 // Testa att flytta | ||||
|                 pieces[pos.x][pos.y] = this; | ||||
|                 pieces[previousPosition.x][previousPosition.y] = null; | ||||
|                 this.position = new Point(pos); | ||||
|  | ||||
|                 boolean inSchack = checkIfSchack(pos, pieces); | ||||
|  | ||||
|                 // Flytta tillbaka | ||||
|                 pieces[previousPosition.x][previousPosition.y] = this; | ||||
|                 pieces[pos.x][pos.y] = opponentPiece; | ||||
|                 this.position = new Point(previousPosition); | ||||
|  | ||||
|                 if (!inSchack) { | ||||
|                     movable.add(pos); | ||||
|                 } else { | ||||
|                     tryToMoveAndCheckIfCheck(pieces, movable, pos); | ||||
|                 } | ||||
|                 return true; | ||||
|  | ||||
| @@ -118,24 +97,7 @@ public abstract class Piece { | ||||
|                 return false; | ||||
|             } | ||||
|  | ||||
|             // Kom ihåg vart vi var | ||||
|             Point previousPosition = new Point(this.position); | ||||
|  | ||||
|             // Testa att flytta | ||||
|             pieces[pos.x][pos.y] = this; | ||||
|             pieces[previousPosition.x][previousPosition.y] = null; | ||||
|             this.position = new Point(pos); | ||||
|  | ||||
|             boolean inSchack = checkIfSchack(pos, pieces); | ||||
|  | ||||
|             // Flytta tillbaka | ||||
|             pieces[previousPosition.x][previousPosition.y] = this; | ||||
|             pieces[pos.x][pos.y] = null; | ||||
|             this.position = new Point(previousPosition); | ||||
|  | ||||
|             if (!inSchack) { | ||||
|                 movable.add(pos); | ||||
|             } | ||||
|             tryToMoveAndCheckIfCheck(pieces, movable, pos); | ||||
|             return false; | ||||
|  | ||||
|         } catch (IndexOutOfBoundsException ioobe) { | ||||
| @@ -147,6 +109,30 @@ public abstract class Piece { | ||||
|  | ||||
|     } | ||||
|  | ||||
|     void tryToMoveAndCheckIfCheck(Piece[][] pieces, LinkedHashSet movable, Point pos) { | ||||
|         // Kom ihåg vart vi var | ||||
|         Point previousPosition = new Point(this.position); | ||||
|  | ||||
|         // Kom ihåg motståndarpjäs | ||||
|         Piece opponentPiece = pieces[pos.x][pos.y]; | ||||
|  | ||||
|         // Testa att flytta | ||||
|         pieces[pos.x][pos.y] = this; | ||||
|         pieces[previousPosition.x][previousPosition.y] = null; | ||||
|         this.position = new Point(pos); | ||||
|  | ||||
|         boolean inSchack = checkIfSchack(pos, pieces); | ||||
|  | ||||
|         // Flytta tillbaka | ||||
|         pieces[previousPosition.x][previousPosition.y] = this; | ||||
|         pieces[pos.x][pos.y] = opponentPiece; | ||||
|         this.position = new Point(previousPosition); | ||||
|  | ||||
|         if (!inSchack) { | ||||
|             movable.add(pos); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     boolean checkIfSchack(Point pos, Piece[][] pieces) { | ||||
|         boolean ourColor = this.isWhite(); | ||||
|         Piece selectedPiece = this; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 loveb
					loveb