I have made a basic hangman game on Netbeans, and the way it works is a user clicks one of the 26 buttons (one for each letter of the alphabet) and that letter is tested in the word. The main problem I’m having is getting the letter to be tested.
//array holding all buttons
JButton[] alphabet = {AButton, BButton, CButton, DButton, EButton, FButton, GButton, HButton, IButton, JButton, KButton, LButton, MButton, NButton, OButton, PButton, QButton, RButton, SButton, TButton, UButton, VButton, WButton, XButton, YButton, ZButton};
//getting the current letter(need something in place of the 0)
String currentLetter = (alphabet[0].getLabel());
//replace underscores with letters as they are guessed
for (int i = 0; i < 1; i++) {
secretWord = secretWord + currentLetter.charAt(0);
foundWord = words[randValue].replaceAll("[^" + secretWord + "]", "_ ");
}
I read somewhere that using a button array is what I had to do, so I put it in but it didn’t work. Also, I read that an ActionListener was needed for the program to read what letter it is. Previous tries I have used were:
currentLetter = AButton.getText();
currentLetter = AButton.getLabel();
but sadly to no avail. So keep in mind that I am using Netbeans and I’m new-ish to Java, so no big elaborate hard stuff, keep it simple. Thanks:)
EDIT:
private void AButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void DoButtonActionPerformed(java.awt.event.ActionEvent evt) {
JButton button = (JButton) evt.getSource();
String currentLetter = button.getText();
//replace underscores with letters as they are guessed
for (int i = 0; i < 1; i++) {
secretWord = secretWord + currentLetter.charAt(0);
foundWord = words[0].replaceAll("[^" + secretWord + "]", "_ ");
}
}
Full Code:
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import javax.swing.plaf.FontUIResource;
public class MainFrame extends javax.swing.JFrame {
public MainFrame() {
initComponents();
}
static String secretWord = "";
StringBuilder mainWord = new StringBuilder();
String[] words = {"technology", "computer", "camera", "graphic", "digital", "media", "technician",
"photography", "troubleshoot", "pixels", "application", "download"};
Random r = new Random();
int randValue = r.nextInt(11)+1;
String guessWord = words[0];//words[randValue];
int errors = 0;
public static int wins = 0, losses = 0;
String foundWord = null;
String currentLetter;
private void RestartButtonActionPerformed(java.awt.event.ActionEvent evt) {
//restart game
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
secretWord = "";
foundWord = null;
DirectionsFrame.WinsLabel.setText(null);
DirectionsFrame.LossesLabel.setText(null);
}
private void GetButtonActionPerformed(java.awt.event.ActionEvent evt) {
for (int i = 0; i < guessWord.length(); i++) {
mainWord.append("_ ");
}
String SetMain = mainWord.toString();
mainWord.append(secretWord);
WordLabel.setText(SetMain);
GetButton.setEnabled(false);
AButton.setEnabled(true);BButton.setEnabled(true);CButton.setEnabled (true);DButton.setEnabled(true);EButton.setEnabled(true);
FButton.setEnabled(true);GButton.setEnabled(true);HButton.setEnabled (true);IButton.setEnabled(true);JButton.setEnabled(true);
KButton.setEnabled(true);LButton.setEnabled(true);MButton.setEnabled(true);NButton.setEnabled(true);OButton.setEnabled(true);
PButton.setEnabled(true);QButton.setEnabled(true);RButton.setEnabled(true);SButton.setEnabled(true);TButton.setEnabled(true);
UButton.setEnabled(true);VButton.setEnabled(true);WButton.setEnabled(true);XButton.setEnabled(true);YButton.setEnabled(true);
ZButton.setEnabled(true);
}
private void ExitButtonActionPerformed(java.awt.event.ActionEvent evt) {
// Exit the program
System.exit(0);
}
private void AButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void BButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void CButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void DButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void EButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void FButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void GButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void HButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void IButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void JButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void KButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void LButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void MButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void NButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void OButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void PButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void QButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void RButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void SButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void TButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void UButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void VButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void WButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void XButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void YButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void ZButtonActionPerformed(java.awt.event.ActionEvent evt) {
DoButton.doClick();
}
private void DoButtonActionPerformed(java.awt.event.ActionEvent evt) {
JButton button = (JButton) evt.getSource();
String currentLetter = button.getText();
//replace underscores with letters as they are guessed
do {
for (int i = 0; i < 1; i++) {
secretWord = secretWord + currentLetter.charAt(0);
foundWord = words[0].replaceAll("[^" + secretWord + "]", "_ ");
//if letter isn't in word
if (guessWord.indexOf(currentLetter) == -1) {
JOptionPane.showMessageDialog(null, "Sorry, that wasn't in the word.");
errors++;
if (errors == 1) {
Hangman0.setVisible(false);
}
if (errors == 2) {
Hangman1.setVisible(false);
}
if (errors == 3) {
Hangman2.setVisible(false);
}
if (errors == 4) {
Hangman3.setVisible(false);
}
if (errors == 5) {
Hangman4.setVisible(false);
}
if (errors == 6) {
Hangman5.setVisible(false);
}
if (errors == 7) {
Hangman6.setVisible(false);
}
if (errors == 8) {
Hangman7.setVisible(false);
}
if (errors == 9) {
Hangman8.setVisible(false);
}
if (errors == 10) {
Hangman9.setVisible(false);
JOptionPane.showMessageDialog(null, "You lost! The word was: " + guessWord);
losses++;
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
secretWord = "";
foundWord = null;
String strLosses = Integer.toString(losses);
String strWin = Integer.toString(wins);
DirectionsFrame.WinsLabel.setText(strWin);
DirectionsFrame.LossesLabel.setText(strLosses);
}
}
}
WordLabel.setText(foundWord.toUpperCase());
} while (foundWord == null);
if (foundWord.equalsIgnoreCase(guessWord)) {
JOptionPane.showMessageDialog(null, "Yay!");
wins++;
DirectionsFrame DFrame = new DirectionsFrame();
DFrame.setVisible(true);
setVisible(false);
MainFrame MFrame = new MainFrame();
MFrame.dispose();
secretWord = "";
foundWord = null;
String strWin = Integer.toString(wins);
String strLosses = Integer.toString(losses);
DirectionsFrame.WinsLabel.setText(strWin);
DirectionsFrame.LossesLabel.setText(strLosses);
}
}
Create an action listener:
Then add this action listener to each of the buttons in
alphabet:EDIT I don’t see the implementation of
initComponents()in your updated code. Regardless, adding an action listener to each button is something that needs to be done only once. here’s how I would start implementinginitComponents():Please simplify your code by using more arrays! I certainly would not have a separate variable for each letter button or 26 separate methods to deal separately with each letter click.