2011-05-11 53 views
-1

我需要按字母顺序排序我的字母。我知道我需要使用array.sort,但我不知道如何。我还需要做到这一点,以便程序在比赛结束后询问你是否想再次参加比赛,并试图使其工作,但我似乎无法做到。请帮忙。谢谢帮忙与hang子手排序

import java.io.BufferedReader; 
import java.util.Arrays; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Random; 


public class DRMproject2 
{ 

    public static void main(String[] args) 
    { 
     HangmanSession hangmanSession = new HangmanSession(); 
     hangmanSession.play(); 
    } 
} 

class HangmanSession 
{ 
    private Player player; 
    private Words secretWord; 
    private LetterBox letterBox; 
    private int wrongGuessCount = 6; 


    public HangmanSession() 
    { 
     player = new Player(); 
     player.askName(); 
     secretWord = new Words(); 
     letterBox = new LetterBox(); 
    } 

    private void printState() 
    { 
     letterBox.print(); 
     System.out.print("Hidden word : "); 
     secretWord.print(); 
     System.out.print("Tries left: " + wrongGuessCount + "\nguess letter: "); 
    } 

    public void play() 
    { 
     boolean bool = true; 
     while(true) 
     { 
      bool = true; 
      printState(); 
      char ch = player.guess(); 
      if(letterBox.contains(ch)) { 
       System.out.println("Try again, you've already used the letter " + ch); 
       bool = false; 
      } 
      if(bool) 
      { 
       if(secretWord.guess(ch)) 
       { 
        System.out.println("You have found the letter " + ch); 
       } 
       else { 
        wrongGuessCount--; 
       } 
       if(wrongGuessCount < 1) 
        lose(); 
       if(secretWord.found()) 
        win(); 
      } 
     } 
    } 

    public void win() 
    { 
     System.out.println("Congratulations " + player + ", you win!"); 
     System.exit(0); 
    } 

    public void lose() 
    { 
     System.out.println("Sorry " + player + ", you lose. Better luck next time!"); 
     System.exit(0); 
    } 

} 

class Words 
{ 
    private String fv; 
    private StringBuffer pv; 
    private int found = 0; 
    { 
     String Words[] = new String[23]; 

     Words[0] = "carbon"; 
     Words[1] = "dictionary"; 
     Words[2] = "restaurant"; 
     Words[3] = "television"; 
     Words[4] = "responsible"; 
     Words[5] = "technology"; 
     Words[6] = "computer"; 
     Words[7] = "communicate"; 
     Words[8] = "automobile"; 
     Words[9] = "coffee"; 
     Words[10] = "federation"; 
     Words[11] = "exaggerate"; 
     Words[12] = "cappuccino"; 
     Words[13] = "macintosh"; 
     Words[14] = "apple"; 
     Words[15] = "microsoft"; 
     Words[16] = "lighter"; 
     Words[17] = "shark"; 
     Words[18] = "bunker"; 
     Words[19] = "argument"; 
     Words[20] = "playstation"; 
     Words[21] = "parrot"; 
     Words[22] = "canine"; 

     Random random = new Random(); 
     int randomWord = random.nextInt(22); 
     String[] displayLetters = new String[Words[randomWord].length()]; 
     fv = Words[randomWord]; 
     pv = new StringBuffer(fv.length()); 
     for (int i = 0; i < displayLetters.length; i++) 
     { 
      displayLetters[i] = "_"; 
      pv.append('_'); 
     } 

    } 

    public boolean found() 
    { 
     System.out.println("Letters found:" + found + "/" + fv.length()); 
     return (found == fv.length()); 
    } 

    public boolean guess(char c) 
    { 
     int index = fv.indexOf(c); 
     if(index == -1) 
      return false; 
     else { 
      found = found + findOccurances(c); 
     return true; 
    } 
} 

private int findOccurances(char c) 
{ 
    int idx = fv.indexOf(c); 
    pv.setCharAt(idx, fv.charAt(idx)); 
    int counter = 1; 
    while(idx != -1) { 
     int index = fv.indexOf(c, idx + 1); 
     idx = index; 
     if(idx != -1) { 
      counter++; 
      pv.setCharAt(idx, fv.charAt(idx)); 
     } 
    } 
    return counter; 
} 

public void print() 
{ 
    System.out.println(pv); 
} 

} 


class Player 
{ 
    private String name = " "; 
    public void askName() 
    { 
     System.out.println("Welcome to Hangman"); 
     System.out.print("Player, enter your name: "); 
     name = input(); 
    } 

    public char guess() 
    { 
     return input().charAt(0); 
    } 

    private String input() 
    { 
     String str = " "; 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     try 
     { 
      str = br.readLine(); 
     } 
     catch(IOException ex) 
     { 
      ex.printStackTrace(); 
     } 

     return str; 
    } 
    public String toString() 
    { 
     return name; 
    } 
} 

class LetterBox 
{ 
    private char[] lbox = new char[24]; 
    private int counter = 0; 

    public boolean contains(char c) 
    { 
     for(int i = 0; i < counter; i++) 
     { 
      if(lbox[i] == c) 
       return true; 
     } 
     lbox[counter] = c; 
     counter++; 
     return false; 
    } 
    public void print() 
    { 
     System.out.print("LetterBox: "); 
     for(int i = 0; i < counter; i++) 
     { 
      System.out.print(lbox[i]); 
     } 
     System.out.println(" "); 
    } 
+0

我没有看到你的代码中的Array.sort的任何引用...?至于重复游戏,主要方法中的循环如何重复创建新的会话,播放它,然后询问是否要再次播放? – 2011-05-11 09:25:52

+0

我无法弄清楚在哪里把arrays.sort放在代码中,以便对你猜到的字母进行排序。 – user744394 2011-05-11 09:28:42

+0

@user你在添加一个新字符后就把它放好了。除此之外,如前所述,使用像SortedSet这样的有序数据结构将是更可取的。 – Thomas 2011-05-11 09:45:00

回答

0

不知道你的数组排序,但使用的Array.sort将数组排序此链接可能揭示它的一些光的意思。

http://www.rgagnon.com/javadetails/java-0343.html

至于再次打你需要改变你的取胜方法来询问用户是否希望再次扮演检查输入,然后如果他们不希望再次播放,你应该能够调用播放()。

public void win() { 
System.out.println("Congratulations " + player + ", you win!"); 
ask to play again 
get input 
check input 
if want to play again 
    play() 
else 
    exit  
} 
+0

我不会把它放在'win()'上。如何在失败后再次尝试? ;) – Thomas 2011-05-11 09:43:40

+0

非常真实,我今天早上没有想到:),您可以将该代码放入游戏结束方法,该方法会显示您赢或输,然后检查您是否希望再次玩。 – 2011-05-11 09:48:41

0

这里是乌尔信箱IMPL

class LetterBox { 

    private SortedSet<Byte> data = new TreeSet<Byte>(); 

    public int getSize() { 
     return data.size(); 
    } 

    public void add(char c) { 
     data.add(Byte.valueOf((byte) c)); 

    } 

    public boolean contains(char c) { 
     return data.contains(Byte.valueOf((byte) c)); 
    } 

    public void print() { 
     System.out.print("LetterBox: "); 
     for (Byte _char : data) { 
      System.out.print(((char) _char.byteValue())); 
     } 
     System.out.println(" "); 
    } 


} 
1

要恢复程序和玩其他的游戏,你不应该在win()lose()称之为: System.exit(0);

而是采用一个循环,并问用户想要做什么,例如play againexit。 对于play again重置游戏的状态并开始新的运行。

要对char数组进行排序,请调用Arrays.sort(lbox)。但是,这可能会将单位化置于前端。相反,您可能需要使用已提供contains方法的SortedSet<Character>,并按字符的自然顺序对其进行排序(请注意,此处不使用类别Character,尽管通过自动(un)装箱,您应该能够将基元传递为好吧,只是不在声明中)。