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
变量。您熟悉继承吗?另一个选项是为所有片段创建一个抽象基类,并在子类中实现每个片段类型。然后您可以创建基类的数组来保存每种类型的所有片段。