mirror of
https://github.com/lov3b/Schack.git
synced 2024-11-10 07:00:11 +01:00
Fixa så att varje pjäs endast roppar på en schackfunktion
This commit is contained in:
parent
ddbae03150
commit
6eea10491b
@ -10,6 +10,14 @@ public class Pawn extends PieceKnownIfMoved {
|
|||||||
super(isWhite, startingPosition);
|
super(isWhite, startingPosition);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ger tillbaks alla ställen pjäsen kan attackera
|
||||||
|
*
|
||||||
|
* @param pieces
|
||||||
|
* @param shouldNotCareIfAttackSpaceIsEmptyOrNot Ifall man ska kolla ifall det är något i möjliga attackrutor
|
||||||
|
* ifall
|
||||||
|
* @return Alla lämpliga attackMoves
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public ArrayList<Point> validAttacks(Piece[][] pieces, boolean shouldNotCareIfAttackSpaceIsEmptyOrNot) {
|
public ArrayList<Point> validAttacks(Piece[][] pieces, boolean shouldNotCareIfAttackSpaceIsEmptyOrNot) {
|
||||||
ArrayList<Point> movable = new ArrayList<>();
|
ArrayList<Point> movable = new ArrayList<>();
|
||||||
@ -75,7 +83,7 @@ public class Pawn extends PieceKnownIfMoved {
|
|||||||
Piece piece = pieces[pos.x][pos.y];
|
Piece piece = pieces[pos.x][pos.y];
|
||||||
// Ifall det är tomt här, gör ingenting
|
// Ifall det är tomt här, gör ingenting
|
||||||
if (piece != null && piece.isWhite() != this.isWhite()) {
|
if (piece != null && piece.isWhite() != this.isWhite()) {
|
||||||
if (!isInSchackHere(pieces, pos)) {
|
if (!isInSchack(pieces, pos)) {
|
||||||
movable.add(pos);
|
movable.add(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,7 +98,7 @@ public class Pawn extends PieceKnownIfMoved {
|
|||||||
|
|
||||||
Piece pieceToCheck = pieces[pos.x][pos.y];
|
Piece pieceToCheck = pieces[pos.x][pos.y];
|
||||||
if (pieceToCheck == null) {
|
if (pieceToCheck == null) {
|
||||||
if (!isInSchackHere(pieces, pos)) {
|
if (!isInSchack(pieces, pos)) {
|
||||||
movable.add(pos);
|
movable.add(pos);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -38,10 +38,6 @@ public abstract class Piece {
|
|||||||
this.isWhite = white;
|
this.isWhite = white;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPosition(Point p) {
|
|
||||||
this.position = p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ladda in pjäsbild från paketet img
|
* Ladda in pjäsbild från paketet img
|
||||||
*
|
*
|
||||||
@ -69,9 +65,9 @@ public abstract class Piece {
|
|||||||
* Ger tillbaks alla ställen pjäsen kan attackera
|
* Ger tillbaks alla ställen pjäsen kan attackera
|
||||||
*
|
*
|
||||||
* @param pieces
|
* @param pieces
|
||||||
* @param shouldNotCareIfAttackSpaceIsEmptyOrNot Ifall man inte ska bry sig
|
* @param shouldNotCareIfAttackSpaceIsEmptyOrNot För bönder ifall den ska kolla ifall det är något i möjliga attackrutor
|
||||||
* ifall
|
* ifall
|
||||||
* @return
|
* @return Alla lämpliga attackMoves
|
||||||
*/
|
*/
|
||||||
public ArrayList<Point> validAttacks(Piece[][] pieces, boolean shouldNotCareIfAttackSpaceIsEmptyOrNot) {
|
public ArrayList<Point> validAttacks(Piece[][] pieces, boolean shouldNotCareIfAttackSpaceIsEmptyOrNot) {
|
||||||
return validMoves(pieces, false);
|
return validMoves(pieces, false);
|
||||||
@ -83,7 +79,6 @@ public abstract class Piece {
|
|||||||
* @param g2
|
* @param g2
|
||||||
*/
|
*/
|
||||||
public void draw(Graphics2D g2) {
|
public void draw(Graphics2D g2) {
|
||||||
|
|
||||||
g2.drawImage(
|
g2.drawImage(
|
||||||
icon,
|
icon,
|
||||||
position.x * Board.SIZE_OF_TILE,
|
position.x * Board.SIZE_OF_TILE,
|
||||||
@ -99,7 +94,6 @@ public abstract class Piece {
|
|||||||
* @param toMove
|
* @param toMove
|
||||||
*/
|
*/
|
||||||
public void move(Piece[][] pieces, Point toMove) {
|
public void move(Piece[][] pieces, Point toMove) {
|
||||||
|
|
||||||
// Gör ingenting ifall vi är utanför brädet
|
// Gör ingenting ifall vi är utanför brädet
|
||||||
if (toMove.x >= pieces.length || toMove.y < 0 || position.x >= pieces[0].length || position.y < 0) {
|
if (toMove.x >= pieces.length || toMove.y < 0 || position.x >= pieces[0].length || position.y < 0) {
|
||||||
return;
|
return;
|
||||||
@ -114,7 +108,7 @@ public abstract class Piece {
|
|||||||
* Lägg till move ifall det går, alltså inte är schack där
|
* Lägg till move ifall det går, alltså inte är schack där
|
||||||
*
|
*
|
||||||
* @param pos drag att lägga till ifall det går
|
* @param pos drag att lägga till ifall det går
|
||||||
* @param movable lägger till drag i denna ArrayList<Point>
|
* @param movable lägger till drag i denna ArrayList
|
||||||
* @param pieces Piece[][] över brädet
|
* @param pieces Piece[][] över brädet
|
||||||
* @param isSelected
|
* @param isSelected
|
||||||
* @return true ifall man inte kan gå längre i denna riktning
|
* @return true ifall man inte kan gå längre i denna riktning
|
||||||
@ -132,7 +126,7 @@ public abstract class Piece {
|
|||||||
if (!isSelected) {
|
if (!isSelected) {
|
||||||
movable.add(pos);
|
movable.add(pos);
|
||||||
} else {
|
} else {
|
||||||
if (!isInSchackHere(pieces, pos)) {
|
if (!isInSchack(pieces, pos)) {
|
||||||
movable.add(pos);
|
movable.add(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +147,7 @@ public abstract class Piece {
|
|||||||
if (!isSelected) {
|
if (!isSelected) {
|
||||||
movable.add(pos);
|
movable.add(pos);
|
||||||
} else {
|
} else {
|
||||||
if (!isInSchackHere(pieces, pos)) {
|
if (!isInSchack(pieces, pos)) {
|
||||||
movable.add(pos);
|
movable.add(pos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -170,7 +164,7 @@ public abstract class Piece {
|
|||||||
* @param pos
|
* @param pos
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
boolean isInSchackHere(Piece[][] pieces, Point pos) {
|
private boolean moveAndTestSchackHere(Piece[][] pieces, Point pos) {
|
||||||
// Kom ihåg vart vi var
|
// Kom ihåg vart vi var
|
||||||
Point previousPosition = new Point(this.position);
|
Point previousPosition = new Point(this.position);
|
||||||
|
|
||||||
@ -182,7 +176,7 @@ public abstract class Piece {
|
|||||||
pieces[previousPosition.x][previousPosition.y] = null;
|
pieces[previousPosition.x][previousPosition.y] = null;
|
||||||
this.position = new Point(pos);
|
this.position = new Point(pos);
|
||||||
|
|
||||||
boolean inSchack = isInSchack(pos, pieces);
|
boolean inSchack = isInSchack(pieces, null);
|
||||||
|
|
||||||
// Flytta tillbaka
|
// Flytta tillbaka
|
||||||
pieces[previousPosition.x][previousPosition.y] = this;
|
pieces[previousPosition.x][previousPosition.y] = this;
|
||||||
@ -195,11 +189,16 @@ public abstract class Piece {
|
|||||||
/**
|
/**
|
||||||
* Kolla ifall det är schack vid den här positionen
|
* Kolla ifall det är schack vid den här positionen
|
||||||
*
|
*
|
||||||
* @param pos
|
* @param pieces Piece[][] över hela brädet
|
||||||
* @param pieces
|
* @param pos null ifall man endast ska kolla ifall det är schack just nu,
|
||||||
|
* alltså ifall pos inte är null testar vi att flytta oss dit och sedan
|
||||||
|
* kollar ifall det är schack där
|
||||||
* @return true ifall det är schack
|
* @return true ifall det är schack
|
||||||
*/
|
*/
|
||||||
boolean isInSchack(Point pos, Piece[][] pieces) {
|
boolean isInSchack(Piece[][] pieces, Point pos) {
|
||||||
|
if (pos != null) {
|
||||||
|
return moveAndTestSchackHere(pieces, pos);
|
||||||
|
}
|
||||||
ArrayList<Point> enemyAttacks = new ArrayList<>();
|
ArrayList<Point> enemyAttacks = new ArrayList<>();
|
||||||
|
|
||||||
// Fråga alla pjäser vart de kan gå/ta
|
// Fråga alla pjäser vart de kan gå/ta
|
||||||
|
Loading…
Reference in New Issue
Block a user