このLabでは1~2人のクラスメートと協力することは問題ありませんが、そのグループのすべての受講生が等しく実習に貢献することが求められます。
2つの英単語のうち、どちらがより価値があるかを判断します。
$ ./scrabble
Player 1: COMPUTER
Player 2: science
Player 1 wins!
〆切
2021年12月31日金曜日11:59 PM (東部標準時) までに提出してください。
背景
スクラブルのゲームでは、プレイヤーはポイントを獲得するために単語を作成します。ポイント数は単語の各文字のポイント値の合計です。
| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
| 1 | 3 | 3 | 2 | 1 | 4 | 2 | 4 | 1 | 8 | 5 | 1 | 3 | 1 | 1 | 3 | 10 | 1 | 1 | 1 | 1 | 4 | 4 | 8 | 4 | 10 |
たとえば、Codeという単語にスコアを付けたい場合、一般的なスクラブルのルールでは、Cは3ポイント、oは1ポイント、dは2ポイント、eは1ポイントになります。これらを合計すると、Codeの価値は3 + 1 + 2 + 1 = 7ポイントになります。
始め方
- cdn.cs50.net/2020/fall/labs/2/scrabble.cの「配布コード」 (スターターコード) を、
scrabble.cというIDEの新しいファイルにコピーします。- CS50 IDEで
wget https://cdn.cs50.net/2020/fall/labs/2/scrabble.cとコマンドを実行して、配布コードをダウンロードすることもできます。
- CS50 IDEで
実装の詳細
scrabble.cの実装を完了し、2人のプレイヤーがそれぞれの単語を入力し、得点の高いプレイヤーが勝利する短いスクラブルのようなゲームの勝者を決定します。
- アルファベットの各文字のポイント値が、
POINTSという名前の整数配列に格納されていることに注目してください。- たとえば、
Aまたはaはaポイントに相当し (POINTS[0]で表されます) 、Bまたはbは3ポイントに相当します (POINTS[1]で表されます) 。
- たとえば、
- ここでは、
compute_score()というヘルパー関数のプロトタイプを作成しました。このプロトタイプは、入力として文字列を受け取り、intを返します。特定の単語にポイント値を割り当てる場合は、この関数を呼び出すことができます。このプロトタイプは、Cがcompute_score()がプログラムの後の方に存在することを知るために必要であることに注意してください。 main()では、プログラムはget_string()関数を使用して2人のプレイヤーに単語の入力を促します。これらの値は、word1およびword2という名前の変数に格納されます。compute_score()では、プログラムはPOINTS配列を使用して、文字列引数のスコアを返します。英字以外の文字には0ポイントを指定し、大文字と小文字は同じポイント値を指定する必要があります。- たとえば、
!は0ポイントに相当し、Aとaは両方とも1ポイントに相当します。
- 通常スクラブルのルールでは単語が辞書に載っている必要がありますが、この問題ではそれをチェックする必要はありません!
- たとえば、
main()では、プレイヤーのスコアに応じて、プログラムがPlayer 1 wins!,Player 2 wins!, orTie!を表示する必要があります。
ウォークスルー
ヒント
- 関数
isupper()とislower()が役に立つでしょう。これらの関数は引数として文字を取り、booleanを返します。 arrという配列のn番目のインデックスの値を見つけるには、arr[n]と記述します。文字列は文字の配列であるため、これを文字列に適用することもできます。- コンピュータは、各文字を数字として表す標準であるASCIIを使用して文字を表すことを思い出してください。
コードのテスト方法
プログラムは、次の例に従って動作する必要があります。
$ ./scrabble$ ./scrabble
Player 1: Question?
Player 2: Question!
Tie!
$ ./scrabble
Player 1: Oh,
Player 2: hai!
Player 2 wins!
$ ./scrabble
Player 1: COMPUTER
Player 2: science
Player 1 wins!
$ ./scrabble
Player 1: Scrabble
Player 2: wiNNeR
Player 1 wins!
解決方法がわかりませんか?
check50を使用して以下を実行し、コードの正確さを評価してください。ただし、コンパイルとテストは必ず自分で行ってください。
check50 cs50/labs/2021/x/scrabble
以下を実行し、style50を使用してコードのスタイルを評価します。
style50 scrabble.c
提出方法
次のコマンドを実行し、GitHubのユーザー名とパスワードを入力してログインします。セキュリティのため、パスワードには実際の文字ではなくアスタリスク (*) が表示されます。
submit50 cs50/labs/2021/x/scrabble