これは絞首刑執行人ゲーム用であり、ロジックはうまく機能します。単語が正しく入力され、絞首刑執行人は単語ごとにますます絞首刑にされます。ただし、出力で以下に示すように、「グラフィックス」はユーザーにとって少し難しいです。
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...という結果になるように、水平方向に強制的に追加/設定することはできますか?