Top >C言語、Java 練習プログラム集

7. ハングマン

■ Java による作成例

import java.io.*;
import java.util.*;

class Hangman
{
    private String  Answer;     // 正解の単語
    private boolean Correct[];  // 解答状況
    private String  Alphabet;   // 未使用文字
    private int     Mistake;    // 誤答数

    /**
    * コンストラクタ
    */

    public Hangman()
    {
        String  aAnswerWord[] = {
            "TIGER""CAT""DOG""LION""FOX",
            "WOLF""HORSE""COW""GOAT""ZEBRA",
            "ELEPHANT""PENGUIN""GIRAFFE""ANTEATER" };

        // 正解の単語を選択します /////////////////////
        Random RandObj = new Random();  // 乱数オブジェクト

        int n = RandObj.nextInt(aAnswerWord.length);
        Answer = aAnswerWord[n];

        Correct = new boolean[Answer.length()];

        for (int i = 0;i < Answer.length(); i++)
            Correct[i] = false;

        Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Mistake = 0;
    }

    /**
    * 解答のチェック
    *
    * @param ch 入力文字
    */

    public void checkAnswer(char ch)
    {
        boolean bMatch = false;

        // 正解文字をチェック /////////////////////////
        for (int i = 0; i < Answer.length() ; i++)
        {
            if (Answer.charAt(i) == ch)
            {
                Correct[i] = true;
                bMatch = true;
            }
        }

        // 使用した文字を空白に ///////////////////////
        Alphabet = Alphabet.replace(ch, ' ');

        if (bMatch == false)
            Mistake++;    // 不正解の場合
    }

    /**
    * 終了のチェック
    * @return trueの場合、終了
    */

    public boolean checkFinish()
    {
        boolean bCorrect = true;

        for (int i = 0;i < Answer.length(); i++)
        {
            if (Correct[i] == false)
                bCorrect = false;
        }

        if (bCorrect)
        {
            // 正解した場合
            showHangman(-1);
            System.out.print(Answer + "\n");
            return true;
        }
        else if (Mistake == 6)
        {
            // 6回、間違えた場合
            showHangman(Mistake);
            System.out.print(Answer + "\n");
            return true;
        }

        return false;
    }

    /**
    * ハングマンの表示
    *
    * @param mistake 誤答数
    */

    private void showHangman(int mistake)
    {
        System.out.print(" +-----+\n");
        System.out.print(" |     |\n");

        if (mistake == 0)
        {
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print("/|\n");
        }
        else if (mistake == 1)
        {
            System.out.print(" |   (+_+;\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print("/|\n");
        }
        else if (mistake == 2)
        {
            System.out.print(" |   (+_+;\n");
            System.out.print(" |    |Y|\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print("/|\n");
        }
        else if (mistake == 3)
        {
            System.out.print(" |   (+_+;\n");
            System.out.print(" | o/|Y|\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print("/|\n");
        }
        else if (mistake == 4)
        {
            System.out.print(" |   (+_+;\n");
            System.out.print(" | o/|Y|\o\n");
            System.out.print(" |\n");
            System.out.print(" |\n");
            System.out.print("/|\n");
        }
        else if (mistake == 5)
        {
            System.out.print(" |   (+_+;\n");
            System.out.print(" | o/|Y|\o\n");
            System.out.print(" |   /\n");
            System.out.print(" | ~~\n");
            System.out.print("/|\n");
        }
        else if (mistake == 6)
        {
            System.out.print(" |   (@_@;\n");
            System.out.print(" | o/|Y|\o\n");
            System.out.print(" |   / \\n");
            System.out.print(" | ~~    ~~\n");
            System.out.print("/|\n");
        }
        else
        {
            System.out.print(" |\n");
            System.out.print(" |   (^_^)\n");
            System.out.print(" | o/|Y|\o\n");
            System.out.print(" |   / \\n");
            System.out.print("/| ~~    ~~\n");
        }
    }

    /**
    * 現在状態の表示
    */

    public void showState()
    {
        showHangman(Mistake);

        System.out.print(Alphabet + "\n");

        for (int i = 0; i < Answer.length(); i++)
        {
            if (Correct[i] == false)
                System.out.print("_ ");
            else
                System.out.print(
                        Answer.substring(i, i + 1) + " ");
        }

        System.out.print("\n");
    }

    /**
    * 解答文字の入力
    *
    * @param br BufferdReader
    */

    public char inputAnswer(BufferedReader br) throws IOException
    {
        for (;;)
        {
            System.out.print("? ");
            String  in = br.readLine().toUpperCase();

            if (in.length() > 0)
                return in.charAt(0);
        }
    }
}

class Program07
{
    /**
    * main
    */

    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(
                                new InputStreamReader(System.in));

        System.out.print("--- HANGMAN ---\n\n");

        int reply;

        do{
            Hangman     game = new Hangman();

            for (;;){
                // 現在の状態を表示
                game.showState();

                // 文字を入力
                char    ch = game.inputAnswer(br);

                // 合っている文字をチェック
                game.checkAnswer(ch);

                if (game.checkFinish())
                    break;
            }

            System.out.print("AGAIN (1=YES; 0=NO!)?");
            reply = Integer.parseInt( br.readLine() );
        }while( reply != 0 );
    }
}
AKABAS
NEZEN