Denis Nurasy
Denis Nurasy

Reputation: 41

Count number of Rock, Paper, Scissors wins

I'm stuck a bit how to create a filed where will be displayed how many times you win loose or draw. Like:

| Wins:  | 234 |
| Looses:| 234 |
| Draws: | 434 |

Mean that if a press paper and I win the answer add 1 to amount of wins...and so on...

| Wins:  | 235 |
| Looses:| 234 |
| Draws: | 434 |

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class gui extends JFrame implements ActionListener
{
    public JLabel JWoL,JWoLPlayer,JWoLPC,JNumWin,JNumLose,JNumTie;
    public static void main(String[] args)
    {
        gui theWindow = new gui();
        theWindow.show();
    }
    public gui()
    {
        Button butRock = new Button("Rock");
        butRock.addActionListener(this);
        Button butPaper = new Button("Paper");
        butPaper.addActionListener(this);
        Button butScissors = new Button("Scissors");
        butScissors.addActionListener(this);


        JWoLPlayer = new JLabel();
        JWoLPC = new JLabel();
        JWoL= new JLabel();


        JLabel rpsPlayer= new JLabel("Your Choice:");
        JLabel rpsComputer= new JLabel("Computers Choice:");
        setTitle("| RoPaS GAME |");


        JPanel ButtPan=new JPanel();
        ButtPan.setLayout(new GridLayout(1,3));
        ButtPan.add(butRock);
        ButtPan.add(butPaper);
        ButtPan.add(butScissors);


        JPanel LabelsPan=new JPanel();
        LabelsPan.setLayout(new GridLayout(7,1));
        LabelsPan.add(rpsPlayer);
        LabelsPan.add(JWoLPlayer);
        LabelsPan.add(rpsComputer);
        LabelsPan.add(JWoLPC);



        JPanel WLPan=new JPanel();
        WLPan.setLayout(new BorderLayout());
        WLPan.add(JWoL,"Center");


        JPanel TwoPanesN1=new JPanel();
        TwoPanesN1.setLayout(new BorderLayout());
        TwoPanesN1.add(LabelsPan,"West");
        TwoPanesN1.add(WLPan,"East");
        getContentPane().setLayout(new GridLayout(2,1));
        getContentPane().add(ButtPan);
        getContentPane().add(TwoPanesN1);


        Font fontDisplay = new Font("Arial", Font.PLAIN, 22);
        JWoL.setFont(fontDisplay);
        setSize(400,200);
        setVisible(true);
        setResizable(false);

        addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent ev){System.exit(0);}});
    }



    public void Play(String PlayerChoice)
    {
        String PCchoice=PCansw();
        JWoLPC.setText(PCchoice);

        if(PlayerChoice.equals(PCchoice))
            JWoL.setText(" Tie |");


        else if(PlayerChoice.equals("Rock"))
            if(PCchoice.equals("Paper"))
                JWoL.setText(" You Lose |");
            else
                JWoL.setText(" You Win |");


        else if(PlayerChoice.equals("Paper"))
            if(PCchoice.equals("Scissors"))
                JWoL.setText(" You Lose |");
            else
                JWoL.setText(" You Win |");


        else if(PlayerChoice.equals("Scissors"))
            if(PCchoice.equals("Rock"))
                JWoL.setText(" You Lose |");
            else
                JWoL.setText(" You Win |");

    }
    public String PCansw()
    {
        String rpsPC2="";
        int rpsPC=(int)(Math.random( )*3)+1;
        if(rpsPC==1)
            rpsPC2= "Rock";
        else if(rpsPC==2)
            rpsPC2= "Paper";
        else if(rpsPC==3)
            rpsPC2= "Scissors";
        return rpsPC2;
    }
    public void actionPerformed(ActionEvent e)
    {
        if(e.getActionCommand().equals("Exit"))
            System.exit(0);
        else
        {
            JWoLPlayer.setText(e.getActionCommand());
            Play(e.getActionCommand());
        }
    }




}

Upvotes: 0

Views: 2357

Answers (1)

Bernhard Barker
Bernhard Barker

Reputation: 55609

Add global variables:

public class gui extends JFrame implements ActionListener
{
  int wins = 0, losses = 0, draws = 0;
  ...

Replace JWoL.setText(" You Lose |"); with recordLoss(); and make a function:

private void recordLoss()
{
  JWoL.setText(" You Lose |");
  losses++;
  JNumLose.setText(""+losses);
}

and the same for the others.

The above may not be exactly what you want or output sensical data in the context of the rest of your program, but should hopefully give you enough guidance.

But I'm rather a fan of something like: (enum is probably more correct, but I feel it's messy in Java)

public class gui extends JFrame implements ActionListener
{
  static final int WINS = 0, LOSSES = 1, DRAWS = 2;
  int[] counts = new int[3];
  String[] strings = {" You Win |", " You Lose |", " Tie |"};
  // this MUST be set up in the constructor, not here!
  JLabel[] labels = {JNumWin, JNumLose, JNumTie};
  ...

Replace JWoL.setText(" You Lose |"); with record(LOSS); and the same for the others, and only have 1 function:

private void record(int type)
{
  JWoL.setText(strings[type]);
  counts[type]++;
  labels[type].setText(""+counts[type]);
}

Upvotes: 2

Related Questions