2016-09-11 5 views
0

チェスゲームを作成していますが、基本的なアイを終了しましたが、作品を撮るたびに消えて数ターン後に戻ってきます。作品は、作品をレンダリングするリスト内にあってはならない。 これは/レンダリングクラスが追加され/その新しい場所に古い曲を設定し、すべてのリストからoriginalnewLocの両方を削除しsetPieceLoc()新しい作品撮影時に取り外されていない部分

を設定します。 これはなぜ起こっているのですか?リストに新しい情報を追加する他のクラスはありませんので、ここではエラーでなければならないことが分かります。

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); 
     } 

    } 

} 
+0

私は、コードにあなたの質問のコードではなく、リンクを掲示あなたの可能性が高く、そのように助けを得るために – smoggers

+0

ペースト関連するコードの代わりに、お勧めできます画像.. – SMA

+0

投稿するビットと画像ではありませんが、ok – TheGamerPlayz

答えて

0

あなたはどこかの部分を空にしようとしているようです。

オリジナルが白黒マップにない場合、白いポーンのように見える作品8が使用されます。それがあなたのビデオに再現される作品です。

空の正方形からピースを移動することは意味をなさないので、このような場合は例外をスローする必要があります。これは、あなたがこれが起こっている状況をデバッグに役立つはずですやって:

if(ChessBoard.white.containsKey(original)) 
    piece = ChessBoard.white.get(original); 
else if(ChessBoard.black.containsKey(original)) 
    piece = ChessBoard.black.get(original); 
else 
    throw new IllegalArgumentException("Attempting to move piece from empty square " + original); 
+0

私はそうしていますが、それは投げられていますが、AIはリストにない場所を決して捕らえるべきではない。ここには、AI – TheGamerPlayz

+0

http://hastebin.com/ejirokudih.avrasm – TheGamerPlayz

+0

私はそれがすべきではないことに同意します。しかし、明らかにそうです。私はその例外がスローされ、デバッガを介して実行されているブレークポイントを置くことをお勧めします。 –

関連する問題