0

これは絞首刑執行人ゲーム用であり、ロジックはうまく機能します。単語が正しく入力され、絞首刑執行人は単語ごとにますます絞首刑にされます。ただし、出力で以下に示すように、「グラフィックス」はユーザーにとって少し難しいです。

3

[ .----------------. 
| .--------------. |
| |  _______     | |
| | |_   __ \    | |
| |   | |__) |   | |
| |   |  __ /    | |
| |  _| |  \ \_  | |
| | |____| |___| | |
| |              | |
| '--------------' |
 '----------------' ,  .----------------. 
| .--------------. |
| |  ____  ____  | |
| | |_   ||   _| | |
| |   | |__| |   | |
| |   |  __  |   | |
| |  _| |  | |_  | |
| | |____||____| | |
| |              | |
| '--------------' |
 '----------------' , .----------------.s
| .--------------. |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| '--------------' |
 '----------------'\, .----------------.s
| .--------------. |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| '--------------' |
 '----------------'\,  .----------------. 
| .--------------. |
| |     ____     | |
| |   .'    `.   | |
| |  /  .--.  \  | |
| |  | |    | |  | |
| |  \  `--'  /  | |
| |   `.____.'   | |
| |              | |
| '--------------' |
 '----------------' , .----------------.s
| .--------------. |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| '--------------' |
 '----------------'\, .----------------.s
| .--------------. |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| '--------------' |
 '----------------'\,  .----------------. 
| .--------------. |
| |  _______     | |
| | |_   __ \    | |
| |   | |__) |   | |
| |   |  __ /    | |
| |  _| |  \ \_  | |
| | |____| |___| | |
| |              | |
| '--------------' |
 '----------------' ,  .----------------. 
| .--------------. |
| |     ____     | |
| |   .'    `.   | |
| |  /  .--.  \  | |
| |  | |    | |  | |
| |  \  `--'  /  | |
| |   `.____.'   | |
| |              | |
| '--------------' |
 '----------------' , .----------------.s
| .--------------. |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| |              | |
| '--------------' |
 '----------------'\]

どうしたら平らにできますか?以下の 3 つのボックスは、その作成方法に関連するコードを示しています。

if (word.contains(guess)) {
                                for (int location = 0; location < word.length(); location++) {
                                    String letter = String.valueOf(word.charAt(location));
                                    if (letter.equalsIgnoreCase(guess)) {
                                        progressOnWord.set(location, guess);
                                    }
                                }
                                numberCorrect++;
                                p(numberCorrect);
                        }

                

上記のコードは、正しい単語がある場合に ArrayList の progressOnWord を埋めます。progressOnWord は "0000000000" で始まり、単語の文字数と同じ数のゼロが推測に使用されます。推測された場合、正しい文字で埋められます。次に例を示します。

上記の現在の段階の「rh00o00ro0」。次に、これは ASCII に変換されます。文字列が 0 の場合、ASCII ブロック ブランクを ASCIIform (progressOnWord の ASCII 形式) に追加します。たとえば、progressOnWord が rh00o00ro0 の場合、ASCII ブロックは上記のようになります。空白の設定は無差別です。空白の場所は気にせず、すべての 0 を空白に設定するだけです。

for (int j = 0; j < progressOnWord.size(); j++) {
                            String wordPlace = progressOnWord.get(j);
                            if (wordPlace.equals("0")) {
                                ASCIIform.set(j, ASCIIblank);
                            }

このステートメント差別的であり、文字が正しい場所にあることを確認します.

for (int k = 0; k < lowercase.length; k++) {
                            String letter = String.valueOf(lowercase[k]);
                            String ASCIIletter = ASCIIalphabet[k];
                            if (wordPlace.equalsIgnoreCase(letter)) {
                                ASCIIform.set(j, ASCIIletter);
                            }
                        }
                        }

コードの 2 つのブロックは連続していますが、ここでは解説のために分割しています。では、質問に戻ります。ブロックがそれぞれ新しい行にあるのはなぜですか。また、どのように修正できますか? ArrayList<String>(以下に要約)からブロックを取得しています:

public static String[] getASCIIalphabet() {
        String[] ASCIIalphabet = {
                """
 .----------------.\s
| .--------------. |
| |      __      | |
| |     /  \\     | |
| |    / /\\ \\    | |
| |   / ____ \\   | |
| | _/ /    \\ \\_ | |
| ||____|  |____|| |
| |              | |
| '--------------' |
 '----------------'\s""",

                """
 .----------------.\s
| .--------------. |
| |   ______     | |
| |  |_   _ \\    | |
| |    | |_) |   | |
| |    |  __'.   | |
| |   _| |__) |  | |
| |  |_______/   | |
| |              | |
| '--------------' |
 '----------------'\s"""
};

ArrayList のフォーマットが問題になる可能性はありますか? あなたが持っていたかのように

"0",
"1",
"2",

ArrayList では、次のように出力されますか?

0
1
2

私はそうは思わない。ブロックの追加によるものですか?推測どおり1つずつ追加されますが、それがスタックの原因ですか? それとも、ブロック自体の文字ですか - アルファベットの ArrayList のテキスト ブロックで、それはおそらく\s?

ダニエルの答えに関する詳細を提供するには、

StringBuilder.append(char c)使用さArrayList.set(int index, String element)れています。

コードは次のとおりです。

for (int j = 0; j < progressOnWord.size(); j++) {
                                String wordPlace = progressOnWord.get(j);
                                if (wordPlace.equals("0")) {
                                    ASCIIform.set(j, ASCIIblank);
                                }
                                
                            

上記では、0 がプレースホルダーであるため、0 が検出されると、ASCII ブロック ブランクに置き換えられます。

                                             '----------------'
                                            | .--------------. |
                                            | |              | |
                                            | |              | |
                                            | |              | |
                                            | |              | |
                                            | |              | |
                                            | |              | |
                                            | |              | |
                                            | '--------------' |
                                             '----------------'\, 


        
                                for (int k = 0; k < lowercase.length; k++) {
                                    String letter = String.valueOf(lowercase[k]);
                                    String ASCIIletter = ASCIIalphabet[k];
                                    if (wordPlace.equalsIgnoreCase(letter)) {
                                        ASCIIform.set(j, ASCIIletter);
                                    }
                                }
                            


                          

上記のコード は、単語内の各文字を反復するループ内で、アルファベットを反復処理します。たとえば、「rhinoceros」の場合: 進行状況が rh00o00ro0 の場合、r が 0 かどうかをチェックします。いいえ。r が見つかるまで、a、b、c...z を繰り返します。アルファベットで r を見つけると、r が進行中のスポット 0 にあることに注意し、r がアルファベットの 18 番目の文字であることを認識し、ASCII ワードのスポット 0 を ASCII ブロック アルファベットの 18 番目の文字列に設定します。 :

                                                [ .----------------.
                                                | .--------------. |
                                                | |  _______     | |
                                                | | |_   __ \    | |
                                                | |   | |__) |   | |
                                                | |   |  __ /    | |
                                                | |  _| |  \ \_  | |
                                                | | |____| |___| | |
                                                | |              | |
                                                | '--------------' |
                                                 '----------------' ,
                             

ArrayList.set(int index, String element)このゲームではキャラクターの位置が重要なため、この方法を使用する必要があります。

対照的にStringBuilder.append(char c)、ASCII 変換のデモを作成するときに使用されます。ユーザーが「rhinoceros」と入力すると、ユーザーに「グラフィックス」スタイルの味を与えるために、上記の ASCII ブロック スタイルで「rhinoceros」という単語全体が出力されます。コードは次のとおりです。

                        for (int i = 0; i < allCaps.length(); i++) {
                            char c = allCaps.charAt(i);
                            for (int j = 0; j < uppercase.length; j++) {
                                char bigChar = uppercase[j];
                                String ASCIIblock = getASCIIalphabet()[j];
                                if (c == bigChar) ASCIIword.append(ASCIIblock);
                            }
                        }

それは注目に値し、同じ結果StringBuilder.append()ArrayList.set()生成します: スタッキング. append()またはset()「横向き」への方法はありますか?およびメソッドは、デフォルトで文字を積み重ねますappend()。ArrayList でテキスト ブロックの書式設定を行う必要set()があるようです。通常は水平方向がデフォルトですが、R---->H---->I---->N...という結果になるように、水平方向に強制的に追加/設定することはできますか?

4

1 に答える 1