特異点の向こう

俺は浪人生、帰国子女、プログラマ、数学者、哲学者、もうすぐ億万長者

プログラミングプロジェクト紹介② Sota's Adventure

プログラミングプロジェクト紹介第2弾は、俺が高2の時に作ったゲーム、Sota's Adventureである。

 

f:id:pepsisoda:20190820201055p:plain

 

ストーリーの概要はこうだ。2017年、未知の惑星からのUFOが南極に着陸した。宇宙人は地球に宣戦布告し、世界中を攻撃し始めた。彼らは我々よりずっと進んだテクノロジーを保持しており、地球上のどのような兵器、核兵器でさえも、効果がないことが分かり、世界はほとんど希望を失っていた。そこで突然、最も優しく、賢く、素晴らしい少年ソータが現れ、彼は自身の驚くべき発明を手に、勇敢に敵に立ち向かった!

 

マリオのようなRPGゲームを作ろうと思い着手したこのプロジェクトは、俺が過去に携わったプロジェクトの中で、かけた時間、コード量、そして終わった時の達成感という面で最大のものである。着想から一応の完成まで、約5か月かかった(途中1か月ほど訳あって中断していたので、実際の制作期間は3,4か月くらい)。

 

開発はJavaで行い、外部ライブラリーは一切使っていない。当時はライブラリーを使うことはずるだと勝手に考えていたので、意地でも全部自分で作りたいという思いがあった。今このようなゲームを作るとしたら間違いなくライブラリーを使っていただろう。そっちの方が効率的で、時間を大幅に短縮できるからだ。しかしこのゲームをライブラリーなしで作ったことで、プログラミングの力が大きくついたと思う。画面のスクロールや、フィジクスの処理、グラフィクスのレンダリングとかをすべて自分で実装したのは大変だったが、プログラムに対する理解が深まった。

 

ゲーム開発のプログラミング以外の要素も経験することができた。ストーリーの作成や、キャラクターのデザイン、マップの構築、ルールの調整など、ゲームは様々な要素を統合して作り上げていかなければならないのだと学んだ。特にキャラクターやマップのデザインは、画像編集が得意でなく別に好きでもない俺にとって、一番面倒な部分であったが、結果的にはいいものができたと自負している。

 

いきなり完成品を目指すのではなく、最初はできるだけ要素を削った最もシンプルな機能の実装から始めた。最初はただの水平線と適当に描いたキャラクターを描写し、キーボード入力に合わせてキャラクターが移動し、画面もそれに合わせてスクロールするという基本的なところから始めた。といっても、ここまで作るのが一番大変なのだが。

 

f:id:pepsisoda:20190820200445p:plain

開発初期のゲーム画面

 

ここから、起伏にとんだマップを作ったり、敵を導入したり、HPを表示したりなど、要素をどんどん追加していった。一見複雑に見えるゲームだが、基本となる機能があり、それに肉付けしていくという手法をとったため、方向性を見失わずに開発を続けることができた。コードは最終的に16ファイル、2,786行という大作になったが、このようにシンプルなものから始めていくというやり方でなければ達成できなかったと思う。

 

このプロジェクトは今までの俺の最高傑作であると自負している。その後もいくつかプロジェクトに携わったが、これほどの達成感、満足感を得られたものはなかった。

 

ソースコードはGitHub上に公開してある。ゲームのダウンロードもGitHubからできる。

github.com

以下に、ゲームの画像を掲載しておく。

f:id:pepsisoda:20190820201055p:plain

f:id:pepsisoda:20190820201058p:plain

f:id:pepsisoda:20190820201027p:plain

f:id:pepsisoda:20190820201035p:plain

 

プログラミングプロジェクト紹介① Breakout

俺が過去に手掛けたプログラミングのプロジェクトを、今日から何回かに分けて紹介する。初回は俺がプログラミングを中3の時に始めて最初に作ったゲームである、Breakoutを紹介する。

 

Breakoutは有名なアーケードゲームで、パドルでボールをはじいてブロックを壊していくゲームだ。読者のみんなも一度はやったことがあるゲームだろう。

 

このゲームの開発にはJavaScriptを用いた。プログラミングにはBreakoutの作り方が解説されているウェブサイトを参考にしたが、コピペしたわけではなく、プログラムをきちんと理解して自分なりに改造していこうと努めた。

 

このプロジェクトに挑戦したことで、条件分岐や繰り返し、オブジェクトといったプログラミングで基本となる概念が定着しただけでなく、その後ゲームを開発していくうえで必要となる力を養うことができた。具体的には、ゲームループなどの重要な概念を学んだり、UIを改良して視覚的にわかりやすく洗練されたデザインを求めたりといったことを経験することができた。Breakoutはシンプルなゲームで構造も非常に簡単なので、プログラミング初心者には非常におすすめのプロジェクトである。もし読者の中にプログラミングを始めてみたい、または始めてみたが何をすればいいのかわからない、という人がいれば、Breakoutに挑戦してみると、プログラミングの力が養えると思う。俺のソースコードの行数の合計は678行となり、一見大きくて複雑なプロジェクトだと思うかもしれないが、最初はシンプルなプログラムから始めだんだん改良して機能を増やしていくうちに行数が増えていったので、臆せずできるところから始めていってほしいと思う。

 

ソースコードはGitHubで公開してある。

github.com

以下、ゲームの画像を掲載しておく。

f:id:pepsisoda:20190815202228p:plain

f:id:pepsisoda:20190815202339p:plain

f:id:pepsisoda:20190815202233p:plain

f:id:pepsisoda:20190815202310p:plain

 

一人暮らしと自由

一人で住み始めて2か月になる。俺は学生寮に住んでいるので完全に一人暮らしというわけではなく、食事は朝晩毎日出るし、月に一回清掃もしてくれるし、門限もあるが、他の家事とかいろいろは自分でやらなければならない。一人暮らしを始めて、気づいたことがいくつかある。

 

まず、生活にはやりたくないけれどやらなければならないことがたくさんある。掃除や洗濯などの家事はもちろん、買い物やお金の管理、電気、水道の契約や請求書の支払いなど、今まで気にも留めなかった細かいことがたくさんある。家族と住んでいたときは、自分の部屋の掃除と、交代でトイレ掃除、あと洗濯物をたたんだりといった小さな家事を嫌々やっていたが、いざすべて自分でやるとなるとかなり面倒だ。今までほとんど全部やってくれていた親に感謝である。

 

それに、時間というのはかなり限られた資源である。アメリカに住んでいたころは、シニアイヤーになってから少し忙しくなったものの、時間を持て余すことが多かった。それは多分、自分のやらなければならないことや、責任が少なかったからだろう。家事とか生活の面倒なことは大方親がやってくれていたし、受験生という意識もまだ薄かったからあまりまじめに勉強せず、くだらないことで時間をつぶすことがしばしばあった。しかし、一人で住み始めてから、上で言ったようにやりたくない面倒なことに時間を取られ、それに公式に受験生となってたくさん勉強する必要が出てきたため、今のままの生活では1日が24時間では足りないという状況に陥っている。結局、前々からしようと思っていた手続きを後回しにしたり、時間がなくて勉強を断念したり、あとで読もうと思って買った本が時間がなくて山積みのまま放置されていたりする。今一度生活を見直して、有効な時間の使い方をせねば。

 

そしてなりより強く感じたのは、自由は怠惰な生活につながるということである。早く起きろとか、家事を手伝えとか、遊びすぎるなといってくる親がいないことは、解放的でいいことだと思っていた。確かに、親元を離れて自由が増えた。しかし、自由さは意識しないと怠惰さにつながる。実際、俺はもともと6時ごろに起きていたのが今では予備校に間に合うぎりぎりの7時半くらいに起きているようになった。家事も面倒でさぼったり、自炊がめんどくさくてコンビニで済ませたりと、自律のない生活を送っている。金遣いも少々荒くなり、毎週のように遊びに行ったりしている。このようにあまりの自由で、生活リズムが乱れてきている。明らかな自己管理能力の欠如である。結局怠惰さから無駄が増え、時間がとられ、本当の意味で自由でなくなっている。自分が時間をコントロールするのではなく、時間に自分がコントロールされてしまっているのだ。

 

受験生はしょせん勉強しかしないから結構自由時間ができるだろう、といった甘い考えを日本に帰ってくるまで持っていて、余った時間は読書や運動、プログラミングといった趣味とか新しい分野の開拓、勉強にささげようと思っていた。しかし実際には全然時間がない。今の俺の一日は、朝ぎりぎりに起きて、予備校に行って、寮に帰ってきて友達と飯を食って話して、自室に戻って少し勉強をしてもう遅いから寝る、という自律のない生活になっている。予備校は友達がたくさんいてとても楽しいのだが、個人的な自由な時間が取れておらず、俺の理想とする生活とは程遠いものになっている。

 

今まで自分を管理してくれた親には改めて感謝するとともに、自分の生活を見直して、もっと規則正しく、無駄のない生活を送りたい。そうして本当の自由を手に入れ、自分の趣味の追求とか、読書とか、プログラミングの勉強とか意味のあることに時間を費やしたい。具体的な目標としては、ひとまず近いうちに6時起床、11時就寝、定期的に運動、毎日読書のリズムを確立し、家事は後回しにせず必要な時にすぐすませるという意識を持ちたい。

東北の旅

俺は先週、東北を回る旅に出てきた。本来の目的は東北大学のオープンキャンパスを見に行くことだったが、東北に住んでいる祖父母に合いたい、地元宮城の友達とも会いたいという思いもあり、結局宮城、青森、山形の3県を4日で回るという超ハードスケジュールになった。

 

旅行を計画するのはこれが初めてで、思ったよりも骨が折れた。行きたいところすべてに行きつつも、予備校を休む日を最小限に抑えるためにうまく日程を調整しなければならない。しかも平日は友達はみな大学に行っているから、遊ぶとしたら休日、というように、様々な制約がある中で、移動手段や移動時間も考慮に入れて、日程を決めるというのは簡単ではない。今回は祖父母の家や友達の家に泊まったが、これでホテルなどに泊まるとなると計画はもっと大変になるだろう。

 

しかし、旅の計画を立てるのは楽しいことも確かだ。俺は観光しに行ったわけではないが、行く先々のことを考えたり、何を見て何を食べて誰と会えるのかに思いをはせたりするのはこの上ない楽しみである。東北は1年訪れていなかったから、懐郷の思いが募った。

 

移動にはかなり疲れたが(合計で24時間以上!)、旅はとても楽しいものだった。祖父母の元気そうな姿を見て安心し、都会の喧騒から離れてゆったりと過ごした。また中学の友達とも久々に遊び、中学以来変わらない仲の良さで大いに楽しんだ。うなぎや牛タンなどおいしいものもたくさん食べた。最後に東北大のオープンキャンパスを見に行って学生の楽しそうな話を聞き、すごい研究に触れ、大学受験へのモチベーションが高まった。

 

こんな感じで非常に有意義な旅行となったが、その中で感じたことがある。それは、東北は東京よりも時間がゆっくり流れているということだ。帰国以来東京に住んでいるが、東京での生活は時間的にも精神的にも忙しいと感じている。勉強をしたり家事をしたり遊びに行ったりと時間的にもかなり忙しいのだが、精神的にも落ち着くことができることが少ない。外を歩いても多くの人々が忙しそうに速く歩いているし、話し声や車の音、店の音楽など、静かにゆったりとできる時間というものがここではあまりない。物が多くて楽しいのは確かだが、故郷に帰って落ち着きたいという思いが募ってきていた。

 

そこで今回東北に行ってみると、思った通り大いにゆったりとできた。俺が行ったところは山形を除きど田舎というわけではないが、それでも東京よりずっと落ち着いた雰囲気であった。見渡す限り灰色の高層ビルが立ち並ぶ東京とは違い、程よい自然の中に囲まれ、身の丈に合った生活ができた気がした。特に仙台は気に入った。宮城で育った俺にとって仙台は大都会であったが、東京を経験した今、仙台は少し見劣りするのは確かだ。東京ほど高いビルは多くなく、少し外れればもう山の中だ。しかしそれでも、田舎と都会の絶妙のバランスが、仙台にはあると思う。山と海に挟まれた仙台には豊かな自然があり、「杜の都」と呼ばれるだけあって街中にも緑が多い。中心部はかなり人が多いものの、東京のような忙しい印象はあまり受けなかった。それでいて東北最大の都市であるから、買い物には困らないし、遊ぶところも多々ある。観光地やおいしい食べ物もある。仙台は本当に暮らしやすいし楽しい。宮城に住む友人たちの話を聞き、また実際に仙台を見て、また宮城に住みたいなあとつくづく思った。

 

4日間の旅を通して、東北では、時間に追われるのではなく、過ぎてゆく時間を楽しみながら暮らすということができたと感じた。大学はまだどこにするか決めかねているが、たまには都会を離れて田舎でゆっくりとするのもいいなと強く感じた。

アニメという日本文化

最近暗いニュースが多いが、特に心を痛めたのは、京都アニメーションの放火事件だ。35人が命を落としたという事実だけでも非常に悲しいものだが、アニメという日本の宝とも言える文化に、大きな傷がついたことにも、目を背けられない。

俺はアニメをあまり見ない(ジョジョとガンダムは見た。ナルトは途中まで見た。ジブリ映画は結構見るかな。でも最近のアニメはほとんど見ない)。時間がないし、興味もあまりないのだが、正直オタクに少し抵抗があるというのもある。しかし、アニメに対する印象は、最近結構ポジティブになってきた。アニメは貴重な日本文化だと思うようになったからである。

そう思うようになったきっかけは、アメリカに住んでいたときに、日本文化の絶大な人気を経験したからだ。日本の伝統文化は評価が高く、特に忍者や侍は大人気だ。多くの友人がナルトを見たことがあると言っていたし、忍者のコスプレをしてくる人もいた。アニメや漫画といったポップカルチャーも広く受け入れられており、日本人の俺よりも大体のアメリカ人のほうがアニメに詳しいという印象すら受けた(ここで日本人としてのアイデンティティーに危機感を覚えた俺は勉強のためナルトを見始めた)。このような経験から、アニメは単なる娯楽ではなく、独特の日本文化だと理解し、アニメや漫画に対する姿勢が変わった。

島国である日本は、大陸からの文化を受け入れつつ、それを発展させて独自の社会、文化を作り上げた。日本の伝統文化はとてもクールだし、誇りに思う。しかし、アニメや漫画といったポップカルチャーは、どこから生まれ、なぜ人気なのだろうか。起源はどうやら浮世絵にまでさかのぼり、出版物やテレビの普及に伴って発達したようだ。その多様性やクオリティーの高さ、ストーリーの面白さから海外でも人気に火がついたという(見たことがある人はわかると思うが、アメリカのアニメは絵がマジでクソ。スポンジボブですらマシな方。ディズニーはすごいけど)。

近年政府は「クールジャパン政策」と称してアニメをはじめとする日本文化を海外に売り込んでいるようだ。政策の効果は疑問だが、海外の人に日本をもっと知ってほしいという姿勢はいいと思う。来年に東京オリンピックを控え、日本に対する興味は世界中で高まっているはずだから、この機会に日本文化を広く発信して、より多くの人に日本の独特で興味深い文化を知ってもらうことが、京アニ放火で亡くなった人々への、せめてもの供養になるのではないだろうか。