見出し画像

明大Digifro新歓『プログラミング・ゲーム制作のご紹介』

この資料は、明治大学和泉キャンパスにおける春新歓トークショー企画のための原稿をもとに書かれたものです。
可能な限り誰にでもわかりやすい内容となるよう努めましたので、興味ないという方も良ければ一度目を通していただければと思います!

Digifro(情報処理研究会)とは

私たち Digifro(デジフロ) は、正式名を情報処理研究会とする、明治大学の公認サークルです。
『情報技術を活用した創作活動』をモットーに、プログラミング・ゲーム制作やDTM(作曲)、映像・イラスト・その他さまざまな創作活動を取り扱っています。

大学の公認サークルとして、活動は和泉キャンパス・駿河台キャンパスの大学施設を利用して行っています。
詳しい説明はこの資料の最後をご覧いただくか、Twitterをご参照ください!

今回は、その多岐にわたる活動のなかからプログラミング・ゲーム制作といった面に焦点を当てて、その楽しさと面白さを皆さんにお伝えしていこうかと思います。

・この文章は新入生の勧誘を主目的とし、面白さを伝えることを目標としています。そのため、執筆者の能力不足もあり、一部に有識者から見ると非常に極端な簡略化、曖昧な表現などが存在します。
・可能な限り重大な誤りは取り除くようにしていますが、その点ご理解いただければと思います。そのうえでのご指摘・感想等は当会Twitterへご連絡ください。とくに「プログラミング」と「ゲーム制作」の概念については、意図的にその境界を曖昧な表現としている点があります。

1.まずは『マリオ』から考えよう

任天堂が生み出した定番ゲーム、「マリオ」シリーズ。シリーズ化に伴い様々なバージョンが存在するこの作品ですが、それぞれに共通する要素も数多く存在します。その1つが、ボタンを押す(あるいは画面をタップする)と画面上でキャラクターがジャンプする、というもの。

■参考映像(こちらの冒頭20秒をご覧ください)
Super Mario Run紹介映像(任天堂公式)

では、実際にこのようなゲームを制作したいとしたら、どのようにすればいいのでしょうか?
世の中に既にあるものをマネすることは、商業の世界では気を付けるべき行為ですが、個人的な勉強のためには(もちろん法律等に反しない限り)非常に有用なことです。

ここではプログラミング・ゲーム制作の入口として、単純な1動作、すなわち 「ボタンを押すと画面の中のキャラクターがジャンプする」 ことをどう実現するか考えてみましょう。 以降はパソコンでゲームを作る体で話を進めていきますが、SwitchやPS4等のゲーム機で動くゲームでもやり方は同じだと考えてください。

2.見た目をそろえても

まずは必要な物を用意しましょう。ひとまず見た目から入ることとして、写真加工のアプリを立ち上げました。まずは背景の絵が必要ですね。その上にキャラクターの画像をのせましょう。ひとまず面倒なので人型のシルエットで完成です。そうです、ゲームが完成しました!

画像1

著作権上の問題の無い、パブリックドメインの画像素材を使用しています。

これで準備は完了です。コントローラーをつないでボタンを押してみましょう。キャラクターはジャンプしたでしょうか?

......答えはノーです。
ちょっと編集しただけで画像が勝手に動き出してくれるのであれば、苦労しませんが...残念ながら、 見た目が全く同じでも、それが動くかどうかは別問題です。

3.ではどうするか

きちんと物事が動作するためには、それに関する説明が必要です。
新人のバイトが店に入ってきたときに、いきなりレジに入ってもらうのではなく、最初に説明をしたりマニュアルを渡したりする必要があるのと同じようなものです。

この場合であれば、ゲームの画面を作るだけでなく、
「もしコントローラーのボタンが押されたら、キャラクターをジャンプさせてください」
という説明をパソコン(もしくはゲーム機など)にしてあげる必要があります。

しかも、これが人間であれば「適当に動かしといて」で通じますが、相手は機械ですのでとなればそうはいきません。
状況にもよりますが、一例として「何cmジャンプするのか」「滞空時間は何秒か」といった条件を伝える必要があります。

これが、一般的にプログラミング、と呼ばれる一見すると難しそうな作業の正体です。

4.どうやって伝えるか

では、必要な指示をどのようにして伝えればいいのでしょうか。

簡単に言えば、人間の言葉をゲーム向けの指令に翻訳してくれる翻訳機のようなものを使うのです。

と言っても、人が使うような翻訳アプリとは少し違います。もし誤訳があった場合、人であればある程度気づいて修正できますが、プログラミングの場合、相手が機械。間違った翻訳を見ても気づかず、そのまま誤った指令に基づいて動いてしまいます。

たとえば、私はこの文章で何回か「新歓」という言葉を使っていますが、これをGoogle翻訳に投げると「Rejoicing(喜び、歓喜)」と訳されます。さて、私は「新歓」の意味を知っているので誤訳に気づけましたが、何も理解していない機械であればどうでしょうか...?

そのため、私たちのほうが気を遣ってあげて、パソコンが勘違いせずに理解できる話し方をしてあげる必要があるのです。
この、人間が理解できるけれども「パソコンにとっても分かりやすい話し方」というのを「プログラミング言語」と呼んでいます。

なお、分かりにくい・理解しにくい点として、「プログラミング言語は何種類もある」という点があります。用途や環境によってさまざまな翻訳機がうまれ、そしてパソコンやゲーム機の進化に伴い改訂されていくので、それぞれの話し方もまた様々です。


5.具体例(注・難しくないのでゆっくり読んでほしい)

ここで、当初の例に戻ってみましょう。すなわち、「キャラクターをジャンプさせる」ことを実現するのです。
先に、「もしコントローラーのボタンが押されたら、キャラクターをジャンプさせてください」とパソコンに説明しなくてはならないこと、パソコンが理解できる話し方をしてあげる必要があるというのを説明しました。

どのような翻訳機を使うかによって書き方は異なるのですが、ここでは架空の言語を用いて、普通の日本語をパソコンの理解できる話し方に変えていくことにしましょう。

まずは、主語述語を意識し、やりたいことを要素ごとに分けてみましょう。

もし コントローラーのボタン が 押されたら  
キャラクター を ジャンプさせる

先ほどの3節の最後で、機械に「適当に動かしといて」は通用せず、具体的に伝えなければならないと提示しました。
どこまで口にして伝えなければならないか、どこまでパソコンがこちらの意をくみ取ってくれるのかは翻訳機とプログラミング言語によって変わりますが、ここでは先ほどの例に従い、「何cm浮くのか」と「滞空時間」とを入れ込んでみます。

このとき重要なのが、『「ジャンプする」ってどういうこと?』という発想です。個人的にプログラムの肝は、赤ちゃんに物を伝えるつもりで話すことだと思っています。もちろんもっと頭の良い翻訳機もありますが、ここではかみ砕いて話してあげることにしましょう。
もし コントローラーのボタン が 押されたら
キャラクター を 3cm上に動かす
1秒 滞空させる
3cm下に戻す

「ジャンプする」を細かい表現に変えてみました。ここまでは理解できたでしょうか?それでは、文章そのままに「プログラムっぽい」書き方にしてみますね。

もし(コントローラーのボタン が 押されたら){
   キャラクター は 3cm上に
   1秒 待つ
   キャラクター は 3cm下に
}

ちょっと形が変わりましたが、文章の内容はほとんど変わっていないのが分かるでしょうか。この()や{}を使い整えた形が、パソコンにとって理解しやすい形のテンプレの1つです。
翻訳機によっては、このような日本語文を理解できる、翻訳してくれるというものもあります。

とはいえ、プログラミング言語のほとんどはアルファベット、英語を用いた翻訳を行います。 理由はいくつかありますが、とはいえ英語力は必要ありません。 たいていの場合は、基礎的な単語ばかりです。
「それっぽい」形にしてみましょう。たとえばこんな感じに...

if (Controller_Button == Pressed){
   Character_x + 3;
   sleep(1);
   Character_x - 3;
}

いかがでしょうか。ぱっと見では抵抗感があるかもしれませんが、落ち着いて見比べると1つ上の日本語文と書いてあることは全く同じであることに気づいていただけるのではないでしょうか。
細かい決まりごとは翻訳機によって様々ですが、いま広く使われているプログラミング言語の多くはこのような書き方をします。

難しそうだなぁ...と思いましたか?でも、決してそうではありません。

6.プログラミングは入試じゃない

ここまでで、ゲーム制作やプログラミングのコツは「パソコンにとってわかりやすい書き方をしてあげること」だと述べてきました。

しかし、難しそうだなと思ってしまった人に勘違いしてほしくないのは、プログラミングはテストでも入試でもなく、受験勉強をしているのでもないということです。 どういうことか。つまり、細かい言語の1つ1つを無理に暗記していく必要は全くないということです。

実際問題、世界中でありとあらゆる仕様変更が行われ、様々な機器との組み合わせによって微調整を求められるので、「言語」の単語帳を覚えるかのような作業は不要です。 持つべきは、超基本的な文法知識と、分からないことを気軽に検索できるスキルだと思います。

さらに、プログラミングは(比較的)気軽にトライアンドエラーができ、またそれを繰り返して完成させるものです。 IT企業のプロであろうと、翻訳機がうまく読み取れないプログラムを書いてしまい、それを直したはずがまた別の問題が出てしまい、それをまた直し...の繰り返しです。生半可な気持ちで挑むな!という表現がありますが、逆に趣味の範囲であれば「中途半端な気持ち」でも気軽に足を踏み入れられる分野だと(個人的には)考えています。

7.まとめ

ここまで、プログラミングのなんとなくのイメージについて、少しでも掴んでもらえればと思い執筆してきました。

この文章ではいわゆる「翻訳機」に言語を読み込ませるタイプのプログラミングをご紹介してきました。
しかし例えば実際のゲーム制作現場では、グラフィカルなものを従来の言語に組み合わせた、両方の良い所どり(編集のしやすさと、パソコンへの細かい指示のやりやすさ)のやり方をしているところも増えているようです。
(またもや任天堂のゲームになりますが、『スーパーマリオメーカー』や『スマッシュブラザーズ』のステージエディット機能などを想像してもらえれば分かりやすいかもしれません。)

より初心者への敷居が低くなってきていますし、そのようなプログラムの動作のあり方を知ることは、案外役に立ったりすることもあります。
少しでも興味を持ってくれた方は、ぜひこの世界に飛び込んできて見てもらいたいと思います!

当サークルの紹介・入部案内

私たちは正式名称を「情報処理研究会」と称する、明治大学公認の学生サークルです。
部員数は約20名で、駿河台キャンパスに部室を持っています。
和泉キャンパスでは大学公認のため、部室はありませんが空き教室の貸し出しを受けて活動しています。

活動の内容はゲーム制作・プログラミング・DTM(作曲)・動画制作・写真・イラスト等多岐にわたり、活動の趣旨である「情報技術を用いた創作活動」に含まれるものは何でも扱っております。
明大祭への出展のほか、部員の状況と要望に基づきコミケ・その他イベントへの出展も行っています。

決まった曜日・時間のミーティングは定めておらず、部員の予定を合わせて柔軟に定期ミーティングを行っています。 今年は世間の事情もあり、大部分のオンライン化を検討しています。
いずれにせよ強制参加ではなく、部員の大半が他サークルとの兼部をしている、活動の柔軟性が非常に高い環境です。

詳しく話を聞きたい・入部してみたいという方は、いつでもご連絡ください。新入生・上級生問わず、いつでも入部を受け付けております!
連絡先:Twitter @digifro
E-mail: digi.fro @ gmail.com

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