2014-12-02 3 views
-4

Это то, с чем я столкнулся. Я делаю игру Кено из кода Кристалса, который мне давали. До сих пор я смог выбрать 20 из 80 и сделать их красными. Тем не менее, у меня есть кнопка, когда я нажимаю ее, она говорит: «Игра - это ничья», и окно закрывается.Завершение кода Java Keno?

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

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 линии в нижней части, где я должен вставить код. Я был бы очень признателен, если бы кто-то мог мне помочь.

+0

Где конкретно вы застряли? Делали ли вы еще 20-тиночную повторяющуюся ничью? –

+0

Я верю, что имел в виду ваш наставник, используя интернет-ресурсы, такие как Java Documentation, и только два компонента, которые вам нужно понять в вашем задании, - это рандомизация и сравнение массивов. Этот вопрос проголосовали так сильно, потому что сообщество Stack Overflow не должно делать домашнее задание для вас. Вы не понимаете проблему и не пытаетесь решить ее самостоятельно. Будьте осторожны с такими вопросами, как это может привести к плагиату, и я уверен, что ваш наставник более чем способен узнать, кто плагиат. – Mantas

ответ

2

Привлечь 20 неповторяющихся чисел, вы можете сделать следующее:

  1. положить 80 номеров в коллекции.
  2. shuffle the collection
  3. элементы теперь в случайном порядке, и вы можете перебирать коллекцию, чтобы получить первые 20 элементов.

Если вы дадите мне более подробную информацию о том, что вы застряли, я могу предоставить дополнительную информацию.

+0

@JohnClark Знаете ли вы, что такое коллекция? Знаете ли вы, что такое API 'Collections' (и что он имеет функцию' shuffle')? Я имею в виду, что на самом деле не собираюсь делать домашнее задание - мы требуем проверенных усилий. –