2013-12-16 65 views
-3

我一直在編寫一個簡單的網格海盜遊戲,我希望玩家能夠看到一個屏幕上有兩個按鈕,標記爲簡單和難度。根據他們按下哪個按鈕,它將關閉該屏幕並調出具有不同大小網格的新窗口。目前代碼是爲三乘三網格編寫的,我想將其設置爲硬件,並且希望爲兩個二進制代碼編寫簡單的代碼。我遇到的麻煩是聲明新的方法來放入另一個gui,與我已有的gui分開。任何建議/解決方案將不勝感激?設置我的簡單遊戲的難度級別

import java.awt.*; 
    import javax.swing.*; 
    import javax.swing.Timer; 
import java.util.*; 
import java.awt.event.*; 





    public class PirateGame extends JFrame implements ActionListener { 

    JLabel label1, label2, label3; 

    ImageIcon image1, image2, image3, image4, image5; 

    JTextField textResult; 

    JButton [] buttons; 


    int treasureLocation; 

    int clicks = 0; 

public int count = 0;  


public static void main(String[] args){ 


    new PirateGame(); 

    } 


    public PirateGame(){ 




    this.setSize(700,700); 
    this.setLocationRelativeTo(null); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setTitle("Treasure Hunt Game"); 

    JPanel thePanel = new JPanel(); 


    thePanel.setLayout(new GridLayout(0,3,0,0)); 

    image1 = new ImageIcon(getClass().getResource("Treasure.jpg")); 
    image2 = new ImageIcon(getClass().getResource("Pirate.jpg")); 
    image3 = new ImageIcon(getClass().getResource("sand2.jpg")); 
    image4 = new ImageIcon(getClass().getResource("emptyhole.jpg")); 
    image5 = new ImageIcon(getClass().getResource("map.jpg")); 

    label1 = new JLabel("Click the buttons!"); 
    label1.setFont(new Font("Serif", Font.PLAIN, 20)); 
    label1.setForeground(Color.red); 


    label2 = new JLabel(image5); 
    label3 = new JLabel(image2); 


    buttons = new JButton[9]; 
    buttons[0] = new JButton(image3); 
    buttons[1] = new JButton(image3); 
    buttons[2] = new JButton(image3); 
    buttons[3] = new JButton(image3); 
    buttons[4] = new JButton(image3); 
    buttons[5] = new JButton(image3); 
    buttons[6] = new JButton(image3); 
    buttons[7] = new JButton(image3); 
    buttons[8] = new JButton(image3); 





    thePanel.add(buttons[0]); 
    thePanel.add(buttons[1]); 
    thePanel.add(buttons[2]); 
    thePanel.add(buttons[3]); 
    thePanel.add(buttons[4]); 
    thePanel.add(buttons[5]); 
    thePanel.add(buttons[6]); 
    thePanel.add(buttons[7]); 
    thePanel.add(buttons[8]); 
    thePanel.add(label1); 
    thePanel.add(label2); 
    thePanel.add(label3); 

    buttons[0].addActionListener(this); 
    buttons[1].addActionListener(this); 
    buttons[2].addActionListener(this); 
    buttons[3].addActionListener(this); 
    buttons[4].addActionListener(this); 
    buttons[5].addActionListener(this); 
    buttons[6].addActionListener(this); 
    buttons[7].addActionListener(this); 
    buttons[8].addActionListener(this); 



    this.add(thePanel); 

    this.setVisible(true); 



    treasureLocation = new Random().nextInt(buttons.length); 


    System.out.println(treasureLocation); 




    } 




    public void actionPerformed(ActionEvent evt){ 
    Object source = evt.getSource(); 

    if (source == buttons[treasureLocation]) { 


    buttons[treasureLocation].setIcon(image1); 
    label1.setText("You've found me Treasure!"); 

    Timer timer = new Timer(3000, 
      new ActionListener() { 


       public void actionPerformed(ActionEvent evt) { 

       PirateGame.this.setVisible(false); 
       PirateGame.this.dispose(); 
       new PirateGame(); 

       } 
      }); 
    timer.setRepeats(false); 
    timer.start(); 
    } 
    else 
    {((JButton)source).setIcon(image4); 
    label1.setText("Keep tryin' ARGG!"); 

    } 


    clicks++; 
    System.out.println(clicks); 


    if ((clicks == 5) && (source != buttons[treasureLocation])){ 

    label1.setText("One more try Matey!"); 

    } 

    if ((clicks == 6) && (source != buttons[treasureLocation])) { 

    label1.setText("Walk the Plank!"); 


    Timer timer2 = new Timer(3000, 
      new ActionListener() { 


       public void actionPerformed(ActionEvent evt) { 

       PirateGame.this.setVisible(false); 
       PirateGame.this.dispose(); 
       new PirateGame(); 

       } 
      }); 
    timer2.setRepeats(false); 
    timer2.start(); 
    } 

    if (clicks == 7){ 

    PirateGame.this.setVisible(false); 
    PirateGame.this.dispose(); 
    new PirateGame(); 
    } 

    } 





} 

回答

0

對於初學者 - 移動所有的UI代碼創建一個單獨的方法

createUI中(INT GridSize)

使用for循環來創建你的按鈕等

int numButtons = GridSize * GridSize; 
buttons = new JButton[Grid]; 
for (int i = 0; i < numButtons; i++) 
{ 
buttons[i] = new JButton(image3); 
} 

對於初學者來說,讓你的用戶界面工作,以便你可以傳遞它2或3,只需手動更改代碼並測試這兩個工作。

然後,您必須瞭解如何在運行時切換UI。我的猜測 是爲您的代碼:

this.add(thePanel); 

    this.setVisible(true); 

你需要弄清楚如何刪除thePanel,使一個新的,並添加它。這些是一個開始的想法...