Java 国际象棋比赛中如何申报棋子?

Java 国际象棋比赛中如何申报棋子?,java,Java,事实上,我正在编写一个国际象棋游戏。我用箱子做了棋盘,我可以得到坐标 我的问题是:如何(举例)为我的游戏创建一个带有属性(颜色等)的兵类 谢谢大家 我的代码实际上是: package coordboutons; import java.awt.Color; import java.awt.Container; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.GridLayout; import

事实上,我正在编写一个国际象棋游戏。我用箱子做了棋盘,我可以得到坐标

我的问题是:如何(举例)为我的游戏创建一个带有属性(颜色等)的兵类

谢谢大家

我的代码实际上是:

    package coordboutons;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CoordBoutons extends JFrame {

CoordBoutons() {
    super("GridLayout");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    Container contenant = getContentPane();
    contenant.setLayout(new GridLayout(8, 8));

    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            contenant.add(new CaseEchiquier(i, j));
        }
    }

    pack();
    setVisible(true);
}

class CaseEchiquier extends JPanel {

    private int lin, col;
    private char column;

    CaseEchiquier(int i, int j) {
        lin = i;
        col = j;
        setPreferredSize(new Dimension(80, 75));
        setBackground((i + j) % 2 == 0 ? Color.WHITE : Color.GRAY);
        addMouseListener(new MouseAdapter() {


            @Override
            public void mousePressed(MouseEvent e){
                CaseEchiquier current =(CaseEchiquier)e.getSource(); // get the object that the user pressed
                int linX = current.getLin();
                int colY = current.getCol();
                System.out.println(lin+"   "+col);

            }



        });

    }
    public int getCol() {
        return col;
    }

    public int getLin() {
        return lin;
    }

}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            JFrame.setDefaultLookAndFeelDecorated(true);
            CoordBoutons coordBoutons = new CoordBoutons();
        }
    });
}
}
packagecoordboutons;
导入java.awt.Color;
导入java.awt.Container;
导入java.awt.Dimension;
导入java.awt.EventQueue;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
公共类CoordBoutons扩展JFrame{
CoordBoutons(){
超级(“网格布局”);
setDefaultCloseOperation(关闭时退出);
容器contenant=getContentPane();
contenant.setLayout(新的GridLayout(8,8));
对于(int i=0;i<8;i++){
对于(int j=0;j<8;j++){
新增(新案例编号(i,j));
}
}
包装();
setVisible(真);
}
类caseeciquier扩展了JPanel{
二等兵林林,;
私有字符列;
CaseEchiquier(国际一级、国际j级){
lin=i;
col=j;
setPreferredSize(新尺寸(80,75));
立根背景((i+j)%2==0?颜色。白色:颜色。灰色);
addMouseListener(新的MouseAdapter(){
@凌驾
公共无效鼠标按下(MouseEvent e){
caseeciquier current=(caseeciquier)e.getSource();//获取用户按下的对象
int linX=current.getLin();
int colY=current.getCol();
System.out.println(lin+“”+col);
}
});
}
公共int getCol(){
返回列;
}
公共int getLin(){
返回林;
}
}
公共静态void main(字符串[]args){
invokeLater(新的Runnable(){
@凌驾
公开募捐{
JFrame.setDefaultLookAndFeelDecorated(true);
CoordBoutons CoordBoutons=新CoordBoutons();
}
});
}
}
只需创建一个类

public class ChessPiece
{
    Color color;
    ...
}


可能实现这一点的方法是首先定义一个抽象的工件类(它将定义像
getColor()
getPosition()
setPosition(x,y)
,并且需要实现
getMovementOptions
,等等)。然后,您可以创建六个不同的类来扩展
:当兵、车、骑士、主教、女王和国王。然后,这些选项中的每一个都可以根据需要实现
getMovementOptions

使用这样的基类的好处是,在编写代码实际玩游戏时,可以以相同的方式处理所有棋子:选择一个
棋子p
,并将其移动到调用
p.getMovementOptions()
(或者,不管您最终如何定义此方法;例如,它可能需要访问董事会位置)

公共抽象类片段{
公共颜色getColor(){
返回此.color;
}
公共空间设置颜色(c色){
这个颜色=c;
}
公众广场{
返回此位置;
}
公共空间设置位置(方形p){
这个位置=p;
}
公共列表getMovementOptions(董事会b);
}
公共类典当扩展件{
公共列表getMovementOptions(b板){
//向前移动零、一或两个方块,或沿对角线方向向前移动一个方块!
//该列表基于此位置和给定的板。
}
}

类和对象基本上就是面向对象编程的内容。您已经在示例中创建并实例化了一些类。创建一个新的
Pawn
类也是一样。我建议您阅读java
enum
。它看起来比类更好,因为它们来自有限的领域选项集。我会将颜色作为棋子的一个属性,因为它对所有棋子都是通用的。Pawn将只是一个“标记”。或者您可以完全放弃子类化,只将“Pawn”作为“pieceType”中的一个值棋子中的字段。好吧,我想我明白了,但是我在哪里定义了颜色属性?我如何使用我的“lin”和“col”位置来移动我的棋子?颜色、正方形和列表是抽象棋子类中我需要声明的私有属性?因为它们不在我的代码中,我使用“lin”和“col”来获得坐标。我非常确定它是o显而易见,我正在启动Java,但我希望取得进展!!@user2360545这其中有很多部分我还没有为您定义,比如
Color
Square
。我的想法是这些类将存储颜色或位置信息。我只是使用这些类名来明确我的示例:您可以如何实现它们任何你想要的。可能颜色只是一个字符串,位置只是一对坐标(或者可能是一个带有代数象棋位置的字符串,如“e4”)。
List
是一个标准Java类,它存储对象列表(在我的代码中,是
Square
s的列表)。
public class Pawn extends ChessPiece
{
    public Pawn(Color c)
    {
        this.color = c;
    }

    public Color getColor()
    {
        return this.color;
    }
    ...
}
public abstract class Piece {
    public Color getColor() {
        return this.color;
    }

    public void setColor(Color c) {
        this.color = c;
    }

    public Square getPosition() {
        return this.position;
    }

    public void setPosition(Square p) {
        this.position = p;
    }

    public List<Square> getMovementOptions(Board b);
}

public class Pawn extends Piece {
    public List<Square> getMovementOptions(Board b) {
        // forward zero, one, or two squares, or capture diagonally one square ahead!
        // The list is based on this.position and the given Board.
    }
}