【问题标题】:How can I fill in letters to blank space in Hangman Game if word contains letter? [closed]如果单词包含字母,如何在Hangman Game中的空白处填写字母? [关闭]
【发布时间】:2013-12-23 21:38:53
【问题描述】:

我正在制作一个刽子手游戏,如果单词包含字母,我如何将字母填充到正确的空白处,我感到很困惑。例如:

单词:你好

空格:_ _ _ _ _

用户输入:e

空格:_ e _ _ _

这是我所有的代码,它不是 SSCCE,但我已将图片与这篇文章一起上传。如果您有任何建议,请说。谢谢。

    package Game;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.*;

class GameStructure {
    private String []wordList = {"javatar","java","activity","alaska","appearance","article",
            "automobile","basket","birthday","canada","central","character","chicken","chosen",
            "cutting","daily","darkness","diagram","disappear","driving","effort","establish","exact",
            "establishment","fifteen","football","foreign","frequently","frighten","function","gradually",
            "hurried","identity","importance","impossible","invented","italian","journey","lincoln",
            "london","massage","minerals","outer","paint","particles","personal","physical","progress",
            "quarter","recognise","replace","rhythm","situation","slightly","steady","stepped",
            "strike","successful","sudden","terrible","traffic","unusual","volume","yesterday"};
   private JTextField tf;
   private JLabel jl2;
   static String letter;
   static int []length = new int[64];

   public void window() {
       JMenuBar menuBar = new JMenuBar();
       JMenu menu = new JMenu("File");
       menu.setMnemonic(KeyEvent.VK_A);
       menuBar.add(menu);
       JMenuItem menuItem = new JMenuItem("Developer", KeyEvent.VK_T);
    menu.add(menuItem);
    JMenuItem menuItem2 = new JMenuItem("Instructions", KeyEvent.VK_T);
    menu.add(menuItem2);
    JMenuItem menuItem3 = new JMenuItem("Restart", KeyEvent.VK_T);
    menu.add(menuItem3);
    JMenuItem menuItem4 = new JMenuItem("Exit", KeyEvent.VK_T);
    menu.add(menuItem4);

       ImageIcon ic = new ImageIcon("hangman2.png");
      JFrame gameFrame = new JFrame();
      JPanel bottomRight = new JPanel();
      JPanel bottomLeft = new JPanel();
      JPanel top = new JPanel();
      JPanel bottom = new JPanel();
      JPanel imgPane = new JPanel();
      JPanel panel1 = new JPanel();
      bottom.setLayout(new BoxLayout(bottom, BoxLayout.X_AXIS));
      imgPane.setLayout(new BorderLayout());
      panel1.setLayout(new BorderLayout());
      panel1.setOpaque(false);//!!
      top.setBorder(BorderFactory.createTitledBorder(""));
      bottom.setBorder(BorderFactory.createTitledBorder(""));
      tf = new JTextField(1);
      JLabel img = new JLabel(ic, JLabel.CENTER);
      JLabel jl = new JLabel("Enter a letter", JLabel.CENTER);
      jl2 = new JLabel("Letters used:  ", JLabel.CENTER);
      JLabel jl3 = new JLabel("__ ", JLabel.CENTER);
      jl.setFont(new Font("Rockwell", Font.PLAIN, 20));
      tf.setFont(new Font("Rockwell", Font.PLAIN, 20));
      jl2.setFont(new Font("Rockwell", Font.PLAIN, 20));
      imgPane.add(img);//center
      top.add(jl);//top center
      top.add(tf);//top center
      bottomLeft.add(jl2);//bottom left position
      bottomRight.add(jl3);//bottom right position
      bottom.add(bottomLeft);//bottom
      bottom.add(bottomRight);//bottom
      panel1.add(imgPane, BorderLayout.CENTER);//background image (center)
      panel1.add(top, BorderLayout.NORTH);//text field and jlabel (top)
      panel1.add(bottom, BorderLayout.SOUTH);// blank spaces and letters used (bottom)
      gameFrame.setJMenuBar(menuBar);
      gameFrame.setTitle("Hangman");
      gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      gameFrame.setIconImage(
      new ImageIcon("hangmanIcon.png").getImage());
      gameFrame.setResizable(false);
      gameFrame.add(panel1);
      gameFrame.setSize(800, 500);
      gameFrame.setLocationRelativeTo(null);
      gameFrame.setVisible(true);

          int j = 0;
          for(j = 0; j<64; j++) {
             length[j] = wordList[j].length();//gets length of words in wordList
          }//end for
          int l = 0;
          String line = "";
          //create line first then put into .setText
          for(int m = 0; m<length[l]; m++) {
              line += "__ ";
              l++;
          }//end for
          jl3.setText(line);


          tf.addActionListener(new ActionListener() {
          @Override
          public void actionPerformed(ActionEvent e) {//when enter key pressed
              JTextField tf = (JTextField)e.getSource();
             letter = tf.getText();
              jl2.setText(jl2.getText() + letter + " ");//sets jlabel text to users entered letter

              int k = 0;
              for(k = 0; k<64;){
                  if(wordList[k].contains(letter)){
                      System.out.println(letter);
                     break;
                  }else{
                      System.out.println("letter not in word");
                      break;
                  }
              }

              }//end actionPerformed method
          });
      }//end window method
   }

public class GameMain {
   public static void main(String[] args) {
      GameStructure game = new GameStructure();
      game.window();
   }
}

【问题讨论】:

  • 你现在得到的输出是什么?
  • @mico 目前我能够识别该单词是否包含用户输入的字母,但这一切都输出到控制台。现在我正试图弄清楚如何将用户输入的字母填写到 JLabel 上的适当空白处
  • Sibbo 比我快,你已经对答案提出了有希望的建议..
  • 这款游戏如何运作?如果我按字母“k”,你会在 wordList 中的每个单词中搜索该字母吗?
  • 正常的刽子手游戏中,他只有一个字。所以我假设他正在从该列表中抓取一个随机单词。

标签: java jframe jlabel jtextfield


【解决方案1】:

好吧,您可以使用getText() 获取JLabel 的文本,然后编辑String,然后使用setText(String) 应用结果。

您只需要计算应该插入字母的正确位置。

char[] jlabelText = yourJLabel.getText().toCharArray();

for (int i = 0; i < word.length(); i++) {
    if (word.charAt(i) == userEnteredChar) {
        jlabelText[3 * i] = ' ';
        jlabelText[3 * i + 1] = userEnteredChar;
    }
}

yourJLabel.setText(String.valueOf(jlabelText));

【讨论】:

  • 我在计算用户输入的字母在空白处的正确位置时遇到了困难。我已经弄清楚了如何识别输入的字母是否在单词中。
  • 使用 .indexOf 计算单词中的字母位置然后根据它插入是个好主意吗?
  • 不,如果这封信出现不止一次,那将不起作用。我的答案包含替换正确字符以在正确位置显示字母的代码。
  • 我对你的变量感到困惑,能否请你使用我的变量以便我更好地理解代码?
  • 对不起,我不知道你的变量是什么意思。 yourJLabel 是在开头显示 _ _ 的 JLabel。 userEnteredChar 是用户输入的字符。
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
相关资源
最近更新 更多