2013-03-19 3 views
0

Я немного зациклился на том, как создать поданную там, где будет отображаться, сколько раз вы выигрываете или играете. Как:Подсчет числа побед из камня, бумаги, ножниц

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

Означает, что если пресс-бумага и я выиграю ответ прибавить 1 к количеству побед ... и так далее ...

| 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()); 
     } 
    } 




} 
+0

я застрял, как добавить текстовое поле, которое будет подсчитать, сколько побед теряет или втягивает было сделано ....... –

+0

Я понимаю, как это сделать, я имею в виду Я могу visuali ze, но застрял, как подключиться ... –

ответ

2

Добавить глобальные переменные :

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

Заменить JWoL.setText(" You Lose |"); с recordLoss(); и сделать функцию:

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

и то же самое для других.

Вышеупомянутые могут быть не такими, какие вы хотите, или выводить чувствительные данные в контексте остальной части вашей программы, но, надеюсь, вам дадут достаточные рекомендации.

Но я скорее любитель что-то вроде: (enum, вероятно, более правильно, но я чувствую, что это грязно в 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}; 
    ... 

Заменить JWoL.setText(" You Lose |"); с record(LOSS); и то же самое для других, и только 1 функция:

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

Если я так делаю, то возникает синтаксическая ошибка в разделе else .... ** else ** if (PlayerChoice.equals («Бумага»)) –

+0

@DenisNurasy Ты сделал окружить его '{}'? Я отредактировал ответ с лучшим решением. – Dukeling

+0

LabelsPan.add (JNumWin); \t \t LabelsPan.add (JNumLose); \t \t LabelsPan.add (JNumTie); Как я думаю, будет правильным ответом на фактическое количество выигрышей, например, для пользователя, но это не сработало ( –

Смежные вопросы