2011-11-05 2 views
0

애플릿에 표시되어야하는 Java로 체스 프로그램을 작성하고 있습니다. 현재 체스 조각을 채우는 데 문제가 있습니다. 이것은 현재 내 JApplet의 paint() 메소드에서 수행되고 있으며 페인트가 두 번 이상 호출 될 수 있기 때문에 잘못되었다는 것을 알고 있습니다. 내가 배열을 작성하고 그것을 초기화하는 방법을 작성했지만 시도가 전혀 작동하지 않습니다. 어떤 도움을 주시면 감사하겠습니다.Java Chess Applet

public class DrawChessBoard extends JApplet 
     implements MouseListener, MouseMotionListener { 

    ChessPiece myPiece; 
    ImageIcon square; 
    ImageObserver observer; 
    ChessBoard gameBoard; 
    boolean isMouseDragging = false; 
    int size; //square dimensions 

    public void initialize() { 
     setBackground(Color.white); 
     Image bSquare = square.getImage(); 
     size = bSquare.getWidth(observer); 
     addMouseListener(this); 
     addMouseMotionListener(this); 
    } 

    public void paint(Graphics h) { 
     Graphics2D g = (Graphics2D) h; 
     //System.out.println("Am I being called more than once?"); 
     gameBoard = new ChessBoard(8); 
     gameBoard.start(); 
     gameBoard.paintBoard(g); 
     gameBoard.paintComponent(g); 
    } 
} 
+1

[예] (http://stackoverflow.com/questions/2561690/placing-component-on-glass-pane/2562685#2562685) 및 [유사 콘텐츠] (http://stackoverflow.com/questions/)를 참조하십시오. 2561690/유리 위에 놓는 구성 요소/2563350 # 2563350). – trashgod

+1

"전혀 작동하지 않습니다"를 정의 하시겠습니까? 적어도 초기화 작업을 시작하기 위해 초기화 할 위치를 정확히 생각할 것입니다. (예를 들어, 새 게임을 시작할 때 초기화 할 수도 있습니다.) –

답변

3

페인트 방법 - 기간에 프로그램 로직을 사용하지 마십시오. 너무나 많은면에서 그렇게 잘못되었습니다. 이 코드는 여러 번 호출되어 제어 할 수있을뿐만 아니라 프로그램 그래픽이 느려지 게됩니다. 페인팅은 JPanel 또는 다른 JComponent의 paintComponent 메소드에서 수행되어야하며,이 메소드는 페인팅에만 관련되어야합니다.

그건 그렇고, init 메소드는 어디에 있습니까? 이것이 바로이 코드의 대부분입니다.

다음은 JPanel에서 수행 된 체스 앱의 예입니다 : does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel. JPanel에 있기 때문에 JApplet의 contentPane에 쉽게 배치 할 수 있고 애플릿에 표시 할 수 있습니다.

2

응용 프로그램의 시각화 부분과 게임 규칙을 분리해야합니다.

모델 - 뷰 - 발표자 또는 모델 - 뷰 - 컨트롤러 디자인 패턴에 대해 읽어보십시오. 그것은 당신을 도울 것입니다.

0

Model-View-Controller 디자인 패턴을 사용해보십시오. 이 패턴에서 프로그램 로직은 컨트롤러 부분에서 수행되지만보기 파트에서 수행됩니다. 용들이있어!

관련 문제