2013-11-15 5 views
0

ОК, поэтому я делаю игру палача в java, но единственная проблема, с которой я столкнулся, заключается в том, что программа не отображает фактического «палача» правильно. Вот мой код:Фотографии палатина не отображаются?

import java.io.File; 
import java.util.*; 
import javax.swing.JOptionPane; 

public class Hangman1 { 
public static void main(String[] args) throws Exception { 
    Scanner input = new Scanner(System.in); 
    Random ran = new Random(); 
    Scanner file = new Scanner(new File("word.txt")); 
    String dictionary = file.nextLine(); 

    char array2[]; 

    String wordlist[] = {"accoutrements","acumen","anomalistic","auspicious","bellwether","callipygian","circumlocution"}; 
    int number = ran.nextInt(7); 
    String in = null; 
    in = wordlist[number]; 
    //System.out.println(number); 
    String guess; 
    int numofchances = 9,k=0,p=0,q=0; 
    array2 = new char[numofchances+1]; 

    boolean array[],b=true; 
    array = new boolean[in.length()]; 
    for (int u=0;u<in.length();u++) 
    { 
     array[u]=false; 
    } 

    while(numofchances >= 1 && b){ 
     numofchances--; 
     System.out.println("Enter your guess: "); 
     guess = input.nextLine(); 
     if (q==0) 
     { 
     System.out.println("-------------"); 
     System.out.println("|   "); 
     System.out.println("|   "); 
     System.out.println("|   "); 
     System.out.println("|   "); 
     System.out.println("|   "); 
     System.out.println("|   "); 
     System.out.println("|"); 
     System.out.println("-------------"); 
     } 
     else if (q==1) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==2) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==3) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|  / "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==4) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|  /| "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==5) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|  /|\\ "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==6) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|  /|\\ "); 
      System.out.println("|  | "); 
      System.out.println("|   "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==7) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|  /|\\ "); 
      System.out.println("|  | "); 
      System.out.println("|  / "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     else if(q==8) 
     { 
      System.out.println("-------------"); 
      System.out.println("|  | "); 
      System.out.println("|  o "); 
      System.out.println("|  /|\\ "); 
      System.out.println("|  | "); 
      System.out.println("|  /\\ "); 
      System.out.println("|   "); 
      System.out.println("|"); 
      System.out.println("-------------"); 
     } 
     char character = guess.charAt(0); 
     array2[k] = character; 
     k++; 
     p = 0; 
     for(int i=0;i<in.length();i++){ 
      char c = in.charAt(i); 
      if(c == character || array[i]==true){ 
       System.out.print(c+" "); 
       array[i] = true; 
       p = 1; 
      }else{ 
       System.out.print("_ "); 
      } 
     } 
     if (p==0) 
      q++; 
     System.out.println(); 
     for(int i=0;i<k;i++){ 
      System.out.print(array2[i]+" "); 
     } 
     System.out.println(); 
     b = false; 
     System.out.println(); 
     for (int i=0;i<in.length();i++){ 
      if (array[i]==false) 
       b=true; 
     } 
    } 
    if(b){ 
     System.out.println("You lose."); 
    } 
    else{ 
     System.out.println("You won."); 
    } 



} 
} 

программа всегда выводит кадр «палача», и это не выводит остальную часть картин всякий раз, когда угаданных неправильное письмо.

ответ

0

JOptionPane Принимает String в качестве аргумента для его отображения. Вы не можете использовать println() для печати.

Вместо печати вам необходимо объединить строку с \n. Что-то вроде этого.

import javax.swing.JOptionPane; 

public class Test { 
    public static void main(String[] args){ 
     String hangman = 
      "-------------" + "\n" + 
      "|  | " + "\n" + 
      "|  o " + "\n" + 
      "|  /|\\ " + "\n" + 
      "|  | " + "\n" + 
      "|  /\\ " + "\n" + 
      "|   " + "\n" + 
      "|" + "\n" + 
      "-------------"; 

     JOptionPane.showMessageDialog(null,hangman); 
    } 
} 

Проверьте эту простую программу, чтобы узнать, о чем я говорю.

+1

Обратите внимание, что для такого огромного количества конкатенации строк, StringBuilder, вероятно, является хорошей альтернативой. – ajp15243

+3

@ ajp15243, но конкатенация будет выполнена компилятором, и если бы вы использовали 'StringBuilder', это было бы сделано во время выполнения. – vandale

+0

@vandale. А, я думаю, вы на самом деле правы, так как это все литералы' String' объекты без переменных или петли или что-то еще сложное, поэтому в этом конкретном случае «StringBuilder» будет плохим. Если эта картина была создана динамически, где вам нужно определить, создана ли определенная часть парня-палача или нет (согласно обычным правилам палача), «StringBuilder» был бы полезен. – ajp15243

0

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

Проблема заключается в том, что приращение q контролируется p==0 и p устанавливаются в 1, если c == character || array[i]==true, где array является записью всех предыдущих правильно угаданных букв. Вы должны установить только p = 1, когда c == character, ни для чего другого.

Вы также можете рассмотреть возможность использования более описательных имен переменных, поскольку это может помочь вам выявить такие проблемы.

Смежные вопросы