Символьный массив должен отображаться в определенном порядке и месте - PullRequest
1 голос
/ 05 апреля 2011

Попытка заставить финальную часть этой игры работать.Это игра палача, мне просто нужно, чтобы она отображала правильные догадки, где они находятся в слове.

Это фрагмент кода, когда дается правильное предположение

else
            {
                int alreadyGuessed = guesses.indexOf(guess);
                if (alreadyGuessed == -1)
                {

                    guesses = guesses + guess + "";
                    jlbWord.setText("Word: " + charWord[currentGuess]);
                }
                else{}

            }

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

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.awt.Dimension;

public class RightPanel extends JPanel implements KeyListener
{
JLabel jlbMissed, jlbWord, jlbTimer;
Color btnColor;
JComboBox jcbDifficulty;
JButton jbtStart, jbtQuit;
String[] difficulties = {"Easy", "Medium", "Hard"};
String[] words = {"First", "Next", "Hello", "World"};
char guess;
String word, guesses = "";
char[] charWord;
public static int incorrectGuesses = 0;
boolean clockIsRunning = false;
boolean gameInPlay = false;
int sec = 0;
int min = 0;



public RightPanel()
{

    this.setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    Random ran = new Random();  //
    int rand = ran.nextInt(4);  // Generates random number then selects word from words array
    word = words[rand];         //
    charWord = word.toCharArray();
    ActionHandler actionHandler = new ActionHandler();
    jlbMissed   = new JLabel("Missed: ");
    jlbWord     = new JLabel("Word: ");
    jlbTimer    = new JLabel("Time: " + "0:00");
    jbtStart    = new JButton("Start");
    jbtQuit     = new JButton("Quit");
    jcbDifficulty = new JComboBox();
    jbtStart.addActionListener(actionHandler);
    jbtQuit.addActionListener(actionHandler);
    jcbDifficulty.addKeyListener(this);
    jbtStart.addKeyListener(this);
    for (int i = 0; i < 3; i++)
    {
        jcbDifficulty.addItem(difficulties[i]); // Creates Difficutly ComboBox
    }
    this.add(jcbDifficulty, getConstraints(0,0,1,1, GridBagConstraints.WEST));
    this.add(jlbMissed, getConstraints(0,1,1,1, GridBagConstraints.WEST));
    this.add(jlbWord, getConstraints(0,2,1,1, GridBagConstraints.WEST));
    this.add(jlbTimer, getConstraints(0,4,1,1, GridBagConstraints.WEST));
    this.add(jbtStart, getConstraints(0,6,1,1, GridBagConstraints.WEST));
    this.add(jbtQuit, getConstraints(0,7,1,1, GridBagConstraints.WEST));




}

public void keyPressed(KeyEvent e){}
public void keyReleased(KeyEvent e){}
public void keyTyped(KeyEvent e)
{
    guess = e.getKeyChar();
    if (gameInPlay == false)
    {
        JOptionPane.showMessageDialog(this, "You have not started the game yet!", "Game has not Started", JOptionPane.ERROR_MESSAGE);
        System.out.println("Game Not in Play");
    }
    else
    {
        if (Character.isLetter(guess))
        {

            if (incorrectGuesses > 11)
            {
                clockIsRunning = false;
                gameInPlay = false;
                JOptionPane.showMessageDialog(this, "You Killed Him! \nThe word was " + word, "He Ceases to Exist", JOptionPane.ERROR_MESSAGE);
                jbtStart.setText("Retry?");
                jbtStart.setBackground(Color.RED);

            }
            else
            {
                int currentGuess = word.indexOf(guess);
                if (currentGuess == -1)
                {
                    int alreadyGuessed = guesses.indexOf(guess);
                    if (alreadyGuessed == -1)
                    {
                        guesses = guesses + guess + "";
                        System.out.println(alreadyGuessed);
                        System.out.println(guesses);
                        String temp = jlbMissed.getText();
                        jlbMissed.setText(temp + guess + ", ");
                        incorrectGuesses++;
                        leftPanel.hangmanPic.setIcon(leftPanel.image[RightPanel.incorrectGuesses]);
                    }
                    else {}
                }
                else
                {
                    int alreadyGuessed = guesses.indexOf(guess);
                    if (alreadyGuessed == -1)
                    {

                        guesses = guesses + guess + "";
                        jlbWord.setText("Word: " + charWord[currentGuess]);
                    }
                    else{}

                }
            }
        }
        else
            JOptionPane.showMessageDialog(this, "That is not a valid guess!\n Please enter a character from A-Z", "Invalid Guess", JOptionPane.ERROR_MESSAGE);


    }

}


private GridBagConstraints getConstraints(int gridx, int gridy, int gridwidth, int gridheight, int anchor)
{
    GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(5,5,5,5);
    c.ipadx = 0;
    c.ipady = 0;
    c.gridx = gridx;
    c.gridy = gridy;
    c.gridwidth = gridwidth;
    c.gridheight = gridheight;
    c.anchor = anchor;
    return c;
}

class ActionHandler implements ActionListener
  {
public void actionPerformed(ActionEvent e)
{
    Object source = e.getSource();
    if (source == jbtStart)
    {
        if (clockIsRunning == true){}
        else
        {
            if (jbtStart.getText() == "Start")
            {
                btnColor = jbtStart.getBackground();
                clockIsRunning = true;
                MyTimer timer = new MyTimer();
                timer.start();
                gameInPlay = true;
            }
            else if (jbtStart.getText() == "Retry?")
            {
                jbtStart.setText("Start");
                jbtStart.setBackground(btnColor);
                jlbTimer.setText("Time: " + "0:00");
                sec = 0;
                min = 0;
                MyTimer timer = new MyTimer();
                timer.start();
                clockIsRunning = true;
                gameInPlay = true;
                incorrectGuesses = 0;
                guesses = "";
                jlbMissed.setText("Missed: ");
                jlbWord.setText("Word: ");
                leftPanel.hangmanPic.setIcon(leftPanel.image[RightPanel.incorrectGuesses]);
                Random ran = new Random();
                int rand = ran.nextInt(4);
                word = words[rand];
            }
        }
    }
    else if (source == jbtQuit)
    {
        System.exit(0);
    }

}
  }
  class MyTimer extends Thread
  {
public void run()
{
    while(true)
    {
        if(!clockIsRunning)
            break;
        try
        {
            Thread.sleep(1000);
        }
        catch (InterruptedException ecp)
        {
        }

        if (sec == 59)
        {
            min++;
            sec = 0;
        }
        else
            sec++;
        if(sec < 10)
            jlbTimer.setText("Time:" + min+":0"+sec);
        else
            jlbTimer.setText("Time:" + min+":"+sec);
    }
}
  }







}

1 Ответ

2 голосов
/ 05 апреля 2011

Хлоп.

Вы должны реорганизовать свой код и сохранить предположения в TreeSet<Character> структуре данных. Это гарантирует, что каждый символ сохраняется только один раз и что итератор возвращает все сохраненные символы в порядке возрастания.

Отрывок:

 Set<Character> guesses = new HashSet<Character>();

 // add a guess
 guesses.add('e');
 guesses.add('r');
 guesses.add('a');
 guesses.add('e'); // will not be added, already in the set

 // test
 if (guesses.contains('e')) { ... }

 // test if a word is "guessed"
 boolean foundIt = true;
 for (char c:word.toCharArray()) {
    if (!guesses.contains(c)) {
      foundIt = false;
      break;
    }
 }
 // foundIt is true if all chars of word have been guessed

 // print
 for (char c:guesses)
   System.out.print(c);  // prints: aer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...