2013-05-09 4 views
-1

Im кодирование игры в шахматы на самом деле. Я сделал шахматную доску с футлярами, и я могу получить координаты.Как объявить шахматные фигуры в шахматной игре?

Мой вопрос: Как я могу сделать (пример) в пешки класс с его атрибутами (цвета и т.д ..) для моей игры.

Спасибо всем!

Мой код на самом деле:

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(); 
     } 
    }); 
} 
} 
+0

Классы и объекты в основном ориентированы на объектно-ориентированное программирование. Вы уже создали и создали несколько экземпляров в вашем примере. Создание нового класса 'Pawn' - это то же самое. – NilsH

+0

Я бы порекомендовал прочитать о java 'enum'. Это выглядит лучше, чем классы, поскольку они исходят из ограниченного набора опций. – Pureferret

ответ

1

Вероятно, способ идти об этом в первом определении абстрактного класса элемента (который будет определять функции, такие как getColor(), getPosition() и setPosition(x,y) и требуют осуществления getMovementOptions, и так далее). Затем вы можете сделать шесть разных классов, которые расширяют Piece: Пешка, ладья, рыцарь, епископ, королева и король. Затем каждый из них может реализовать getMovementOptions.

Преимущество использования базового класса в том, что вы можете обрабатывать все пьесы одинаково, когда вы пишете код, чтобы играть в игру: вы выбираете Piece p и переместите его на юридический квадрат, как определяется вызовом p.getMovementOptions() (или, тем не менее, вы определяете этот метод, возможно, ему, например, нужен доступ к позиции платы).

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. 
    } 
} 
+0

Цвет, квадрат, список являются частными атрибутами в абстрактном классе Piece, который мне нужно объявить? Потому что они не в моем коде, и я использую «lin» и «col» для получения координат. Я почти уверен, что это очевидно очевидно, я начинаю Java, но я хочу прогресса! – user2360545

+0

@ user2360545 Существуют различные части этого, которые я для вас не определил, например «Цвет» и «Квадрат». Идея заключается в том, что это будут классы, которые хранят информацию о цвете или местоположении. Я просто использовал эти имена классов, чтобы сделать мой пример ясным: вы можете реализовать их, как хотите. Может быть, цвет - это просто String, а позиция - это всего лишь пара координат (или, может быть, String с алгебраическим шахматным расположением, таким как «e4»). «Список» - это стандартный класс Java, в котором хранится список объектов (в моем коде, в списке «Квадрат»). –

0

Просто сделать класс

public class ChessPiece 
{ 
    Color color; 
    ... 
} 

.

public class Pawn extends ChessPiece 
{ 
    public Pawn(Color c) 
    { 
     this.color = c; 
    } 

    public Color getColor() 
    { 
     return this.color; 
    } 
    ... 
} 
+1

Я бы сделал цвет собственностью ChessPiece, так как он является общим для всех. Пешка будет просто «маркером». Или вы можете полностью отказаться от подкласса и просто сделать «Pawn» значение в поле «pieceType» в ChessPiece. –

+0

Хорошо, я думаю, что понимаю, но где я определяю атрибут Color? Как я могу использовать свои позиции «lin» и «col», чтобы переместить мою вещь в Pawn? – user2360545

Смежные вопросы