2011-10-10 146 views
0

这个游戏应该通过在ActionListener中使用一个布尔变量在玩家1和玩家2之间切换命令,但现在它不能正常工作。由于某种原因,我们可以点击播放器1的所有3个按钮。 if语句由于某种原因而不起作用。任何线索这里发生了什么?谢谢你的帮助。Java ActionListener不能正常工作

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


public class Foresight extends JFrame 
{ 

    public static void main(String[] args) 
    { 

     //implement left panel for player 1 controls 
     JPanel left = new JPanel(); 
     left.setSize(100,300); 
     left.setLayout(new GridLayout(4,1)); 
     JLabel leftlabel = new JLabel("Player 1 Controls"); 
     leftlabel.setOpaque(true); 
     JButton leftyellow = new JButton("8 Yellow"); 
     leftyellow.addActionListener(new GameLogic(leftyellow, 20)); 
     JButton leftred = new JButton("4 Red"); 
     leftred.addActionListener(new GameLogic(leftred, 21)); 
     JButton leftblue = new JButton("4 Blue"); 
     leftblue.addActionListener(new GameLogic(leftblue, 22)); 
     left.add(leftlabel); 
     left.add(leftyellow); 
     left.add(leftred); 
     left.add(leftblue); 

     //implement right panel for player 2 controls 
     JPanel right = new JPanel(); 
     right.setSize(100,300); 
     right.setLayout(new GridLayout(4,1)); 
     JLabel rightlabel = new JLabel("Player 2 Controls"); 
     rightlabel.setOpaque(true); 
     JButton rightyellow = new JButton("8 Yellow"); 
     rightyellow.addActionListener(new GameLogic(rightyellow, 30)); 
     JButton rightred = new JButton("4 Red"); 
     rightred.addActionListener(new GameLogic(rightred, 31)); 
     JButton rightblue = new JButton("4 Blue"); 
     rightblue.addActionListener(new GameLogic(rightblue, 32)); 
     left.add(rightlabel); 
     left.add(rightyellow); 
     left.add(rightred); 
     left.add(rightblue); 


     //initialize JFrame that contains our game panel 
     JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(700,1100); 
     frame.setLayout(new BorderLayout()); 
     frame.add(left, BorderLayout.WEST); 
     frame.add(panel, BorderLayout.SOUTH); 
     frame.add(right, BorderLayout.EAST);  
     frame.pack(); 
     frame.setVisible(true); 
    } 

} 

class GameLogic implements ActionListener 
{ 
    JButton owner; 
    //this will help us keep track of which button has been pressed 
    int identity; 
    //this will keep track of whose turn it is TRUE = PLAYER1 and FALSE = PLAYER2 
    boolean turn = true; 
    //this will keep track of if a gameplay button has been pressed 
    int pressed = -1; 
    //these 3 are to keep track of player 1's pieces 
    int yellow1 = 8; 
    int red1 = 4; 
    int blue1 = 4; 
    //these 3 are to keep track of player 2's pieces 
    int yellow2 = 8; 
    int red2 = 4; 
    int blue2 = 4; 


    public GameLogic(JButton b, int id) 
    { 
     owner = b; 
     identity = id; 
    } 

    public void actionPerformed(ActionEvent e) 
    { 

     //if we click PLAYER1 YELLOW, do this 
     else if((identity == 20) && (yellow1 > 0) && (turn == true)) 
     { 
     pressed = 1; 
     turn = false; 
     yellow1--; 
     owner.setText(yellow1 + " Yellow"); 
     } 
     //if we click PLAYER1 RED, do this 
     else if((identity == 21) && (red1 > 0) && (turn == true)) 
     { 
     pressed = 2; 
     turn = false; 
     red1--; 
     owner.setText(red1 + " Red"); 
     } 
     //if we click PLAYER1 BLUE, do this 
     else if((identity == 22) && (blue1 > 0) && (turn == true)) 
     { 
     pressed = 3; 
     turn = false; 
     blue1--; 
     owner.setText(blue1 + " Blue"); 
     } 
     //if we click PLAYER2 YELLOW, do this 
     else if((identity == 30) && (yellow2 > 0) && (turn == false)) 
     { 
     pressed = 4; 
     turn = true; 
     yellow2--; 
     owner.setText(yellow2 + " Yellow"); 
     } 
     //if we click PLAYER2 RED, do this 
     else if((identity == 31) && (red2 > 0) && (turn == false)) 
     { 
     pressed = 5; 
     turn = true; 
     red2--; 
     owner.setText(red2 + " Red"); 
     } 
     //if we click PLAYER2 BLUE, do this 
     else if((identity == 32) && (blue2 > 0) && (turn == false)) 
     { 
     pressed = 6; 
     turn = true; 
     blue2--; 
     owner.setText(blue2 + " Blue"); 
     } 

    } 
} 
+3

加大调试力度,缩小问题范围。这是太多的代码发布和期待审查。 –

+0

我告诉过你哪个代码是相关的,我只是把它包括在内以防万一它是必要的。我下次不应该那样做? –

+0

只发布与问题相关的内容。 –

回答

3

你实例化多个“GameLogic”行动的听众,他们每个人都会有自己的变量“转”,这是所有默认的“真”。

您应该有一个GameLogic类来维护您的应用程序的状态。这不应该是你的行为监督者。

0

请看看**行。

//实行右侧面板,供玩家2个控制

JPanel right = new JPanel(); 
    right.setSize(100,300); 
    right.setLayout(new GridLayout(4,1)); 
    JLabel rightlabel = new JLabel("Player 2 Controls"); 
    rightlabel.setOpaque(true); 
    JButton rightyellow = new JButton("8 Yellow"); 
    rightyellow.addActionListener(new GameLogic(rightyellow, 30)); 
    JButton rightred = new JButton("4 Red"); 
    rightred.addActionListener(new GameLogic(rightred, 31)); 
    JButton rightblue = new JButton("4 Blue"); 
    rightblue.addActionListener(new GameLogic(rightblue, 32)); 
    left.add(rightlabel); 
    **left**.add(rightyellow); 
    **left**.add(rightred); 
    **left**.add(rightblue); 

我想你已经添加右面板的按钮左侧面板中。