bnuzitc吧 关注:7贴子:117
  • 9回复贴,共1

HangMan非常经典的小游戏。

只看楼主收藏回复

就是一个人想好单词,然后画出空位,接着让人猜,才对一个字母,就在相应的位置写上,猜错的话,就画上吊的小人。



来自百度输入法1楼2013-06-13 00:24回复

    小人的手脚是会上下摆动的,计算角度用计时器即可。


    来自百度输入法2楼2013-06-13 00:26
    回复
      程序有不少bug,比如结束不能重新玩,如果重复输入正确的字母,也会赢的。
      公布一下源代码吧,200多行。自己写的。望大神勿喷。


      3楼2013-06-13 00:27
      回复
        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);
        }}


        4楼2013-06-13 00:27
        回复

          我只是想show一下,手脚一直在动的。。。。。。。


          来自百度输入法5楼2013-06-13 00:30
          回复


            6楼2013-06-21 17:17
            回复


              7楼2013-07-08 16:30
              收起回复
                简单讲一下工作原理,先用一组字符串记录要猜的单词,然后找一组字符串和上面的对应,用户输入一个字母,就会在第一串字符串中寻找,如果找到,在对应的第二串字符串中改为1,否则为0.再设第三组字符串,做个判断,如果第二组字符串对应的位置为1,显示字母,否则为星号。


                8楼2013-07-08 22:35
                回复
                  您好,这个hangman游戏,您有游戏的教学
                  PPT吗


                  9楼2016-09-18 16:59
                  回复