2012-09-11 5 views
-2

저는 자바에서 큰 신인이에요. 과제를 수행하기 위해 지뢰 찾기 게임을 만들려고 노력 중이며 아직 베타 단계입니다. 그러나 버튼을 누르면 광산을 "0"으로 표시하는 방법에 대해 고민하고 있습니다. 2d 배열을 사용하여 Jbutton을 만들었지 만 원하는 특정 단추에 "0"을 넣을 수 없습니다.눌렀을 때 Jbutton에 텍스트를 설정하십시오.

여기 내 코드가 있습니다 (추악함/가능한 비 효율성을 용서해주십시오). GUI와 관련하여 정말 우둔합니다.

import java.awt.*; 
import javax.swing.*; 
import java.awt.GridLayout; 
import java.awt.event.*; 
import java.awt.geom.*; 
import javax.swing.event.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JOptionPane; 
import javax.swing.JFrame; 

public class Grid extends JPanel { 
    // Initializes rows,columns and mines 
    int rows = 10; 
    int cols = 10; 
    int i, j = 0; 
    int mines = 10; 
    boolean[][] setmine = new boolean[rows][cols]; 
    boolean[][] clickable = new boolean[rows][cols]; 
    private JToggleButton squares[][], squares2[][]; 

    // Contructor for creating a grid(with default size 400x400 
    public Grid() { 
     this.setSize(600, 600); 
     this.setLayout(new GridLayout(rows, cols)); 
     squares = new JToggleButton[rows][cols]; 
     buildButtons(); 
    } 

    private void buildButtons() { 
     // loops are used for creating the "buttons" on the grid. 
     int MinesNeeded = 10; 
     // builds buttons 
     // ---------------------------------------- 
     for (i = 0; i < rows; i++) { 
      for (j = 0; j < cols; j++) { 
       squares[i][j] = new JToggleButton(); 
       // squares[i][j].setEnabled(false); 
       squares[i][j].setSize(600, 600); 

       // -------------------------------------------------- 
       // This part randomises the mines 
       // ----------------------------------------------------- 
       while (MinesNeeded > 0) { 

        int x = (int) Math.floor(Math.random() * rows); 
        int y = (int) Math.floor(Math.random() * cols); 
        if (!setmine[x][y]) { 
         setmine[x][y] = true; 

         MinesNeeded--; 
        } 
       } 
       // ---------------------------------------------------------------------------- 

       this.add(squares[i][j]); 

       if (setmine[i][j] == true) { 

        squares[i][j].addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent ae) { 
          // this is the problem 
          squares[i][j].setText("0"); 
         } 
        }); 
       } 
      } 
     } 
    } 

    public static void main(String[] args) { 
     Grid g = new Grid(); 
     JFrame frame = new JFrame("Minesweeper"); 

     frame.add(g); 
     frame.setSize(600, 600); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

답변

0

내 제안을 누르면 JLabel를 표시 할 때 다음 번호의 JButton를 표시하지만, 대신 처음에하는 JButton 표시됩니다 있도록 내 세포가 CardttLayout를 사용 가지고 있지만하지 않는 것입니다. stackoverflow에서이 예제를 통해 링크를 검색하고 다시 볼 수 있습니다. 여기

링크입니다 : Minesweeper Action Events

그리고 여기에 좀 더 자세하게 내 코드의 일부를 설명하는 링크입니다 :이 프로그램을 실행하면 Need help with my minesweeper program?

, 당신과 같이 초기 화면이 나타납니다 :

:

MineSweeper1

빈 사각형을 누르면, 당신은 모든 빈 사각형의 허가를 볼 것

MineSweeper2

그리고 폭탄을 타격 한 후, 당신은 볼 것모든 폭탄 표시 :

MineSweeper3

관련 문제