Hi, I've decided to make a hangman game. I made this in Python last year, however I'm a little bit stick in Java, since I'm quite new to as well as Swing.
Anyway, the problem I'm having is that my while loop keeps terminating if I enter 1 incorrect letter, but it is fine if I keep entering the letters which are in the chosen word.
I think i've made drawing the line a bit too complicated but it's seem to be working fine.
import java.awt.*;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
/** class to display a JFrame object using border layout */
public class HangmanJFrame extends JFrame implements ActionListener {
private JPanel centerPanel;
private JPanel southPanel;
private JTextField textField;
private LinePanel line;
private String [] wordList = {"computer","java"}; // word list
private ArrayList<String> usedLetter = new ArrayList(); // list of used letter by user
private ArrayList<String> correctGuesses; // list of users correct guesses
private int numLives = 6; // number of lives
public String theWord; // the wrong which is chosen
private String userInput = "";
// no-argument constructor
public HangmanJFrame() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
theWord = pickWord();
correctGuesses = new ArrayList(theWord.length());
setSize(600,500);
setLocation(100, 100);
setTitle("Hangman Game");
setLayout(new BorderLayout());
centerPanel = new JPanel();
line = new LinePanel(0,theWord);
centerPanel.setSize(500,500);
centerPanel.setBackground(Color.PINK);
centerPanel.add(line);
add(centerPanel, BorderLayout.CENTER);
textField = new JTextField(20);
textField.addActionListener(this);
southPanel = new JPanel();
southPanel.setBackground(Color.CYAN);
southPanel.add(textField);
add(southPanel, BorderLayout.SOUTH);
}
// Picks a word, latter it will be picked randomly.
private String pickWord(){
return wordList[0];
}
// This method check wither the input is valid
// i.e. its in the alphabet.
private boolean checkInput(String s){
String [] alphabet = {"a","b","c","d","e","f",
"g","h","i","j","k","l","m","n","o","p",
"q","r","s","t","u","v","w","x","y","z"};
for (int i = 0; i < alphabet.length; i++){
if (s.equals(alphabet[i]) && s.length() <= 1){
return true;
}
}
return false;
}
/**
*
*/
public void Play(){
while (numLives > 0){
boolean isValid = checkInput(userInput);
//System.out.println(usedLetter.contains(usedLetter));
if (isValid == true && theWord.contains(userInput) &&
usedLetter.contains(usedLetter) == false){
usedLetter.add(userInput); // Add the letter to used list
// add the guessed letter to the window
}
else if (userInput.length() > 0){
numLives = numLives - 1;
}
System.out.println(numLives);
}
// int x = 1;
// centerPanel.remove(line);
// LinePanel line2 = new LinePanel(x,theWord);
//
// //centerPanel.setSize(500,500);
// centerPanel.setBackground(Color.GREEN);
// centerPanel.add(line2);
// add(centerPanel, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent evt) {
String temp = textField.getText();
if (temp.length() > 0){
userInput = temp;
}
textField.selectAll();
}
}
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Line2D;
import javax.swing.JPanel;
public class LinePanel extends JPanel {
int x;
String temp = "";
String theWord = "";
public LinePanel(int x, String t) {
super();
setPreferredSize(new Dimension(300,350));
setBackground(Color.BLUE);
this.x = x;
this.temp = t;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
//Line2D line = new Line2D.Double(5, 5, 350, 5);
if (x == 0 || x != 0){
Line2D line = new Line2D.Double(0, 250, 80, 250); // Creates base
Line2D line2 = new Line2D.Double(40, 50, 40, 250); // Creates vertical line
Line2D line3 = new Line2D.Double(40, 50, 150, 50); // Creates horizontal line
Line2D line4 = new Line2D.Double(150, 50, 150, 80); // Creates small line to hang the man
g2.setStroke(new BasicStroke(5.0f)); // Line thickness
g2.setColor(Color.BLACK); // Line colour
//draw shape of line
g2.draw(line);
g2.draw(line2);
g2.draw(line3);
g2.draw(line4);
theWord = temp;
int x1 = 0; int y = 320;
for (int i = 0; i < temp.length();i++){
g2.drawLine(x1, y, x1 + 15, y);
x1 += 40;
}
}
// head
if (x == 6){
g2.setStroke(new BasicStroke(5.0f));
g2.drawOval(135, 85, 35, 35);
}
// body
if (x == 5){
g2.drawLine(150, 120, 150, 190);
}
// left arm
if (x == 4){
g2.drawLine(150, 140, 125, 155);
}
// right arm
if (x == 3){
g2.drawLine(150, 140, 175, 155);
}
// left leg and foot
if (x == 2){
g2.drawLine(150, 190, 125, 200); // leg
g2.drawLine(125, 200, 120, 190); // foot
}
// right leg and foot
if (x == 1){
g2.drawLine(150, 190, 175, 200); // leg
g2.drawLine(175, 200, 180, 190); // foot
}
if (x == 10){
int x1 = 3; int y = 317;
for (int i = 0; i < theWord.length() ;i++){
g2.setColor(Color.ORANGE);
g2.drawString("hi", x1, y);
x1 += 40;
}
}
}
}
public class PlayHangman {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HangmanJFrame window = new HangmanJFrame();
window.setVisible(true);
window.Play();
//ProcessHangman theMan = new ProcessHangman();
}
}