このLabでは1~2人のクラスメートと協力することは問題ありませんが、そのグループのすべての受講生が等しく実習に貢献することが求められます。
2つの英単語のうち、どちらがより価値があるかを判断します。
$ ./scrabble
Player 1: COMPUTER
Player 2: science
Player 1 wins!
入門
VS Codeを開きます。
ターミナルウィンドウ内をクリックすることから始めて、それからcd
を実行します。
その後プロンプトは次のようになっていることがわかります。
$
ターミナルウィンドウの内側をクリックし、次のように入力します。
wget https://cdn.cs50.net/2021/fall/labs/2/scrabble.zip
その後にEnterを押すと、scrabble.zipというZIPがあなたのCodespaceにダウンロードされます。wgetと次のURLの間にあるスペースや、その他の文字を見落とさないように注意してください。
次に
unzip scrabble.zip
を実行して、scrabbleというフォルダを作成します。
ZIPファイルは不要になったため、
rm scrabble.zip
を実行し、プロンプトで “y “に続いてEnterで応答すると、ダウンロードしたZIPファイルが削除されます。
次に
cd scrabble
の後にEnterを押して、そのディレクトリに移動する(つまり、開く)。これでプロンプトは以下のようになります。
scrabble/ $
すべて成功した場合は、次のように実行します。
ls
scrabble.cというファイルが表示されます。以下を実行して、そのファイルを開きます。
code scrabble.c
問題が発生した場合は、同じ手順をもう一度実行して、どこが間違っていたかを判断できるかどうかを確認してください。
背景
スクラブルのゲームでは、プレイヤーはポイントを獲得するために単語を作成します。ポイント数は単語の各文字のポイント値の合計です。
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
ポイントになります。
実装の詳細
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
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/2022/x/scrabble
以下を実行し、style50
を使用してコードのスタイルを評価します。
style50 scrabble.c
提出方法
お使いの端末で、以下を実行して作品
submit50 cs50/labs/2022/x/scrabble