HANGMAN GAME

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

public class Main extends JFrame {
private static final String[] WORDS = {"HELLO", "WORLD", "COMPUTER", "JAVA", "PROGRAMMING", "ECLIPSE"};
private static final int MAX_TRIES = 6;

private String wordToGuess;
private char[] guessedLetters;
private int triesLeft;

private JLabel wordLabel;
private JLabel triesLabel;
private JTextField letterInput;
private JButton guessButton;

public Main() {
setTitle("Hangman Game");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null); // Center window on screen

// Initialize game state
wordToGuess = selectWord();
guessedLetters = new char[wordToGuess.length()];
triesLeft = MAX_TRIES;

// Set up components
setupUI();

// Start the game
updateWordLabel();
}

private void setupUI() {
JPanel mainPanel = new JPanel(new BorderLayout());
mainPanel.setBackground(Color.PINK);
mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));

// Create a panel for the title and tries label
JPanel topPanel = new JPanel(new GridLayout(2, 1));
topPanel.setBackground(Color.PINK);
topPanel.setBorder(BorderFactory.createEmptyBorder(20, 0, 20, 0));

// Game title label
JLabel titleLabel = new JLabel("Hangman Game");
titleLabel.setFont(new Font("Arial", Font.BOLD, 20));
titleLabel.setHorizontalAlignment(SwingConstants.CENTER);
topPanel.add(titleLabel);

// Tries left label
triesLabel = new JLabel("Tries left: " + triesLeft);
triesLabel.setHorizontalAlignment(SwingConstants.CENTER);
topPanel.add(triesLabel);

mainPanel.add(topPanel, BorderLayout.NORTH);

// Word to guess label
wordLabel = new JLabel();
wordLabel.setFont(new Font("Arial", Font.PLAIN, 24));
wordLabel.setHorizontalAlignment(SwingConstants.CENTER);
wordLabel.setBorder(BorderFactory.createEmptyBorder(20, 0, 20, 0));
mainPanel.add(wordLabel, BorderLayout.CENTER);

// Input panel
JPanel inputPanel = new JPanel(new FlowLayout());
inputPanel.setBackground(Color.PINK);
inputPanel.setBorder(BorderFactory.createEmptyBorder(20, 0, 20, 0));

JLabel letterInputLabel = new JLabel("Enter a letter:");
inputPanel.add(letterInputLabel);

letterInput = new JTextField(5);
inputPanel.add(letterInput);

// Add action listener for the Enter key
letterInput.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
handleGuess();
}
});

guessButton = new JButton("Guess");
guessButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
handleGuess();
}
});
inputPanel.add(guessButton);

mainPanel.add(inputPanel, BorderLayout.SOUTH);

// Add main panel to frame
add(mainPanel);
}

private void updateWordLabel() {
StringBuilder display = new StringBuilder();
for (char c : guessedLetters) {
if (c == 0) {
display.append("_ ");
} else {
display.append(c).append(" ");
}
}
wordLabel.setText(display.toString());
}

private String selectWord() {
return WORDS[new Random().nextInt(WORDS.length)];
}

private void handleGuess() {
String input = letterInput.getText().toUpperCase();
if (input.length() != 1 || !Character.isLetter(input.charAt(0))) {
JOptionPane.showMessageDialog(this, "Please enter a single letter.");
return;
}

char guess = input.charAt(0);
boolean found = false;
for (int i = 0; i < wordToGuess.length(); i++) {
if (wordToGuess.charAt(i) == guess) {
guessedLetters[i] = guess;
found = true;
}
}

if (!found) {
triesLeft--;
if (triesLeft == 0) {
gameOver(false);
return;
}
}

updateWordLabel();
triesLabel.setText("Tries left: " + triesLeft);

if (isGuessed()) {
gameOver(true);
}

letterInput.setText(""); // Clear input field
}

private boolean isGuessed() {
for (char c : guessedLetters) {
if (c == 0) {
return false;
}
}
return true;
}

private void gameOver(boolean won) {
if (won) {
JOptionPane.showMessageDialog(this, "Congratulations! You guessed the word: " + wordToGuess);
} else {
JOptionPane.showMessageDialog(this, "Out of tries! The word was: " + wordToGuess);
}
resetGame();
}

private void resetGame() {
wordToGuess = selectWord();
guessedLetters = new char[wordToGuess.length()];
triesLeft = MAX_TRIES;
updateWordLabel();
triesLabel.setText("Tries left: " + triesLeft);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new Main().setVisible(true);
}
});
}
}

Comments

Popular posts from this blog

JAVA Lab Programs

WD 22. StylingLinks&Buttons