import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import java.sql.Time;
import javax.swing.*;
public class Man extends JFrame implements ActionListener {JPanel p1 = new JPanel();JPanel p2 = new JPanel();TextField word = new TextField(15);TextField letter = new TextField(5);
char[] correct = new char[15];char[] letters = new char[15];
JButton start = new JButton("Start 游戏");JButton input = new JButton("你确定吗?");JButton restart = new JButton("请点击右上角的红色叉叉");
int place = -1;int wrong = 0;int right = 0;
public Man() {setLayout(new BorderLayout());add(new HangMan(this), BorderLayout.CENTER);word.setEchoChar('*');// p1.add(label);p2.add(word);p2.add(start);p2.add(letter);p2.add(input);p2.add(restart);letter.setVisible(false);input.setVisible(false);restart.setVisible(false);add(p2, BorderLayout.SOUTH);start.addActionListener(this);word.addActionListener(this);letter.addActionListener(this);input.addActionListener(this);restart.addActionListener(this);
// System.out.println(input);
}
public static void main(String[] args) {Man jframe = new Man();jframe.setTitle("Hang Man");jframe.setSize(420, 280);jframe.setLocationRelativeTo(null);jframe.setVisible(true);jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}
public void actionPerformed(ActionEvent e) {while (letter.getText().length() >= 2) {JOptionPane.showMessageDialog(null, "每次只能输入一个字母!");letter.setText("");}String string1 = word.getText();String string2 = letter.getText();
if (e.getSource() == start || e.getSource() == word) {// System.out.println(string1);start.setVisible(false);word.setVisible(false);letter.setVisible(true);input.setVisible(true);} else {char[] char1 = string1.toCharArray();char[] char2 = string2.toCharArray();// System.out.println(char2);// System.out.println(char1);for (int i = 0; i < string1.length(); i++) {if (char1[i] == char2[0]) {place = i + 1;right++;letters[i] = 1;correct[i] = char1[i];// System.out.println(place);// repaint();}
}// System.out.println(string2);string2 = "";letter.setText(string2);// System.out.println(string2);
if (place == 0)wrong++;if (wrong == 4 || right == string1.length()) {letter.setVisible(false);input.setVisible(false);restart.setVisible(true);
}place = 0;
}}}
class HangMan extends JPanel {private int xbody = 150;private int ybody = 100;private int xhead = xbody - 15;private int yhead = ybody - 30;private int xhand = xbody;private int yhand = ybody + 15;private int lhand = 30;private int xfeet = xbody;private int yfeet = ybody + 35;private int lfeet = 45;private double a = Math.PI / 4;private double b = 0;private double delta1 = Math.PI / 50;private double delta2 = Math.PI / 50;private int xline = 230;private int yline = 180;private Man man;
private Timer time = new Timer(10, new ActionListener() {public void actionPerformed(ActionEvent e) {a += delta1;b += delta2;if (a > 3 * Math.PI / 4 || a < Math.PI / 4)delta1 = -delta1;if (b > 2 * Math.PI / 7 || b < 0)delta2 = -delta2;repaint();}});
public HangMan(Man man) {this.man = man;time.start();
}
protected void paintComponent(Graphics g) {super.paintComponent(g);FontMetrics fm = g.getFontMetrics();g.drawLine(40, 200, 120, 200);g.drawLine(85, 200, 85, 40);g.drawLine(85, 40, 150, 40);g.drawLine(150, 40, 150, 70);
if (man.wrong == 0) {
}if (man.wrong == 1) {// headg.drawOval(xhead, yhead, 30, 30);
}if (man.wrong == 2) {// headg.drawOval(xhead, yhead, 30, 30);// bodyg.drawLine(xbody, ybody, xbody, ybody + 35);
}if (man.wrong == 3) {// headg.drawOval(xhead, yhead, 30, 30);// bodyg.drawLine(xbody, ybody, xbody, ybody + 35);// handg.drawLine(xhand, yhand, (int) (xhand - lhand * Math.sin(a)),(int) (yhand + lhand * Math.cos(a)));g.drawLine(xhand, yhand,(int) (xhand + lhand * Math.sin(a + Math.PI / 50)),(int) (yhand + lhand * Math.cos(a + Math.PI / 10)));
}if (man.wrong == 4) {// headg.drawOval(xhead, yhead, 30, 30);// bodyg.drawLine(xbody, ybody, xbody, ybody + 35);// handg.drawLine(xhand, yhand, (int) (xhand - lhand * Math.sin(a)),(int) (yhand + lhand * Math.cos(a)));g.drawLine(xhand, yhand,(int) (xhand + lhand * Math.sin(a + Math.PI / 50)),(int) (yhand + lhand * Math.cos(a + Math.PI / 10)));// feetg.drawLine(xfeet, yfeet, (int) (xfeet - lfeet * Math.sin(b)),(int) (yfeet + lfeet * Math.cos(b)));g.drawLine(xfeet, yfeet, (int) (xfeet + lfeet * Math.sin(b)),(int) (yfeet + lfeet * Math.cos(b)));g.setFont(new Font("Romans", Font.BOLD, 20));g.drawString("Game Over!", 250, 100);g.drawString("The word is “" + man.word.getText() + "”", 220, 130);
}if (man.right == man.word.getText().length() && man.right >= 1) {g.setFont(new Font("Romans", Font.BOLD, 20));g.drawString("Congratulations!", 220, 100);g.drawString("you guess right!", 220, 130);
}xline = 230;
for (int i = 0; i < man.word.getText().length(); i++) {if (man.letters[i] == 1)g.drawChars(man.correct, i, 1, xline, yline - 5);else if (man.letters[i] == 0)g.drawString("*", xline, yline - 5);xline += 20;}
g.drawLine(210, yline, 380, yline);
}}