見出し画像

CS50 2023 - Week0 Scratch


概要

Week0では、コンピューターの基礎を学びます。
講義の主な内容は、バイナリー、アルゴリズム、擬似コード、そしてScratchについてです。

Scratch
Scratchとは、マサチューセッツ工科大学で開発されたプログラミング学習用のツールです。
コードを書く代わりに、特定の役割を持ったブロックをドラッグ&ドロップで組み合わせることで、プログラムを作成できます。


Lab

Week0にはLabはありません。


Problem Set 0

Scratch

課題条件
Scratchを利用して、プロジェクトを作成します。
プロジェクトのジャンルに制限はありません。
Scratchで実現可能であれば、ゲーム、アニメーション、何でもOKです。

ただし、下記の条件を満たしている必要があります。

  • スプライトを2つ以上使用すること(そのうちの1つはCat以外であること)

  • スクリプトを3つ以上使用すること(スプライト1つにつき3つではなく、合計で3つ以上)

  • 条件を1つ以上使用すること

  • ループを1つ以上使用すること

  • 変数を1つ以上使用すること

  • カスタムブロックを1つ以上使用すること(1つ以上の入力を受け付けるものであること)

  • 講義でデモンストレーションされたプロジェクトよりは手の込んだ作品であること

スプライトとは、キャラクター画像(物質含む)のことです。
スクリプトは、コンピュータープログラム…平たく言えば、有効なブロックの組み合わせを指します。
講義で紹介されるデモはとてもシンプルな作品なので、よほど手を抜いたプロジェクトを作らない限り、これは自然にクリアできます。

プロジェクト例
以下は、私が作成したScratchプロジェクトです。
noteがうまくタイトルを取得してくれませんが、プロジェクト名はCat's Little Starです。

  • 緑の旗をクリックすると、スクリプトが実行されます。

  • 中を見るをクリックすると、プログラムの中身を閲覧できます。

エクスポートファイルは以下です。ご参考まで。

このプロジェクトは、PCのキーボードを操作して、きらきら星の最初の14小節を奏でるゲームです。正直、結構ネタに困ってしまって、課題の条件を突っ込めそうな題材を選択しました。

※以下、括弧内は課題の条件を示しています。

スプライトは、Cat、キーボード、スピーカー、CDEFGABの文字アイコン、そしてセリフ表示用の透明アイコンです(スプライト数)。
それぞれに最低1つのスクリプトがあります(スクリプト数)。

PCキーボードのCキーを押すと、Scratchがのピアノ音を鳴らし(条件)、Cのスプライトが上に跳ねます(条件)。
何故、Cなのか?そう思われる方もいらっしゃるかもしれません。
ドレミはイタリアで用いられている音階表記ですが、アメリカではCDEのように表記します。

  • ド=C

  • レ=D

  • ミ=E

  • ファ=F

  • ソ=G

  • ラ=A

  • シ=B

ハーバードがアメリカの大学であること、PCキーボードと楽器のキーボードの対応が容易であることから、アメリカ式の音階を採択しました。

きらきら星の楽譜は上記Scratchページの使い方に記載しています。
対応するキーボードのキーを押して14小節奏でるとゲームクリアとなります。クリア時には得点が表示されます(変数)。
途中で間違えずにキーを押し続けると、ボーナスポイントが加算されます。つまり、正しいキーを押し続けることで、高得点を狙えるというものです。

画面右下のスピーカーをクリックすると、きらきら星の演奏デモが2回流れます(ループ、カスタムブロック)。
きらきら星と言われても、どんな曲か思い出せない人もいることでしょう。
それに1回デモを聴いただけでは、覚えられないかもしれませんよね!

…という口実を設けてはみたものの、実際のところ、これはループとカスタムブロックをプロジェクトに組み込むための苦肉の策。ここは本当に大変でした。
初期設計って本当に大事だなと痛感したポイントでもあります。

さいごに

CS50の始まりです。
講義では、David氏のトーク力に圧倒されたかと思います。
Week0はLabがなく、課題提出はProblem Setだけです。
各ブロックの特性を理解すれば、作成難易度はそれほど高くありません。
しかし、常日頃から「作りたいものがたくさんある!」という方でない限りは、何を作成するかを決めることが大きな課題となります。

Scratchでは他の学生やクリエイターが作成したプロジェクトを閲覧したり遊んだりすることができます。ハーバードの学生たちには、ゲーム制作が人気であったように思います。

私自身も最初は以下のようなゲームを作ろうと考えていました。
これらのアイデアが皆さんの創作のきっかけになれば嬉しいです。

■ アクションゲーム
ゼルダの伝説(SFC以前)のように、四角いフィールド内でCatが敵と戦い、アイテムを拾ってパワーアップしていくようなゲームです。
敵やアイテムのバリエーションでスプライトとスクリプトを、HPや攻撃力の設定で条件と変数、スプライトの再出現にループを使うなど、課題提出の条件を自然とクリアできるのが良いところです。

私はScratchにデフォルトで用意されているグラフィックが少ないことと、自前で画像を用意することの難しさから泣く泣く断念したのですが、今思えば、工夫次第で十分に実現は可能です。

■ クイズゲーム
Catが飼い主一家の悩みを解決するため、各家族メンバーと会話して、彼らを正解に導くゲームです。
人生は選択の連続で、あらゆる選択は究極的にはただの二者択一。
人々の悩みを聞き、他者からヒントを得て、AかBの答えを出すことがゲームの目的です。
この会話の中に変数や条件をうまく組み込んでいきます。
クイズというよりは、RPGの探索パートに近いゲームかもしれません。

ちゃんと作れればおもしろくできそうなのですが、こちらも思い描いていたスプライトが用意できなかったので諦念。プログラミングよりもイラストを描く能力が欲しいと強く思いました。

なお、課題提出の条件では、スプライトを2つ以上使用することが求められていますが、そのうちの1つがCatでなくてはならないという制限はありません。実際には、Catを使わなくても全く問題ありません。
それにも関わらず私がCatを主役に選んでしまうのは、あのCatのスプライトがとても可愛いからです。

この記事が気に入ったらサポートをしてみませんか?