체스 게임을 만들면서 방금 기본 아이를 완성했습니다. 조각을 가져갈 때마다 사라지고 다시 몇 차례 돌아옵니다. 조각은 조각을 렌더링하는 목록에 없어야합니다. 이는//이 추가 렌더링하는 클래스입니다촬영했을 때 조각이 제거되지 않습니다
setPieceLoc()
가 새로운 위치에 이전 조각을 설정하고 모두 original
모든 목록에서 newLoc
을 제거하는 새로운 조각을 설정합니다. 왜 이런 일이 발생하는지 알 수 있습니까? 목록에 새로운 정보를 추가하는 다른 클래스는 없으므로 여기서 오류가 있어야 함을 알 수 있습니다.
package me.xthegamerplayz.FirstGame.board;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import me.xthegamerplayz.FirstGame.board.tiles.ChessImages;
import me.xthegamerplayz.FirstGame.rules.LegalMoves;
public class Board {
public static void addPiece(int x, int y, int piece) {
Point point = new Point();
point.setLocation(x, y);
if(piece > 16)
ChessBoard.black.put(point, piece);
else
ChessBoard.white.put(point, piece);
}
public static void setPieceLoc(Point original, Point newLoc) {
int piece = 8;
if(ChessBoard.white.containsKey(original))
piece = ChessBoard.white.get(original);
else if(ChessBoard.black.containsKey(original))
piece = ChessBoard.black.get(original);
//Remove piece at newLoc
if(ChessBoard.white.containsKey(newLoc))
ChessBoard.white.remove(newLoc);
else if(ChessBoard.black.containsKey(newLoc))
ChessBoard.black.remove(newLoc);
//Remove piece from previous location
if(ChessBoard.white.containsKey(original))
ChessBoard.white.remove(original);
else if(ChessBoard.black.containsKey(original))
ChessBoard.black.remove(original);
if(piece > 16)
ChessBoard.black.put(newLoc, piece);
else
ChessBoard.white.put(newLoc, piece);
}
public void registerPieces() {
//Pawns
for(int x = 0; x < 8; x++) {
addPiece(x, 1, 8);
addPiece(x, 6, 24);
}
//White
addPiece(0, 0, 9);
addPiece(1, 0, 10);
addPiece(2, 0, 11);
addPiece(5, 0, 11);
addPiece(6, 0, 10);
addPiece(7, 0, 9);
addPiece(4, 0, 12);
addPiece(3, 0, 13);
//Black
addPiece(0, 7, 25);
addPiece(1, 7, 26);
addPiece(2, 7, 27);
addPiece(5, 7, 27);
addPiece(6, 7, 26);
addPiece(7, 7, 25);
addPiece(3, 7, 28);
addPiece(4, 7, 29);
}
public void render(Graphics g) {
for(Point point : ChessBoard.white.keySet()) {
int piece = ChessBoard.white.get(new Point(point));
int x = (int) (point.getX()*64) + 20;
int y = (int) (point.getY()*64) + 20;
boolean showTiles = false;
if(showTiles) {
if(piece == 24) {
LegalMoves lm = new LegalMoves(point);
for(Point p : lm.moves()) {
int bx = (int) (p.getX()*64) + 20;
int by = (int) (p.getY()*64) + 20;
g.setColor(Color.green);
g.fillRect(bx, by, 64, 64);
}
}
}
g.drawImage(ChessImages.getPieceImage(piece), x, y, null);
}
for(Point point : ChessBoard.black.keySet()) {
int piece = ChessBoard.black.get(new Point(point));
int x = (int) (point.getX()*64) + 20;
int y = (int) (point.getY()*64) + 20;
boolean showTiles = false;
if(showTiles) {
if(piece == 24) {
LegalMoves lm = new LegalMoves(point);
for(Point p : lm.moves()) {
int bx = (int) (p.getX()*64) + 20;
int by = (int) (p.getY()*64) + 20;
g.setColor(Color.green);
g.fillRect(bx, by, 64, 64);
}
}
}
g.drawImage(ChessImages.getPieceImage(piece), x, y, null);
}
}
}
내가 오히려 코드에 대한 링크보다 문제의 코드를 게시 제안 할 수 있습니다를, 당신 대신 그 방법 – smoggers
붙여 넣기 관련 코드를 도움을받을 가능성이 더 높습니다 이미지 .. – SMA
게시 할 비트이고 이미지가 아닙니다.하지만 확인하십시오. – TheGamerPlayz