Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有更好的方法将所有这些都放在一个数组中?_Java - Fatal编程技术网

Java 有没有更好的方法将所有这些都放在一个数组中?

Java 有没有更好的方法将所有这些都放在一个数组中?,java,Java,我是一个初学者,我想做一个象棋游戏,我刚刚开始,我想有一个更好的方法,但是所有的棋子都在一个数组中,而不是像这样写每一个棋子 我的代码又长又丑请帮帮我 public class Chess { public static void main(String[] args) { int [][] grid = new int[8][8]; Pieces PB1 = new Pieces(); PB1.Pieces = 6; Pieces PB

我是一个初学者,我想做一个象棋游戏,我刚刚开始,我想有一个更好的方法,但是所有的棋子都在一个数组中,而不是像这样写每一个棋子 我的代码又长又丑请帮帮我

public class Chess {
    public static void main(String[] args) {
        int [][] grid = new int[8][8];

        Pieces PB1 = new Pieces(); PB1.Pieces = 6;
        Pieces PB2 = new Pieces(); PB2.Pieces = 6;
        Pieces PB3 = new Pieces(); PB3.Pieces = 6;
        Pieces PB4 = new Pieces(); PB4.Pieces = 6;
        Pieces PB5 = new Pieces(); PB5.Pieces = 6;
        Pieces PB6 = new Pieces(); PB6.Pieces = 6;
        Pieces PB7 = new Pieces(); PB7.Pieces = 6;
        Pieces PB8 = new Pieces(); PB8.Pieces = 6;
        Pieces PW1 = new Pieces(); PW1.Pieces = 6;
        Pieces PW2 = new Pieces(); PW2.Pieces = 6;
        Pieces PW3 = new Pieces(); PW3.Pieces = 6;
        Pieces PW4 = new Pieces(); PW4.Pieces = 6;
        Pieces PW5 = new Pieces(); PW5.Pieces = 6;
        Pieces PW6 = new Pieces(); PW6.Pieces = 6;
        Pieces PW7 = new Pieces(); PW7.Pieces = 6;
        Pieces PW8 = new Pieces(); PW8.Pieces = 6;
        Pieces KB1 = new Pieces(); KB1.Pieces = 2;
        Pieces KW1 = new Pieces(); KW1.Pieces = 2;
        Pieces QB1 = new Pieces(); QB1.Pieces = 1;
        Pieces QW1 = new Pieces(); QW1.Pieces = 1;
        Pieces BB1 = new Pieces(); BB1.Pieces = 3;
        Pieces BB2 = new Pieces(); BB2.Pieces = 3;
        Pieces BW1 = new Pieces(); BW1.Pieces = 3;
        Pieces BW2 = new Pieces(); BW2.Pieces = 3;
        Pieces NB1 = new Pieces(); NB1.Pieces = 4;
        Pieces NB2 = new Pieces(); NB2.Pieces = 4;
        Pieces NW1 = new Pieces(); NW1.Pieces = 4;
        Pieces NW2 = new Pieces(); NW2.Pieces = 4;
        Pieces RB1 = new Pieces(); RB1.Pieces = 5;
        Pieces RB2 = new Pieces(); RB2.Pieces = 5;
        Pieces RW1 = new Pieces(); RW1.Pieces = 5;
        Pieces RW2 = new Pieces(); RW2.Pieces = 5;
    }
}

public class Pieces{
    int type;     // |1 = Queen|   |2 = King|   |3 = Bishop|   |4 = Knight|   |5 = Rook|   |6 = Pawn|
    int movement; // |1 = Pawn Step|   |2 = Pawn Two Steps|   |3 = Pawn Kill|   |4 = Knight|   |5 = Rook|   |6 = Bishop|   |7 = King|
} 

你应该先学习OO原则,然后你就可以开始了。只是想知道你能做什么

package stackoverflow;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import org.junit.Test;

public class Chess {

    enum Rank {
        // this time lower case even if these are constants
        a, b, c, d, e, f, g, h
    }

    enum File {
        one, two, three, four, five, six, seven, eight
    }

    enum FigureColor {
        BLACK, WHITE
    }

    interface Figure {

        FigureColor getFigureColor();

        Collection<FigurePosition> getMovements();

        Figure move(FigurePosition figurePosition);

        FigurePosition getCurrentPosition();

    }

    class FigurePosition {

        Rank rank;
        File file;

        public FigurePosition(Rank rank, File file) {
            this.rank = rank;
            this.file = file;
        }

        @Override
        public String toString() {
            return "FigurePosition{" +
                    "rank=" + rank +
                    ", file=" + file +
                    '}';
        }
    }

    abstract class BasicFigure implements Figure {

        private FigureColor figureColor;
        private List<FigurePosition> movements = new ArrayList<FigurePosition>();

        public BasicFigure(FigureColor figureColor, FigurePosition initialFigurePosition) {
            this.figureColor = figureColor;
            move(initialFigurePosition);
        }

        public FigureColor getFigureColor() {
            return figureColor;
        }

        public Collection<FigurePosition> getMovements() {
            return movements;
        }

        public Figure move(FigurePosition figurePosition) {
            movements.add(figurePosition);
            return this;
        }

        public FigurePosition getCurrentPosition() {
            return movements.get(movements.size()-1);
        }

        @Override
        public String toString() {
            return getClass().getSimpleName() + "{" +
                    "figureColor=" + figureColor +
                    ", currentPosition=" + getCurrentPosition() +
                    ", movements=[" + getMovements().stream().map(FigurePosition::toString).collect(Collectors.joining(",")) + "]'}'";
        }
    }

    class Queen extends BasicFigure {

        public Queen(FigureColor figureColor, FigurePosition initialFigurePosition) {
            super(figureColor, initialFigurePosition);
        }

        @Override
        public Figure move(FigurePosition figurePosition) {
            // you can for example validate movements here
            return super.move(figurePosition);
        }
    }

    class King extends BasicFigure {

        public King(FigureColor figureColor, FigurePosition initialFigurePosition) {
            super(figureColor, initialFigurePosition);
        }
    }

    class Pawn extends BasicFigure {

        public Pawn(FigureColor figureColor, FigurePosition initialFigurePosition) {
            super(figureColor, initialFigurePosition);
        }
    }

    /** add other figure classes here */

    @Test
    public void test() {
        Figure whiteQueen = new Queen(FigureColor.WHITE, new FigurePosition(Rank.d, File.one));
        System.out.println(whiteQueen);
        Figure blackPawn1 = new Pawn(FigureColor.BLACK, new FigurePosition(Rank.a, File.seven));
        blackPawn1.move(new FigurePosition(Rank.a, File.six));
        System.out.println(blackPawn1);
    }

}
包堆栈溢出;
导入java.util.ArrayList;
导入java.util.Collection;
导入java.util.List;
导入java.util.stream.collector;
导入org.junit.Test;
公办国际象棋{
枚举秩{
//即使这些是常数,这一次也是小写
a、 b,c,d,e,f,g,h
}
枚举文件{
一,二,三,四,五,六,七,八
}
枚举图形颜色{
黑的,白的
}
界面图{
FigureColor getFigureColor();
集合getMovements();
图形移动(图形位置图形位置);
图位置getCurrentPosition();
}
类图形定位{
等级;
文件;
公众人物位置(普通、普通){
这个.等级=等级;
this.file=文件;
}
@凌驾
公共字符串toString(){
返回“FigurePosition{”+
“秩=”+秩+
“,file=“+文件”+
'}';
}
}
抽象类BasicFigure实现了图{
私人人物色彩;
私有列表移动=新的ArrayList();
公共基本图形(FigureColor FigureColor,FigurePosition initialFigurePosition){
this.figureColor=figureColor;
移动(初始图形位置);
}
公共图形颜色getFigureColor(){
返回图形颜色;
}
公众募捐活动(){
返回运动;
}
公众人物移动(人物位置){
运动。添加(图形位置);
归还这个;
}
公共人物位置getCurrentPosition(){
返回movements.get(movements.size()-1);
}
@凌驾
公共字符串toString(){
返回getClass().getSimpleName()+“{”+
“figureColor=“+figureColor”+
“,currentPosition=“+getCurrentPosition()+
,movements=[“+getMovements().stream().map(FigurePosition::toString).collect(Collectors.joining(“,”)+“]'}”;
}
}
类扩展基本图形{
公共皇后(FigureColor FigureColor,FigurePosition initialFigurePosition){
super(图形颜色,初始图形位置);
}
@凌驾
公众人物移动(人物位置){
//例如,您可以在此处验证移动
返回超级移动(figurePosition);
}
}
类King扩展了基本图形{
公共国王(人物颜色人物颜色,人物位置初始人物位置){
super(图形颜色,初始图形位置);
}
}
类典当扩展基本图形{
公共典当(FigureColor FigureColor,FigurePosition initialFigurePosition){
super(图形颜色,初始图形位置);
}
}
/**在此添加其他图形类*/
@试验
公开无效测试(){
Figure whiteQueen=new Queen(FigureColor.WHITE,new FigurePosition(Rank.d,File.one));
System.out.println(whiteQueen);
Figure blackPawn1=新棋子(FigureColor.BLACK,新棋子位置(Rank.a,File.seven));
黑手1.移动(新的人物位置(等级a,文件6));
系统输出打印LN(blackPawn1);
}
}

什么是/是
片段
,为什么它是
静态
字段
片段
?你也能给我看一下那个班吗?请解释一下你的架构。你的代码没有多大意义。您正在创建一个
int[]
,但随后您正在创建
片段
(它应该是
片段
,单数)。您是否正在尝试分配需要
int
的对象?您似乎还将元数据存储在变量名中,这不是一个好主意。我还将使用
enum
作为类型,似乎不需要
movement
变量。您熟悉继承吗?另一个选项是为所有片段创建一个抽象基类,并在子类中实现每个片段类型。然后您可以创建基类的数组来保存每种类型的所有片段。