我在设计国际象棋游戏时需要帮助.我已经开始了,但还没有走远,因为我对Java很陌生,实际上是编程新手.
无论如何,我有我的抽象类Piece和各个部分作为子类.我有一个方法movePiece,在我的抽象类中,我想为所有子类定义.
它目前所做的就是将这件作品从一个方格移动到另一个方格.我有一个可以容纳Piece对象的Square类,该板由64x1 Square数组组成.
我知道碎片是如何移动的,但我如何实际编程呢?我想尝试应用MVC模式,但这是我第一次使用模式.
基本上我正在考虑使用Graphics2D为每个Square创建一个盒子.然后,当玩家点击一块时,移动后可用作目的地的方块将以某种颜色勾勒出轮廓.玩家点击其中一个方格后,我在movePiece方法中已有的代码将运行.
我想要做的是在Piece的每个子类中覆盖我的movePiece方法.问题是,代码如何在其中一种方法中看到?以Pawn子类为例.
我不是要求复制/粘贴代码,只是关于如何执行此操作的一些指示,最后是一些示例代码.
谢谢!
public class Game {
@SuppressWarnings("unused")
public static void main(String[] args){
Board board = new Board();
} }
public class Board {
Square[] grid;
public Board(){
grid = new Square[64];
}
public Square getSquare(int i){
return grid[i];
}
public void setDefault(){
}
public Boolean isMoveValid(){
return null;
} }
public class Square {
private Piece piece;
public void addPiece(Piece pieceType, String pieceColour, String pieceOwner)
throws ClassNotFoundException, InstantiationException, IllegalAccessException{
PieceFactory factory = new …
Run Code Online (Sandbox Code Playgroud) 我不知道它为什么不显示.首先,我创建一个组件实例,然后将其添加到二维JPanel数组中的某个元素.然后我循环遍历该数组并将每个JPanel添加到另一个JPanel容器中,该容器用于容纳所有JPanel.
然后我将最终容器添加到我的JFrame窗口并将可见性设置为true,它应该是可见的吗?
public class View extends JFrame {
Board gameBoard;
JFrame gameWindow = new JFrame("Chess");
JPanel gamePanel = new JPanel();
JPanel[][] squarePanel = new JPanel[8][8];
JMenuBar gameMenu = new JMenuBar();
JButton restartGame = new JButton("Restart");
JButton pauseGame = new JButton("Pause");
JButton log = new JButton("Log");
View(Board board){
gameWindow.setDefaultCloseOperation(EXIT_ON_CLOSE);
gameWindow.setSize(400, 420);
gameWindow.getContentPane().add(gamePanel, BorderLayout.CENTER);
gameWindow.getContentPane().add(gameMenu, BorderLayout.NORTH);
gameMenu.add(restartGame);
gameMenu.add(pauseGame);
gameMenu.add(log);
gameBoard = board;
drawBoard(gameBoard);
gameWindow.setResizable(false);
gameWindow.setVisible(true);
}
public void drawBoard(Board board){
for(int row = 0; row < 8; row++){
for(int col = 0; …
Run Code Online (Sandbox Code Playgroud) 如果我在GridLayout中有几个JPanels,每个都有一个MouseAdapter,然后创建JLabel(带文本)并添加到每个JPanels.请注意,JLabel没有侦听器.如果我渲染它并尝试单击JPanel,或者,最终尝试单击JLabel,MouseAdapter会将其注册为事件吗?
基本上我希望JPanels注册事件和JPanels只显示JPanels上面的文本.此外,面板具有背景颜色.
如果JLabel确实"隐藏"了注册事件,我该如何解决这个问题呢?