Апплет не работает: Stanford Engineering Everywhere Hangman - PullRequest
0 голосов
/ 16 июня 2011

Я написал работу над Java-апплетом, который, кажется, открывает sun.applet.AppletViewer, когда он работает. Я использую библиотеки acm для назначения Стэнфордского проекта Everywhere Hangman. У меня проблема, похоже, не с кодом, если только я не выполнил какую-то реализацию, которую я должен был сделать. В основном Applet Viewer висит просто говоря «запуск апплета ...» и программа не запущена. Я не сталкивался с этой проблемой раньше, поэтому я решил спросить здесь, если кто-то сталкивался с такой проблемой раньше. Я предполагаю, что это может быть случай исключения по умолчанию, который генерируется, но я не получаю сообщение об ошибке, поэтому я сомневаюсь в этом.

Я думаю, что код должен работать, но я опубликую его на тот случай, если что-то упущено. Я не совсем закончил это задание, но уверен, что это сработает, если у меня не возникнет этой проблемы.

Hangman.java

import acm.graphics.*;
import acm.program.*;
import acm.util.*;

import java.awt.*;
import java.io.*;


public class Hangman extends ConsoleProgram {

//private static final int NUM_GUESSES=8;

/*new instance of HangmanLexicon.java */

private HangmanLexicon hangLex; 

private HangmanCanvas canvas;

/*new random generator to get indexes of words in hangLex*/
//private RandomGenerator rgen = RandomGenerator.getInstance();

/*Stores word  that use is trying to guess*/
private String hidden="";

/*Displayed version of hidden*/
private String displayHidden = "";

/*prompt for player to enter their guess, which gets stored
 * as a string*/
private String guess = readLine("Your guess: ");

/*counts down until user has no more guesses*/
private int guessCounter = 8;

private String repeat = readLine("Play again? (y or n): ");

public void init() {
    canvas = new HangmanCanvas();
    add(canvas);
}

/*Runs through program, acts as main*/
public void run() {
    /* You fill this in */


    println("Welcome to the Hangman program!");
    while(true) {
        setUpWord();
        displayWord();
        guessesLeft();
        guess = readLine("Your guess: ");
        println(guess);
        checkGuess();
        if(displayHidden.equals(hidden)) {
            println("You guessed the word: " + hidden);
            println("You win.");
            println(repeat);
            if(!repeat.equals("n")) {
                guessCounter=8;
                canvas.reset();
            }else {
                break;
            }
        } else if (guessCounter==0) {
            println("The word was: " + hidden); 
            println("You lose.");
            println(repeat);
            if(!repeat.equals("n")) {
                guessCounter=8;
                canvas.reset();
            }else {
                break;
            }
        }
    }

}



/*sets hidden to a random word in hangLex*/
private void setUpWord() {
    hangLex = new HangmanLexicon();
    hidden=hidden.concat(hangLex.getWord(8));
}

/*Prints the updated version of the known word after a guess is entered*/
private void displayWord() {
    if (displayHidden.equals("")) {
        for (int i= 0; i<hidden.length(); i++) {
            displayHidden = displayHidden.concat("-");
        }
        println("The word now looks like this: " + displayHidden);
    } else if(guessCounter==0) {

    } else {
        println("The word now looks like this: " + displayHidden);

    }
}


/*prints updates on the number of guesses the user has left to console*/
private void guessesLeft() {
    if (guessCounter > 1) {
        println("You have " + guessCounter + " guesses left.");
    } else if (guessCounter == 1) {
        println("You have only one guess left.");
    } else if (guessCounter == 0) {
        println("You're completely hung.");
    }
}


private void checkGuess() {
    int letterCounter =0;
    while (guess.length()>1) {
        println("Guesses must be single characters.");
        println(guess);
    }
    char checkLetter = guess.charAt(0);
    guessCounter--;

    //
    if(Character.isLowerCase(checkLetter)) {
        Character.toUpperCase(checkLetter);
    }

    //
    for(int i=0; i<hidden.length(); i++) {
        if(hidden.charAt(i) == checkLetter) {
            displayHidden = displayHidden.substring(0, i) + guess + 
                                        displayHidden.substring(i+1);
        } else {
            letterCounter++;
        }
    }

    //
    if (letterCounter==hidden.length()) {
        println("There are no " + checkLetter + "'s in the word.");
    } else if (letterCounter!=hidden.length()) {
        println("That guess is correct.");
    }

}
}

HangmanLexicon.java

import acm.util.*;

public class HangmanLexicon {


/** Returns the number of words in the lexicon. */
public int getWordCount() {
    return 10;
}

/** Returns the word at the specified index. */
public String getWord(int index) {
    switch (index) {
        case 0: return "BUOY";
        case 1: return "COMPUTER";
        case 2: return "CONNOISSEUR";
        case 3: return "DEHYDRATE";
        case 4: return "FUZZY";
        case 5: return "HUBBUB";
        case 6: return "KEYHOLE";
        case 7: return "QUAGMIRE";
        case 8: return "SLITHER";
        case 9: return "ZIRCON";
        default: throw new ErrorException("getWord: Illegal index");
    }
};
 }

Я еще не закончил с другим файлом, но я не думаю, что это должно вызывать беспокойство, пока я не разберусь с апплетами.

1 Ответ

0 голосов
/ 16 июня 2011

Nevermind.Я понял проблему.Я должен был делать это в методе run.

guess = readLine("Your guess: ");

Это была действительно глупая ошибка с моей стороны.лол.Я думал, что уже попробовал это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...