2011-10-30 9 views
-3

私はメモリゲームを作成しました。 スコアシステムを追加したいので、プレイヤーが一致するペアを選択するたびにヒットしますが、そうでなければミスします。それはすでにメモリゲームの基本的な機能を持っています。あなたがカードを選び、別のカードを選んでください。もしそれらが一致すれば、両方とも取り除かれます。メモリゲームのスコア

現在のスコアを表示するにはどうすればよいですか?ヒットとミスのために2つの整数カウンタを追加しましたが、更新されていないようです。ここで

は私のコードです:

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.*; 
import javax.swing.*; 

public class MemoryGame extends JFrame implements ActionListener { 

    private JFrame window = new JFrame("Memory Game"); 
    private static final int WINDOW_WIDTH = 500; // pixels 
    private static final int WINDOW_HEIGHT = 500; // pixels 
    private JButton exitBtn, replayBtn, solveBtn; 
    ImageIcon ButtonIcon = createImageIcon("card.jpg"); 
    private JButton[] gameBtn = new JButton[16]; 
    private ArrayList<Integer> gameList = new ArrayList<Integer>(); 
    private int Hit, Miss = 0; 
    private int counter = 0; 
    private int[] btnID = new int[2]; 
    private int[] btnValue = new int[2]; 
    private JLabel HitScore, MissScore; 
    private Panel gamePnl = new Panel(); 
    private Panel buttonPnl = new Panel(); 
    private Panel scorePnl = new Panel(); 

    protected static ImageIcon createImageIcon(String path) { 
     java.net.URL imgURL = MemoryGame.class.getResource(path); 
     if (imgURL != null) { 
      return new ImageIcon(imgURL); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 

    public MemoryGame() 
    { 
     createGUI(); 
     createpanels(); 
     setArrayListText(); 
     window.setTitle("MemoryGame"); 
     window.setDefaultCloseOperation(EXIT_ON_CLOSE); 
     window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
     window.setVisible(true); 
    } 

    public void createGUI() 
    {  
     for (int i = 0; i < gameBtn.length; i++) 
     {  
      gameBtn[i] = new JButton(ButtonIcon); 

      gameBtn[i].addActionListener(this); 
     }  
     HitScore = new JLabel("Hit: " + Hit); 
     MissScore = new JLabel("Miss: " + Miss); 
     exitBtn = new JButton("Exit"); 
     exitBtn.addActionListener(this); 
     replayBtn = new JButton("Shuffle"); 
     replayBtn.addActionListener(this); 
     solveBtn = new JButton("Solve"); 
     solveBtn.addActionListener(this);  
    }  

    public void createpanels() 
    { 

     gamePnl.setLayout(new GridLayout(4, 4)); 
     for (int i = 0; i < gameBtn.length; i++) 
     {    
      gamePnl.add(gameBtn[i]); 
     }   
     buttonPnl.add(replayBtn); 
     buttonPnl.add(exitBtn); 
     buttonPnl.add(solveBtn); 
     buttonPnl.setLayout(new GridLayout(1, 0)); 
     scorePnl.add(HitScore); 
     scorePnl.add(MissScore); 
     scorePnl.setLayout(new GridLayout(1, 0)); 
     window.add(scorePnl, BorderLayout.NORTH); 
     window.add(gamePnl, BorderLayout.CENTER); 
     window.add(buttonPnl, BorderLayout.SOUTH); 
    } 

    public void setArrayListText() 
    { 
     for (int i = 0; i < 2; i++) 
     {  
      for (int ii = 1; ii < (gameBtn.length/2) + 1; ii++) 
      { 
       gameList.add(ii);  
      }  
     } 
    } 


    public boolean sameValues() 
    { 
     if (btnValue[0] == btnValue[1]) 
     { 
      return true;  
     } 

     return false;  
    } 

    public void actionPerformed(ActionEvent e) 
    {  
      if (exitBtn == e.getSource()) 
      { 
       System.exit(0);   
      } 
      if (replayBtn == e.getSource()) 
      {  
       for (int i = 0; i < gameBtn.length; i++) 
       { 
       gamePnl.remove(gameBtn[i]); 
       } 
       scorePnl.remove(HitScore); 
       scorePnl.remove(MissScore); 
       buttonPnl.remove(exitBtn); 
       buttonPnl.remove(replayBtn); 
       buttonPnl.remove(solveBtn); 
       window.remove(gamePnl); 
       window.remove(scorePnl); 
       window.remove(buttonPnl); 
       window.remove(window); 
       window.add(gamePnl); 
       window.add(scorePnl); 
       window.add(buttonPnl); 
       scorePnl.add(HitScore); 
       scorePnl.add(MissScore); 
       buttonPnl.add(exitBtn); 
       buttonPnl.add(replayBtn); 
       buttonPnl.add(solveBtn); 
       for (int i = 0; i < gameBtn.length; i++) 
       { 
       gamePnl.add(gameBtn[i]); 
       } 

      }  

      if (solveBtn == e.getSource()) 
      { 
       for (int i = 0; i < gameBtn.length; i++) 
       { 
        gameBtn[i].setText("" + gameList.get(i)); 
        gameBtn[btnID[0]].setEnabled(false); 
        gameBtn[btnID[1]].setEnabled(false); 

       } 
      } 

      for (int i = 0; i < gameBtn.length; i++) 
      { 

       if (gameBtn[i] == e.getSource()) 
       { 
        gameBtn[i].setText("" + gameList.get(i)); 
        gameBtn[i].setEnabled(false); 
        counter++;  
        if (counter == 3) 
        { 
         if (sameValues()) 
         {  
          gameBtn[btnID[0]].setEnabled(false); 
          gameBtn[btnID[1]].setEnabled(false); 
          gameBtn[btnID[0]].setVisible(false); 
          gameBtn[btnID[1]].setVisible(false); 
          Hit = Hit +1; 
         } 
         else 
         { 
           gameBtn[btnID[0]].setEnabled(true); 
           gameBtn[btnID[0]].setText(""); 
           gameBtn[btnID[1]].setEnabled(true); 
           gameBtn[btnID[1]].setText(""); 
           Miss = Miss +1; 
         }   
         counter = 1;  
        }   
        if (counter == 1) 
        {  
         btnID[0] = i; 
         btnValue[0] = gameList.get(i); 
        }  
        if (counter == 2) 
        { 
         btnID[1] = i;  
         btnValue[1] = gameList.get(i); 
        }   
       }   
      }   
    } 

    public static void main(String[] args) 
    { 
     new MemoryGame(); 
    } 
} 
+2

あなたの問題は何ですか? – Max

+3

あなたは疑問ですか? – FailedDev

答えて

2

多分これはあなたに正しい方向にプッシュを与えるだろう。特に5つの新しい単一行コメントを参照してください。その1つは質問です。

import java.awt.BorderLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 
import javax.swing.*; 

public class MemoryGame 
    // don't extend frame 
    /* extends JFrame */ 
    implements ActionListener { 

    // very important! 
    public void updateHitMiss() { 
     HitScore.setText("Hit: " + Hit); 
     MissScore.setText("Miss: " + Miss); 
    } 

    private JFrame window = new JFrame("Memory Game"); 
    private static final int WINDOW_WIDTH = 500; // pixels 
    private static final int WINDOW_HEIGHT = 500; // pixels 
    private JButton exitBtn, replayBtn, solveBtn; 
    ImageIcon ButtonIcon = createImageIcon("card.jpg"); 
    private JButton[] gameBtn = new JButton[16]; 
    private ArrayList<Integer> gameList = new ArrayList<Integer>(); 
    private int Hit, Miss = 0; 
    private int counter = 0; 
    private int[] btnID = new int[2]; 
    private int[] btnValue = new int[2]; 
    private JLabel HitScore, MissScore; 
    // don't mix Swing with AWT 
    private JPanel gamePnl = new JPanel(); 
    private JPanel buttonPnl = new JPanel(); 
    private JPanel scorePnl = new JPanel(); 

    protected static ImageIcon createImageIcon(String path) { 
     java.net.URL imgURL = MemoryGame.class.getResource(path); 
     if (imgURL != null) { 
      return new ImageIcon(imgURL); 
     } else { 
      System.err.println("Couldn't find file: " + path); 
      return null; 
     } 
    } 

    public MemoryGame() 
    { 
     createGUI(); 
     createJPanels(); 
     setArrayListText(); 
     window.setTitle("MemoryGame"); 
     window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     window.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); 
     window.setVisible(true); 
    } 

    public void createGUI() 
    { 
     for (int i = 0; i < gameBtn.length; i++) 
     { 
      gameBtn[i] = new JButton(ButtonIcon); 

      gameBtn[i].addActionListener(this); 
     } 
     HitScore = new JLabel("Hit: " + Hit); 
     MissScore = new JLabel("Miss: " + Miss); 
     exitBtn = new JButton("Exit"); 
     exitBtn.addActionListener(this); 
     replayBtn = new JButton("Shuffle"); 
     replayBtn.addActionListener(this); 
     solveBtn = new JButton("Solve"); 
     solveBtn.addActionListener(this); 
    } 

    public void createJPanels() 
    { 

     gamePnl.setLayout(new GridLayout(4, 4)); 
     for (int i = 0; i < gameBtn.length; i++) 
     { 
      gamePnl.add(gameBtn[i]); 
     } 
     buttonPnl.add(replayBtn); 
     buttonPnl.add(exitBtn); 
     buttonPnl.add(solveBtn); 
     buttonPnl.setLayout(new GridLayout(1, 0)); 
     scorePnl.add(HitScore); 
     scorePnl.add(MissScore); 
     scorePnl.setLayout(new GridLayout(1, 0)); 
     window.add(scorePnl, BorderLayout.NORTH); 
     window.add(gamePnl, BorderLayout.CENTER); 
     window.add(buttonPnl, BorderLayout.SOUTH); 
    } 

    public void setArrayListText() 
    { 
     for (int i = 0; i < 2; i++) 
     { 
      for (int ii = 1; ii < (gameBtn.length/2) + 1; ii++) 
      { 
       gameList.add(ii); 
      } 
     } 
    } 


    public boolean sameValues() 
    { 
     if (btnValue[0] == btnValue[1]) 
     { 
      return true; 
     } 

     return false; 
    } 

    public void actionPerformed(ActionEvent e) 
    { 
      if (exitBtn == e.getSource()) 
      { 
       System.exit(0); 
      } 
      if (replayBtn == e.getSource()) 
      { 
       for (int i = 0; i < gameBtn.length; i++) 
       { 
       gamePnl.remove(gameBtn[i]); 
       } 
       // what was all this removing/adding intended to achieve? 
       /* 
       scorePnl.remove(HitScore); 
       scorePnl.remove(MissScore); 
       buttonPnl.remove(exitBtn); 
       buttonPnl.remove(replayBtn); 
       buttonPnl.remove(solveBtn); 
       window.remove(gamePnl); 
       window.remove(scorePnl); 
       window.remove(buttonPnl); 
       window.remove(window); 
       window.add(gamePnl); 
       window.add(scorePnl); 
       window.add(buttonPnl); 
       scorePnl.add(HitScore); 
       scorePnl.add(MissScore); 
       buttonPnl.add(exitBtn); 
       buttonPnl.add(replayBtn); 
       buttonPnl.add(solveBtn); 
       */ 
       for (int i = 0; i < gameBtn.length; i++) 
       { 
       gamePnl.add(gameBtn[i]); 
       } 

      } 

      if (solveBtn == e.getSource()) 
      { 
       for (int i = 0; i < gameBtn.length; i++) 
       { 
        gameBtn[i].setText("" + gameList.get(i)); 
        gameBtn[btnID[0]].setEnabled(false); 
        gameBtn[btnID[1]].setEnabled(false); 

       } 
      } 

      for (int i = 0; i < gameBtn.length; i++) 
      { 

       if (gameBtn[i] == e.getSource()) 
       { 
        gameBtn[i].setText("" + gameList.get(i)); 
        gameBtn[i].setEnabled(false); 
        counter++; 
        if (counter == 3) 
        { 
         if (sameValues()) 
         { 
          gameBtn[btnID[0]].setEnabled(false); 
          gameBtn[btnID[1]].setEnabled(false); 
          gameBtn[btnID[0]].setVisible(false); 
          gameBtn[btnID[1]].setVisible(false); 
          Hit = Hit +1; 
         } 
         else 
         { 
           gameBtn[btnID[0]].setEnabled(true); 
           gameBtn[btnID[0]].setText(""); 
           gameBtn[btnID[1]].setEnabled(true); 
           gameBtn[btnID[1]].setText(""); 
           Miss = Miss +1; 
         } 
         counter = 1; 
        } 
        if (counter == 1) 
        { 
         btnID[0] = i; 
         btnValue[0] = gameList.get(i); 
        } 
        if (counter == 2) 
        { 
         btnID[1] = i; 
         btnValue[1] = gameList.get(i); 
        } 
       } 
      } 
     updateHitMiss(); 
    } 

    public static void main(String[] args) 
    { 
     // Swing GUIs should be created on the EDT 
     new MemoryGame(); 
    } 

} 
関連する問題