[英]HangMan removing letters guessed from array
我在編寫hangman程序時遇到了障礙,可以幫助刪除數組中已經正確猜出的字母,這是我的代碼:
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
public class Game {
public Game(){
start();
}
public static void start()
{
Scanner scan = new Scanner(System.in);
Random rand = new Random();
String [] Words = {"Dog","cat","Food","Bacon","Turkey","hood","poo","Good","look"};//initializes the array
String RandomWord = Words[rand.nextInt(Words.length)];//picks a random word from the char array and stores it in a variabe
char [] array = RandomWord.toCharArray();//converts the randomly generated word from the array into a char array
int i = 0;//counter
char input = 0;
int WinCounter = 0;//counts the number of wins
System.out.println("You have a "+RandomWord.length()+" letter word "+RandomWord);
int tries = 20;
int wrongCounter = 0;
ArrayList<Character> list = new ArrayList<Character>();
while(i<tries){
i++;
hangMan(wrongCounter);
System.out.println("Guess a letter : ");
input = scan.next().charAt(0);
list.add(input);
System.out.println("Guessed Letters are : "+guessedLetters(input,list));
for(int j = 0; j<noDuplicates(array).length;j++){
if(findCorrect(array,input, list)+removeCaseSensitive(array,input)>0){
j++;
System.out.println("You got it right");
//System.out.println(noRepeat(list,input));
WinCounter++;
break;
}
else if(!(input ==noDuplicates(array)[j])){
System.out.println("You got it wrong");
//System.out.println(noRepeat(list,input));
wrongCounter++;
break;
}
}
if(WinCounter == noDuplicates(array).length)//tests to see if the player won
{
System.out.println("You have Won!");
break;
}
else if(hangMan(wrongCounter)){
break;
}
}
System.out.println();
}
public static boolean hangMan(int wrongCounter) {
boolean isOver= false;
System.out.println("------------|");
switch(wrongCounter){
case 1:
System.out.println("| O");
break;
case 2 :
System.out.println("| O");
System.out.print("| /");
break;
case 3:
System.out.println("| O");
System.out.print("| /|\\");
System.out.println();
break;
case 4 :
System.out.println("| O");
System.out.print("| /|\\");
System.out.println();
System.out.println("| /");
break;
case 5:
System.out.println("| O");
System.out.print("| /|\\");
System.out.println();
System.out.println("| / \\");
System.out.println("You lost");
isOver = true;
break;
}
for(int i = 0;i<7;i++)
System.out.println("|");
return isOver;
}
//removes all duplicates from the array
private static char[] noDuplicates(char[] a) {
HashSet<Integer> keys = new HashSet<Integer>();
char[] result = new char[a.length];
int j = 0;
for (int i = 0 ; i < a.length; i++) {
if (keys.add((int) a[i])) {
result[j] = a[i];
j++;
}
}
return Arrays.copyOf(result, j);
}
//tests to see if the users input it equal to any of the letters in the array
public static int findCorrect(char [] a,char Input,ArrayList list){
int count = 0;
for(int i = 0;i<noDuplicates(a).length;i++){
if(noDuplicates(a)[i]==Input)
count++;
}
return count;
}
//removes case sensitivity
public static int removeCaseSensitive(char [] a,char Input){
int count = 0;
for(int i = 0;i<noDuplicates(a).length;i++)
{
if(Character.toLowerCase(Input)==Character.toLowerCase(noDuplicates(a)[i]))
count++;
else if(Character.toUpperCase(Input)==Character.toUpperCase(noDuplicates(a)[i]))
count++;
}
return count;
}
public static String guessedLetters(char input,ArrayList List){
List.add(input);
StringBuilder sb = new StringBuilder(List.size());
for (int i = 0; i < List.size(); i++) {
sb.append(List.get(i));
if (i < List.size() - 1) {
sb.append(" ");
}
}
return sb.toString();
}
}
你們有什么建議都很棒,我沒主意了
使用列表而不是數組,然后可以使用列表remove()方法刪除項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.