Java 鼠标运动监听器

Java 鼠标运动监听器,java,arrays,awt,Java,Arrays,Awt,我是Java编程的初学者。我正在尝试创建一个棋子游戏,玩家可以移动自己的棋子。问题是,当一件物品被移动时,所有人都会移动它。我真的很感谢你的帮助。谢谢 主类 package Checkers_Own; import resources.DrawingBoard; import resources.Timer; public class Game { public static void main(String[] args) { Board[][] boards

我是Java编程的初学者。我正在尝试创建一个棋子游戏,玩家可以移动自己的棋子。问题是,当一件物品被移动时,所有人都会移动它。我真的很感谢你的帮助。谢谢

主类

package Checkers_Own;

import resources.DrawingBoard;
import resources.Timer;

public class Game {

    public static void main(String[] args) {

        Board[][] boards = new Board[8][8];
        DrawingBoard board = new DrawingBoard(840, 640);
        Timer timer = new Timer();

        for(int i = 0; i < 8; i++){
            for(int j = 0; j < 8; j++){
                if(i % 2 == 1){
                    if(j % 2 == 1)boards[i][j] = new Board(true, i, j);
                    else boards[i][j] = new Board(false, i, j);
                }
                else if(i % 2 == 0){
                    if(j % 2 == 1)boards[i][j] = new Board(false, i, j);
                    else boards[i][j] = new Board(true, i, j);
                }
            }
        }
        for(int i = 5; i < 8; i++) for(int j = 0; j < 8; j++) if(!boards[j][i].isWhite) PiecesManager.add1(new Pieces(true, j, i));
        for(int i = 0; i < 8; i++) for(int j = 0; j < 3; j++) if(!boards[i][j].isWhite) PiecesManager.add2(new Pieces(false, i, j));

        PiecesManager.properties(board);

        while(true){
            board.clear();
            for(int i = 0; i < 8; i++) for(int j = 0; j < 8; j++) boards[i][j].draw(board);
            PiecesManager.draw(board);
            PiecesManager.move();
            board.repaint();
            timer.pause(30);
        }
    }
}
董事会

计件管理器

package Checkers_Own;

import resources.DrawingBoard;

public class PiecesManager {

private static int size1, size2;
private static Pieces[] p1 = new Pieces[12];
private static Pieces[] p2 = new Pieces[12];

public static void draw(DrawingBoard board){
    for(int i = 0; i < size1; i++) p1[i].draw(board);   
    for(int i = 0; i < size2; i++) p2[i].draw(board);   
}

public static void move(){
    for(int i = 0; i < p1.length; i++) if(p1[i].moved() == p1[i]) p1[i].move();
    for(int i = 0; i < p2.length; i++) if(p2[i].moved() == p2[i]) p2[i].move();
}

public static void add1(Pieces piece){
    p1[size1] = piece;
    size1 ++;
}

public static void add2(Pieces piece){
    p2[size2] = piece;
    size2 ++;
}

public static void properties(DrawingBoard board){
    for(int i = 0; i < p1.length; i++){
        board.addMouseListener(p1[i]);
        board.addMouseMotionListener(p1[i]);
    }
    for(int i = 0; i < p2.length; i++){
        board.addMouseListener(p2[i]);
        board.addMouseMotionListener(p2[i]);
    }
}
}
package Checkers\u-Own;
进口资源.绘图板;
公共类分段管理器{
私有静态int size1,size2;
私有静态件[]p1=新件[12];
私有静态件[]p2=新件[12];
公共静态空隙绘制(绘图板){
对于(int i=0;i
您有一个复制粘贴错误。您的PieceManager类与game类相同,因此抱歉将修复
while(true)
循环在此事件驱动GUI中没有位置。看起来您正试图将horn线性控制台代码嵌入到事件驱动GUI中,而这绝对是您不想做的事情。我不知道您的意思,我首先要看一下和。Swing使用一种被动渲染算法,对于您正在做的事情来说,这已经足够了。不要使用
getGraphics
,在这种情况下,这确实不是应该做的事情
 package Checkers_Own;

    import java.awt.Color;
    import java.awt.Graphics2D;
    import resources.DrawingBoard;

    public class Board {

        boolean isWhite;
        private int x, y;

        public Board(boolean isWhite, int x, int y){
            this.isWhite = isWhite;
            this.x = x * 80;
            this.y = y * 80;
        }

        public void draw(DrawingBoard board){
            Graphics2D g = board.getCanvas();
            if(isWhite){
                g.setColor(Color.white);
                g.fillRect(x, y, 80, 80);
            }
            else{
                g.setColor(Color.black);
                g.fillRect(x, y, 80, 80);
            }
        }
    }
package Checkers_Own;

import resources.DrawingBoard;

public class PiecesManager {

private static int size1, size2;
private static Pieces[] p1 = new Pieces[12];
private static Pieces[] p2 = new Pieces[12];

public static void draw(DrawingBoard board){
    for(int i = 0; i < size1; i++) p1[i].draw(board);   
    for(int i = 0; i < size2; i++) p2[i].draw(board);   
}

public static void move(){
    for(int i = 0; i < p1.length; i++) if(p1[i].moved() == p1[i]) p1[i].move();
    for(int i = 0; i < p2.length; i++) if(p2[i].moved() == p2[i]) p2[i].move();
}

public static void add1(Pieces piece){
    p1[size1] = piece;
    size1 ++;
}

public static void add2(Pieces piece){
    p2[size2] = piece;
    size2 ++;
}

public static void properties(DrawingBoard board){
    for(int i = 0; i < p1.length; i++){
        board.addMouseListener(p1[i]);
        board.addMouseMotionListener(p1[i]);
    }
    for(int i = 0; i < p2.length; i++){
        board.addMouseListener(p2[i]);
        board.addMouseMotionListener(p2[i]);
    }
}
}