完成Keno Java代码?

时间:2014-12-02 18:11:22

标签: java

这就是我遇到的麻烦。我正在制作一个基于水晶代码的基诺游戏。到目前为止,我已经能够选择80中的20个并将它们变为红色。但是,我按下按钮设置为当它按下它时说“游戏是平局”并且窗口关闭。

我试图输入一个代码,它将随机抽取20个数字而不重复,然后它们变黄,但是,如果CPU和人匹配一个数字,它将变为绿色。我不知道如何启动此代码或如何去做。这就是我所拥有的:

import java.awt.*;

import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.lang.String;

public class Kenogame {

  // constants
  public static final int WIDTH = 4;
  public static final int HEIGHT = 20;
  public static final int INITIAL = 0;
  public static final int RED = 1;
  public static final int YELLOW = 3;
  public static final int CHECKED = 4;

  private int turn = RED; // to track which player should play next

  private int[][] playerGrid; // to record each player's move
  private int[][] shadowGrid; // to keep track of which atoms have been FOUND
  private int[][] crystalGrid; // to extract a single crystal from playerGrid

  private int row, column; // position of most recently added atom
  private int lowX, lowY, highX, highY; // corner coordinates of current crystal
  private int player1Score = 0;
  private int player2Score = 0;

  // GUI related fields
  private JButton[] buttonArray;
  // private JTextField scoreField1;
  // private JTextField scoreField2;
  // private JLabel labelRED;           // Label "Red" on GUI
  // private JLabel labelYELLOW;    // Label "Yellow" on GUI
  private JLabel labelTurn; // Label displays whose turn is next
  private int numberToSelect = 20;
  Kenogame() {
    createGUIAndPlay();
  }

  private void createGUIAndPlay() {
    final JFrame f = new JFrame();
    // create the panels
    JPanel topPanel = new JPanel(new BorderLayout());
    JPanel buttonPanel = new JPanel(new GridLayout(WIDTH, HEIGHT));
    JPanel labelPanel = new JPanel();

    // represents the 2D grid of buttons on the GUI
    buttonArray = new JButton[WIDTH * HEIGHT];


    // stores the positions of atoms in both player's crystals
    playerGrid = new int[WIDTH][HEIGHT];
    // shadowGrid keeps track of which atoms have been found 
    shadowGrid = new int[WIDTH][HEIGHT];
    // used to store a crystal to determine if it is a perfect crystal
    crystalGrid = new int[WIDTH][HEIGHT];


    JButton endGameButton = new JButton("Start Draw");
    // labelRED = new JLabel("Red");

    // scoreField1 = new JTextField(3);
    // scoreField1.setEditable(false);
    //labelYELLOW = new JLabel("Yellow");
    labelTurn = new JLabel(Integer.toString(numberToSelect), Label.LEFT);
    Dimension dim = labelTurn.getPreferredSize();
    labelTurn.setPreferredSize(new Dimension(dim.width + 100, dim.height + 10));
    // scoreField2 = new JTextField(3);
    // scoreField2.setEditable(false);
    // scoreField1.setText("0");
    // scoreField2.setText("0");

    // create the buttons on which players will make their moves
    for (int i = 0; i < HEIGHT * WIDTH; i++) {

      buttonArray[i] = new JButton(Integer.toString(i + 1));
      buttonPanel.add(buttonArray[i]);
    }
    final Color buttColor = buttonArray[0].getBackground();
    // add the action listener to the buttons
    for (int i = 0; i < HEIGHT * WIDTH; i++) {
      buttonArray[i].setActionCommand(Integer.toString(i));
      buttonArray[i].addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
          JButton button = (JButton) e.getSource();
          if (button.getBackground() == Color.RED) {
            button.setBackground(buttColor);
            numberToSelect++;
          } else {
            if (numberToSelect > 0) {
              button.setBackground(Color.RED);
              numberToSelect--;
            }
          }
          //    button.setEnabled(false);
          int buttonIndex = Integer.valueOf(button.getActionCommand());
          row = buttonIndex / WIDTH;
          column = buttonIndex % WIDTH;
          // playMove();

          labelTurn.setText(Integer.toString(numberToSelect));
          // updateGUI();
        }
      });
    }

    endGameButton.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        String s;
        //  Need to add "ball draw here" for Keno 
        //  20 random numbers between 1 and 80

        // each time a "ball" matches one selected on the Keno ticket add to a counter
        // at end look up payout for the number of matches corresponding to the counter
        if (player1Score > player2Score)
          s = "RED wins the game";
        else if (player1Score < player2Score)
          s = "YELLOW wins the game";
        else
          s = "Game is a draw";
        JOptionPane.showMessageDialog(f, s, "Game Over", JOptionPane.PLAIN_MESSAGE);
        System.exit(1);
      }
    });

    labelPanel.add(endGameButton);
    labelPanel.add(labelTurn);
    topPanel.add(labelPanel, BorderLayout.NORTH);
    topPanel.add(buttonPanel, BorderLayout.CENTER);
    f.add(topPanel);
    f.setSize(1000, 400);
    f.setTitle("Keno");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setVisible(true);
  }

  private void playMove() {
    playerGrid[row][column] = turn;
    if (turn == RED) {
      turn = YELLOW;
    } else {
      turn = RED;
    }
  }

  private void initialize() {
    highX = highY = Integer.MIN_VALUE;
    lowX = lowY = Integer.MAX_VALUE;
    for (int row = 0; row < HEIGHT; row++)
      for (int column = 0; column < WIDTH; column++) {
        crystalGrid[row][column] = INITIAL;
      }
  }

  public static void main(String[] args) {
    new Keno();
  }
}

// green for a match, yellow for a no-match.

我底部有4条线,我应该插入代码。如果有人能帮我一把,我真的很感激。

1 个答案:

答案 0 :(得分:2)

要绘制20个非重复数字,您可以执行以下操作:

  1. 将您的80个号码放入一个集合中。
  2. 随机播放
  3. 元素现在是随机顺序,您可以遍历集合以获取前20个元素。
  4. 如果你给我更详细的信息,我可以提供进一步的信息。