素人プログラマーの日常

効率の良いコード、美しいコードなんて書けません。

javascript はじめました

はい。なんとな~く javascript をはじめました。

 

javascript は C を元に作られているそうなので、一番基本となる繰り返しや条件分岐などは同じ書き方でとりあえず十分通用するのがありがたいところです。それに加えて変数の型や配列などがゆる~い感じで実装されていて、特に文字列やオブジェクトの処理が C と比較すると格段に楽です。楽な反面、あやふやな部分も多く試行錯誤しながらいろいろと作っています。

 

で、今は慣れるための肩慣らしとして簡単に作れそうなものをかれこれ10個以上完成させました。そこでふと気づいたんですが、いくつか作っていくと結局は BASIC のようなコーディングになってしまうのは何故なんでしょうね。オブジェクトやイベント関連の定型的なコードを除くと、関数をサブルーチンとして扱うような形になってしまうんですよね。最初に触ったのが BASIC だったのでこの歳で修正していくのは無理!?私にとってはそれが一番リーダブルなコードということでもあります。

 

まだ所々で突飛なことを試したりしている段階ではありますが、楽しんで作っています。ライブラリを使うともっと楽しそうなこともできそうですが、今のところはゲームを作っていきたいのでライブラリに依存せず HTML5 でまだ作っていこうと考えています。

 

でも、なかなか難しい面もあります。何が難しいかというと、動きのあるゲームには向いてないんですよね。javascript はインタブリタなのでどうしたって処理速度が気になります。シビアな操作が必要なアクション系のゲームでフレームが飛ぶのは命取りになります。またコーディングもアクション系には向いてません。その場でウエイト(スリープ)することができずに、毎回何ミリ秒後に関数へ飛ばしてやらないといけない。例えば何の操作も必要無いアニメーションを描画しようとすると、フレームが更新されるごとに逐一関数の頭から実行しなくてはならないので、アニメーションを制御するグローバル変数が最低限必要になってきます。そしてそのグローバル変数による分岐や計算が無駄に増える結果となります。

 

だもんで、javascript では動きのシビアなゲームは避けるのが無難といった感じですかね~。

 

動きのあるゲームとして手始めに作ったのがこれ↓です。
http://gensproducts.com/products/js/011_shootdown/main.html

SHOOT DOWN

SHOOT DOWN

以前 C で作った"SHOOT DOWN"の移植です。移植といっても元のコードを見ずに作ったので中身は似た動きをする別物ですが。待ち時間をいろいろ試しましたが、どうもしっくりこない(動きがカクカク)のでそういうもんだと諦めました。ゲームの内容として面白いところは特にありませんが、いきなりレベル100に挑戦すると余裕で弾き飛ばされる鬼畜仕様になっています(※易しいレベルで修業しても無駄です。瞬殺です)。こうした1フレームが気になるものはNGですね。RPGとか何かまったり系のゲームを考えていくことにします。

 

で、シューティングを作った後の作品がこちらのパズル↓。
http://gensproducts.com/products/js/012_puzquest/main.html

Puz Quest

Puz Quest

これはキー入力があったときだけ描画処理が発生するものの、一部のギミックは連続したアニメーション風になっているので処理の順番やら何やらで苦労しました。おおよその動きが完成したところで付け足し付け足しでギミックを追加していったので、作った本人でも訳が分からないネストや分岐だらけのコードに仕上がっています(笑

 

まず「こういうギミックがあったらパズルが面白くなりそうだ」というのを考えて、そこから「このギミックを使えばこんな仕掛けができる」なんてざっくりとしたアイディアが湧いたら、だーっとマップを作ってテストプレイ。だいたいは妄想通りに仕上がりますが、マップを大きくしすぎるとだるくなるので若干小さめにしてあるんですよね。詰め込むのに苦戦することもありました。このギミックに関しては、あえて説明はしてません。ぱっと見でおおよその使い方はわかると思います。

 

でもこれ、パズルゲーム好きな人はハマるような気がします。それほど深く考えずに作りましたが自分でプレイしてもなかなかどうして簡単にはクリアできないマップもあり、パズルとして程良い難易度になったのではないでしょうか。まだまだ一手一手をきっちり考えて作ればかなり難解なマップができそうですし、他にも追加できるギミックはたくさんありそうです。基本的なルールは単純なだけに奥が深い!?

 

プレイヤーが自分でマップを作れるように…なんてこともできれば良いのですが、作ったら共有して遊びたいですよね?でも残念。javascript だとサーバーにマップを保存して共有することはできなそうです。ブラウザで動く javascript ではなくサーバー側の言語を勉強したら実装するかもしれませんが、今のところその予定はありません。

 

そんなこんなで javascript に少し慣れてきましたが、まだまだ初心者だと自負しております。

 

上記のリンク先でもランダムに他の作品が出てきますが、一覧はこちら。
http://gensproducts.com/products/main.html

※基本的に IE では音を鳴らすときにエラーが発生して止まります。
ゲームで音も鳴らせないなんて IE のバカっ!