「
創
り
た
い
人
」
に
向
け
て
贈
る
ゲ
ー
ム
制
作
雑
誌
「
創
り
た
い
人
」
に
向
け
て
贈
る
ゲ
ー
ム
制
作
雑
誌
#ga ma g ; The ga me c r e a t i on ma ga z i ne
#ga ma g ; The ga me c r e a t i on ma ga z i ne
プログラム手取り足取り
グラフィックの書き方
物語の作り方
楽しい投稿ゲーム
プログラム手取り足取り
グラフィックの書き方
物語の作り方
楽しい投稿ゲーム
ライセンスについて
ライセンスについて
このたびは「がまぐ!」をお手にとって下さってありがとうございます。
この雑誌を使用するに当たっていくつかお願いがありますのであらかじめお読み 下さい。
本文とプログラムについて
本文、画像、プログラムは「クリエイティブコモンズ 表示(CC-BY 2.1 日本)」です。 出典を明らかにする限り自由に使って構いません。
出展:がまぐ! 2010/冬
雑誌全体について
雑誌本体の PDF ファイル、画像データ、冊子形式の物を含めて、自由にコピーし て配布して構いません。このとき、コピー・印刷に必要な代金を取っても構いません。
……が、高い値段をつけても、無料に手に入る物を買ってくれる人がいるかどうかは 謎です。
サポートについて
サポートについて
記事の内容についてのお問い合わせ、ご意見等はサポートページで承ります。直 接著者や編集者に言うのもありです……が、どちらにしても必ず帰ってくるかどうか は判りません(すみません)。
記事の訂正、バグ修正などもサポートページで行いますので、定期的に見て下さ ると助かります。
サポートサイト
https://sites.google.com/site/gamagreader/
ダウンロードコンテンツに関して
ダウンロードコンテンツに関して
ツール・サンプル等のダウンロードできるコンテンツに関しては、その作者のサ ポートとなります。こちらでも確認しますが、要望、報告等は直接作者へお願いします。
巻頭言「ゲーム作ろうぜ!」
巻頭言「ゲーム作ろうぜ!」
この世界にある全てのゲームを遊び尽くすことは可能だろうか。
そんなことをふと考えます。パッケージソフトだけで 1 年に約 1000 本のゲームが出ている現代。毎年 1000 本ずつ増えていくものを全部追いかけていっても 1 日 2 本以上遊ぶ必要があります。
その上、ゲームにはそれなりに長い歴史があります。昔のゲームを遊ぶ方法だって、今ならばたくさんあり ます。PSP,Wii,PS3,XBox360 などなど。そんな全部のゲームを集めると、それこそ何万本にもなるでしょう。 このペースでゲームが出るのならば、一生かかってもゲームは遊びきれないと思います。
では、このゲームがどこからやってくるのか考えたことはあるでしょうか?
いつの間にかできあがって、それが天から降ってくる……というわけではありません。神様がなにもないと ころから作って遣わしてくる……というわけでもありません。
ゲームは、「誰かが作っている」のです。それこそ、世界で何万人もいるゲームクリエイターの人たちが。 ゲームクリエイターは神様みたいな者だって? お説ごもっとも。確かに、ゲームクリエイターは遊んでい る人からすれば神様みたいな者かもしれません。じゃあ、そのゲームクリエイターはいつゲームクリエイター になったのでしょう。いきなり神様になったわけではないはずです。ゲームクリエイターだって、ゲーマーだっ た、ことによるとゲーマーですらなかった時代があるはずです。一介のゲーマーだった誰かが「ちょっと作って みたい」と考えて手を出し、それが徐々に形になって行くにつれてそれはゲームになり、作っている人はゲー ムクリエイターになっていったのです。
昔、今から 10 年とか 20 年とか前は、ゲーマーとゲームクリエイターの境目はもっとあいまい曖昧でした。ゲー マーはちょっと思い立ってゲームを作ることができましたし、ゲームを作って人に見せる環境だってありました。 それが、今できるでしょうか?
もちろんできます。それどころか、10 年前、20 年前よりもずっと簡単に作れるような時代になってきました。 確かにグラフィックにしても世界の広さにしても 10 年前、20 年前よりもずっと高度になっています。が、幸い にして現代はプロ用のツールが無償で使えるようになってきましたし、何よりも作った者を人に見せるには昔 よりもずっといい環境になりました。
いい時代になりました。
でも、なぜか「ゲームは神様が作るもの」と思われてしまっています。 いいえ、違います。
ゲームは誰でも作れるものです。作文をするように、ノートの端に漫画を書くように、カラオケで歌うように、 ゲームだってすぐに作れます。ただ、特に理由もなく、世間に広く「作れない」と思われているだけです。確か に難しいゲームは作るのが難しいですが、簡単なゲームなら作るのは簡単です。そして、普段私たちが遊ん でいるゲームの大半は、実は「難しいところ」を遊んでいるのではないのです。
この本は、本当の初心者に向けて、ゲームの制作を薦める本です。数学や英語などの難しい知識はいり ません。資格はただひとつ「ゲーム作りたい」という意志だけ。そこさえあれば、あとは何とかなります。 誰にでもゲームは作れます。そして何より、ゲーマーにとって、ゲームを楽しむ最大の方法は、ためしに自 分で作ってみることです。
作ってみませんか? ゲームをもっと楽しむために。
がまぐ! 編集長 @117Florian
ゲームってなに?
ゲームってなに?
@117Florian ゲームは好きですか?
私は大好きです。どんなゲームも遊び ます。海外製の FPS もやりますし、ノベル ゲームだって、3D アクションゲームだっ て、ソーシャルゲームだって、携帯電話の ゲームだって遊びます。
いいゲーム、つまらないゲーム、楽しく て仕方がないゲーム、悲しくなるゲーム。 ゲームをやっていろいろ考えたりはしま すが、ゲームが嫌いになったことなんか 一度だってありません。
もちろん、ゲーム以外の楽しみもたくさ んあります。けど、やっぱりゲーム。
私は、ゲームが大好きです。
ところで、ゲームってなに?
何かひとつ、好きなゲームを頭に思い 浮かべましょう。アーケードゲームの Project DIVA が出てきた人も、Final Fantasy XIII が出てきた人も、ひょっと すると Call of Duty が出てきた人もい るかもしれません。何でも構いません。そ のゲームをやっていることが大好きで、 目を閉じてもそのゲームの動いている姿 が想像できるならなおいいです。
さて、ゲームを遊んでいる最中、私たち は何をしているでしょうか?
まず、画面を見ていると思います。もし かしたら Jubeat みたいに露骨にそれと 判る画面になっていないゲームを想像し ていた人もいるかもしれません。テレビ ゲームですらないゲームセンターの「ワ ニワニパニック」を思い浮かべる人もい るかもしれません。
あと、音も聞いていると思います。こと によっては手に振動が伝わってきたり、 何かが光ったりということもあると思いま す。
これらを全部ひっくるめて「出力」と呼 びましょう。出力のないゲームはどうやら なさそうです。
更に、何かの操作をしていると思いま す。操作は何でも構いません。古典的な ゲームにおいてはコントローラを使ったり、 レバーやボタンだったり、最近は画面を 直接触るのもあります。NintendoDS の ようにタッチパネルを使ったゲーム機は 増えてきましたし、ちょっと変ったところで
は、コントローラを振り回したり、画面に向 かってゼスチャーしたりすることだってあ ります。
いろんな方法が考えられますが、これ を全部ひっくるめて「入力」と呼ぶことに しましょう。
いろいろ考えてみると、どうやらゲーム には最低限「入力」と「出力」が必要にな るように思えます。
ゲームには実はもうひとつ必要なもの があります。それは「ルール」です。入力 をゲームが受け取って、それと無関係な 出力をしたのでは残念ながらゲームにな りません。コントローラはつながっている けど何をしても何も起こらないゲームを 考えてみましょう。露骨にくそゲーですね。 これがゲームではなくて DVD で映画を 見ているとなるとどうでしょう? これな ら別にコントローラで操作できなくても十 分おもしろいです。入力はなくてもおもし ろいものは作れますが、入力を元に何か が行われないと、それはゲームにはなり ません。
この、「入力」を元に、何かの「ルール」 で決められた「出力」を行うようなもの、 それがゲームであっても、ゲームでなくて も構わないのですが、そういったものを
「インタラクティブ性(interactivity:双方 向性)」と言います。特にインタラクティブ 性のあるものの中で、インタラクティブで
あることを楽しんでいるものを、ここでは
「ゲーム」と呼ぶことにしましょう。
どうですか? 皆さんの好きなゲーム はきちんとこれに当てはまりそうですか?
ゲームの動き
話を進めるために、ごくごく普通の ゲームをひとつ想像してみたいと思いま す。
• テレビにつながる
• ゲーム機に、DVD-ROM の形でソ フトを入れる
• コントローラで動く
ゲームのジャンルはいろいろあるかも しれませんが、この際どんなゲームの ジャンルでも構わないとしましょう。 携帯ゲーム機でも構いません。今時の 携帯ゲーム機はテレビにつながるように もなっていますので、だいたい一緒です。 ゲームの話をする前に、まずはテレビ の話をしなければなりません。皆さんが
見ているテレビは、本当は絵は動いてい ません。
そんな馬鹿な、と感じるかもしれませ ん。だいたい、テレビに映っている人だっ て動いているし、中の人がいないアニメ だって動いているんだから、ゲームだって 動いてるはずだと。
ところが、この「動いている」という感じ、 実は人間の錯覚が引き起こしているの です。
まず、人間の目には「残像」という現象 があります。これは、一瞬光ったものは、 光ったあとちょっとの間まだ光っているよ うに感じる、というものです。だいたい、人 間の目の残像は 0.2 秒くらい残っている そうです。ということは、最低でも 1 秒間 に 5 回ぐらいぴかぴか光っているものは、 何となく光り続けているように見えそうで す。
さらに、人間の脳は、「似たようなもの を続けて見ると、それは同じものである」 と錯覚するという機能がついています。 例えば、バナナを目の前でゆっくり回して みましょう。ゆっくり回っている限りは、そ れはひとつの「バナナ」としてとら捉えられま すが、これをでたらめな方向に回転させ て、パッと見てはすぐ隠し、ということを繰 り返すと、それが同じバナナなのか、そも そも違うものなのかが判らなくなってきま
す。
皆さんが普段見ているテレビは 1 秒間 に 60 回ぐらいの早さでちらちらと光って います。先ほどの残像が 0.2 秒くらいで すから、それに比べるとだいぶ早いです。 さらに、テレビの表示されている絵は、 0.016 秒(1÷60 秒)で少しずつ切り替 わっていきます。少しずつ変っていけば、 それがひとつのものだとわかりますし、そ れが動いていると錯覚できます。なので、
「本当は動いてない」ものを見ても、私た ちは「動いているかのように」感じること ができます。
ゲームは出力のうち、特に表示にテレ ビを使うことが多いです。テレビがそもそ も 1 秒間に 60 回しか絵が出ていないの で、ゲームもそれに併せて動いています。 0.016 秒に 1 回表示される内容は、前 の絵が出てから今の絵が出るまでの間 に書かれます。この切り替わるタイミング
を「フレーム」と呼びます。
1 回のフレームの中では、最低 1 回の 入力と、最低 1 回のルールの処理と、最 低1 回絵を描くのをゲーム機が行ってい ます。
ゲーム機はほとんどがコンピュータで 動いてます。コンピュータはあらかじめ作 られたルール(通常は「プログラム」とい う形で持っています)で何かの処理を行 い、その結果を表に出す機能がついてい ますので、先ほどの言い方をすると 1 フ レームに付き 1 回プログラムが動いてい る、という形になります。
実際には 1 フレームだけで全部の処 理が完結することはあまりありません。 10 フレーム前の入力を使って出力をし たり、入力されたものをずっと覚えておい たりと様々な使い方をします。が、結局 1 フレームに付き 1 回のプログラムをうまく 使って動いていることには違いはありま せん。
シミュレーション RPG やノベルゲーム は 1 フレームじゃなくて 1 ターンで動い ているって? 確かにゲームのルールと してはそうですが、それを実現しているプ ログラムは 1 フレーム単位で動いていま す。何せ、入力された内容をいくらでも覚 えておくことができるので、ちょっとぐらい フレームをまたいでも全然大丈夫です。 そう思って見てみると、ゲームって結構
単純なルールで動いているように思えま す。
画面をかく
では、今度はどうやってコンピュータが テレビに絵を描いているかを見てみま しょう。
テレビがそもそも 1 秒間に 60 回ちら ちらと絵を光らせているという話を先ほ どしました。ということは、絵を出す直前 までにコンピュータの中で絵を描いてお いて、それをテレビに送りつければうまく 表示されてくれそうです。
画面に出す絵をとっておくコンピュー タの中の部分のことを「フレームバッファ (frame buffer)」と言います。フレームは 先ほどから何度も出てきている 1 回の 表示の間のこと、バッファは「一時的にた めておく」という意味のコンピュータ用語 です。
コンピュータは、1 フレームに 1 回フ レームバッファに何かを書き込みます。そ の上で、全部書き終わったらそれをテレ ビに出します。
とはいえ、書いている最中のものが見 えてしまっては困ります。テレビが 1 枚の 絵を表示するのにはまさに 0.016 秒か かりますので、フレームバッファに直接書 いてしまってはどうやっても作りかけのも のが見えてしまいます。
そこで、フレームバッファを 2 枚用意し ます。
そのうち、片方だけしかテレビには出 ません。もう片方には書いても画面には 映らないのです。見えない方のフレーム バッファに書き込んで、もう大丈夫になっ たら見えているフレームバッファを入れ替 えます(フリップ)。すると、うまい具合に書 き込みが終わったフレームバッファだけ を表示させることができます。入れ替え たら、今度はさっきまで画面に映ってい た側のフレームバッファに次のフレームを 書き込みます。
このやり方を「ダブルバッファリング」と 言います。
通常、フレームバッファに何かを書く際 には専用の小さいコンピュータが担当し ます。この小さいコンピュータは、できる ことは限られているのですが、その代わ
り凄く速く動きます。このコンピュータは 通常、小さい図形を書くことができます。 この図形の中にはあらかじめ用意してあ る絵をは貼り付けることもできます。この図 形のことを「テクスチャーマップドポリゴ ン」と言います。ポリゴン、というのは多 角形のことです。もっとも、多角形とか言 いながら、多くの場合使えるのは三角形 くらいですが、三角形を組み合わせれば どんな多角形でも書けますし。
ポリゴンという言葉は何となく聞いた ことがあるかもしれません。ゲーム機の 性能を表現する際にも「1 秒間に何千万 ポリゴン」という言い方をしますし、コン ピュータで描いた絵のことを何となく「ポ リゴン」と読んだりもします。電脳ポケモ ン「ポリゴン」の語源もこれですね。そう 思ってポケモンを見てみると、何となく電 脳ポケモン「ポリゴン」は多角形でできて いるような気もしてきます。
ゲームのリソース
なにも、ゲームはプログラムだけで動 いているわけではありません。確かに 1 フレームに 1 回動いているルールはプロ グラムでできているかもしれませんが、先 に書いた「ポリゴン」を表示したり、音楽 を演奏したり、場合によってはお話を流し たりするのはプログラムだけでは実現で きません。プログラムで表現するための
元になるデータが必要です。
このデータを全部ひっくるめて「リソー ス(resource:資源)と呼ぶことにしましょ う。
例えば 3D でかかれたキャラクターが いたとします。これをコントローラで前後 左右に動かすとしましょう。まずキャラク ターがどういう形をしているのかをコン ピュータに教えなければなりません。キャ ラクターはポリゴンで描かれますので、 ポリゴンの元になるそれぞれの頂点の位 置をデータとして持っておく必要がありま す。ポリゴンの中に描かれてある絵もど こかにとっておかなければなりません。 このキャラクターは歩く時に手や足を 振って動くと思います。ということは、そ れぞれのポリゴンの位置が徐々に変化 するということです。変化するのであれ ば、今度はその位置もデータとしてとって おく必要があります。
3D のキャラクターだけではありません。 絵として書かれたものだって、下手をす ると画面に出ている文字だって用意しな ければなりません。絵のデータは画面に 表示される大きさで、テレビの粒(これを ピクセル(pixel:画素)といいます)のそれ ぞれの色としてとっておく必要がありま す。
サウンドも同様です、音楽を再生した り、そもそもコンピュータに音楽を演奏さ
せたり、人間の声を再生させたりする際 にもリソースが必要です。音楽や人間の 声は実際に演奏しているところを録音す ればそのまま使えますが、コンピュータに 演奏させたりさせ始めると、今度は音符 のデータなどもとっておく必要が出てき ます。
それどころか、例えば RPG で「どこで 敵が出てくる」という情報や、「ここでこ のセリフを言う」という情報など、シナリオ と呼ばれる物すらも必要です。シナリオ、 と一般的にいうと、映画などの演技の元 になる脚本のことを指しますが、ことゲー ムにおいては演技だけを指すわけではあ りません。何かゲームの中で起きるとして、 それがいつ起きるのか、どんなときに起 きるのかということを記したものは全部 シナリオです。ノベルゲームや RPG じゃ なくてもシナリオがないとゲームは進め られないことが多いのです。
こう考えると、ゲームを作るのはプログ ラムよりもリソースの部分の方がずっと 大きそうです。実際、プログラムはリソー スをつなぎ合わせて、ルールを実現する ための「のり糊」のような役割を果たしている だけで、ゲームの中心部分にあるわけで はありません。
ゲームはあくまで「インタラクティブ 性」が中心で、それを実現するためのリ
ソースとプログラムがそろって初めて ゲームとして楽しめるようになるのです。
で、結局、ゲームってなに?
さて、話が戻ってきました。
ところでゲームってなんでしょう? 確かに「インタラクティブ性」があるも のはゲームに見えます。「インタラクティ ブ性」がないものでも十分楽しいのです が、それはゲームとは呼べないようです。 「インタラクティブ性」も、ただそれがあ るだけでは楽しくありません。インタラク ティブ性を使って、ルールを元に娯楽を 提供してこそのゲームです。ゲームがイ ンタラクティブ性を持って、人間の側もそ れに関わって、そしてゲームと人間が一 体となったときに初めてゲームは輝きま す。
ゲームは人間が楽しむための娯楽の、 現代においては特に大きく進歩した到
達点です。物語、絵画、音楽、ダンス、ス ポーツ。今まで、人間が楽しんできた娯 楽にはたくさんの種類がありますが、こと ゲームというのはその全ての良さを取り 入れて高度に完成したものと言えます。 なので、「映画のような」とか「音楽のよう な」という言い方は全然ゲームをうまく表 していません。ゲームは、ゲームだから楽 しいのです。
ゲームって、楽しいよね。
コンピュータゲームの基
コンピュータゲームの基
本構造
本構造
@PetitCafeSoft
■はじめに
コンピュータゲームを作る前に、ふだん 遊んでいるコンピュータゲームがどうい うしくみで動いているかを学んでみましょ う。ゲームは絵や音楽、文字メッセージな どの「データ」と、それらを組み合わせて 動かす「プログラム」によってでき上がっ ています。いくら主人公の絵を用意して みても、コントローラの操作に合わせてそ れを動かさなければゲームになりません。 音楽だって、タイトル画面でエンディング 曲が流れてはどうにもならないわけです。 この記事では、絵や音楽は既に用意 できているものとし、それらを動かすプロ グラムとはどういうものか、どういうことを 考えながら作るものなのかを学んでいき たいと思います。なお、絵や音楽の作り 方にも興味のある人は、この本の他の記 事で学んでみてください。
さて、みなさんの中にはプラモデルを 作ったことがある人も多いのではないで しょうか。ロボットや飛行機の模型を一か ら作るのはよほど模型作りに慣れた人で ないと難しいですが、パーツを組み合わ せていくプラモデルなら初めての人でも 何とかなりますね。そう、ゲームプログラ
ムも同じことで、既にある“骨組み”や
“便利なパーツ”をプラモデルの要領で つなぎ合わせて作ってあるのです。 今から 30 年ほど前、最初のころの ゲームは、1 本開発するにも全くの一か ら始めなくてはなりませんでした。けれど そのころと違い、今ではあらかじめゲー ムの“骨組み”や“便利なパーツ”がたく さん用意されています。“骨組み”のこと を「フレームワーク」、“便利なパーツ”の 集まりを「ライブラリ」と呼んだりもします。 他の記事で紹介している XNA のように、 フレームワークとライブラリが一組になっ ていることも多いです。もちろん、模型の 上級者がプラモデルを色々と改造するよ うに、ゲーム作りも上達すればフレーム ワークやライブラリの枠に収まらないもの を作ることもできます。
■試しに考えてみよう
今回、例題として考えるのはオニごっ こゲームです。10m 四方の庭の中に、プ
レイヤーが動かすキャラクターが 1 体、コ ンピュータが動かす敵キャラクターが 3 体いることにしましょう。合計 4 体、“動く もの”があることになります。これらひとつ ひとつを「オブジェクト」と呼ぶことがあり ます。こうした「オブジェクト」ごとに分け て考えるのが、プログラムをうまく作るコ ツです。
最初はプレイヤーがオニです。細かい 説明は後回しにして、実際にどんなもの になるかイメージしていきましょう。
■まずは初期化してみる
まずは「初期化」です。、最初、4 体が 庭の中のどの位置に立っているか決め なくてはいけません。中学校で、X-Y グラ フを習います。庭の中のどこに立ってい るかを表すには、この X-Y グラフで考え るのが一番です。とりあえず、四隅に 1 体 1 体が立っていることにしましょう。プ レイヤーキャラクターは(1, 1)。他の 3 体 は(1, 9),(9, 1),(9, 9)からスタートするこ とにします。
ところで先ほど、4 体をそれぞれオブ ジェクトと呼ぶという話をしましたが、オ ブジェクトはこのように、X,Y 座標などの 情報をそれぞれが持っています。必要な ら、プレイヤーキャラクターは赤い服を、 敵キャラクターは青や緑の服を来ている といった情報を持たせることもできます。
■毎回呼ばれる更新処理
さて初期化が終わりました。ここからが オニごっこの本番です。オブジェクトが それぞれに動き回ります。他の記事を読 まれた方はもう知っているかもしれませ んが、コンピュータゲームの世界では、1 秒間を 30 回だとか、60 回だとか、等間 隔に分けて考えます。ここだけは現実の 世界と違うところです。この間隔ごとに、 先にお話ししたフレームワーク(もう覚え ましたか? “骨組み”のことでしたね) から「さあ、オブジェクトをどう動かす の?」と呼び出しがあります。この呼出し ごとの手続きを「更新処理」と呼ぶことが
あります。
まずはプレイヤーキャラクターをどう動 かせばいいか、考えてみましょう。
1. 当然コントローラで操作するの だから、コントローラが今どう なっているのか、どのボタンが 押されているのかを知る必要が あります。
2. コントローラの状態をチェック したら、次はそれに応じてプレ イヤーキャラクターを動かしま す。要するに、プレイヤーキャ ラクターの居場所を表す X や Y 座標を変化させてやればよいの です。ただの足し算引き算です。 例えば(1, 1)だった座標が
(1.01, 1)になれば、右に
0.01m(=1cm)動いたことにな ります。
3. 最後に、画面にプレイヤーキャ ラクターの絵を表示します。 このうち 1 と 3 は、「コントローラの状 態を知るための“パーツ”」「画面に絵を 表示する“パーツ”」が、ライブラリにあら かじめ用意されています。
■腕の見せどころ
次はコンピュータの動かす敵キャラク ターです。プレイヤーがオニなら、敵は子 ですから、オニから逃げればよいわけで す。といっても、でたらめに逃げては面白 いゲームになりません。考えてみてくださ い。あなたが本当にオニごっこをしている としたら、どうするでしょうか?
1. まずはオニがどこにいるか、確 認するのではないでしょうか。
プレイヤーキャラクターのオブ ジェクトをチェックすれば、そ の X,Y 座標を知ることができま す。
2. オニの居場所を確認したら、次 はそれに応じて子(敵キャラク ター)がどう逃げるべきかを考 えましょう。
3. 上で考えたように、キャラク ターの居場所を表す X や Y 座標 を変化させます。
4. 最後にやはり、画面にプレイ ヤーキャラクターの絵を表示し ます。
ポイントは 2 の部分。これにはいろい ろな考え方があります。とにかくオニから 離れる、隅に追い詰められないよう広い ところへ逃げる、オニをぎりぎりまで引き つけてかわす、他の子の陰に隠れる…… プログラマの腕の見せどころと言えるで しょう。これを思考ルーチンと言います。 聞いたことがある人もいるのではないで しょうか。よく知られているのは将棋や囲 碁のゲームの思考ルーチンですが、最近 ではアクションゲームでもかなり凝った 思考ルーチンを持った敵キャラクターが 登場するようです。例えゲームのルール はシンプルでも、思考ルーチンがよくで きたゲームであれば十分遊べるものにな ります。
敵キャラクターはこれで終わり、では ありません。敵は 3 体いましたね。えっ、3 体ともやることは同じなんじゃないかっ て? ごもっとも。いちいち説明する必要
はありません。いや説明どころかプログラ ムそのものも、同じ内容を 3 回も作る必 要はありません。「繰り返し(ループ)」と 言って、同じ動作を何度も続けて行わせ ることができます。
さて、更新処理の最後はヒットチェック、 つまりオニが子にタッチしたかどうかの チェックです。ここでもループを使いま しょう。
1. オニ(プレイヤーキャラ)の X,Y 座標を取得。
2. 敵キャラクター 1 の X,Y 座標を 取得。
3. 両方を見比べて、0.5m 以内で あればタッチしたと考える。 もしタッチできていなければ、敵キャラ クター 2,3 についても手順 2,3 を繰り返 せばよいのです。3 体ともタッチできてい なければ、ゲーム続行です。捕まえたら、 とりあえずゲーム終了ということにしま しょう。これで一応、ゲームの形になりま した。この敵のようにオブジェクトとして は 3 体でも同じ動作をするものは、プロ
グラム上では 1 種類のものとしてあつか うことができるので作るのが楽です。特 にループの考え方と組み合わせると、大 きな働きをしてくれます。
■もっと工夫してみよう
ここまで解説した例ではプレイヤーが オニになって、敵キャラクターを捕まえる だけでした。でももちろんこれでは物足り なくて、「オニごっこなんだから、逃げる方 もやってみたい」と思ってしまうわけです。 今度はタッチしたあと、タッチされた敵が オニになり、プレイヤーが子になって逃げ ることを考えましょう。これまでは、ずっと プレイヤーキャラクターがオニ、敵キャラ クターが子という“決め打ち”でしたが、 これからは 4 体のオブジェクト、誰もが オニになる可能性があります。ところで、 その時どのオブジェクトがオニなのか、 どうやってチェックすればいいのでしょう か?
2 つ考え方があります。1 つは各オブ ジェクトそれ自身に、自分がオニかどう かをチェックさせる方法。もう 1 つは、(画 面には表示しないが)審判に当たるオブ ジェクトを作り、それに代表して誰がオニ か記憶させる方法です。前者は新たにオ ブジェクトを作る必要はありませんが、プ ログラムの書き方を間違えてオニが 2 人 になってしまうこともあります(それもおも
しろいかもしれませんが)。後者は新たに オブジェクトを用意する必要があります が、例えば「オニごっこに 3 分間のタイム 制限をかけたい」とおもったときなど、審 判オブジェクトがあったほうが便利です。
じつはどちらでもよいのです。今後、 ゲームをよりおもしろいものに改良した いと思ったとき、どちらが便利そうかで決 めるとよいでしょう。同じ内容のゲームで も、作り方はけして 1 つとは限りません。 いくつも解決方法があるのです。
誰がオニかチェックする方法は決めま した。次に考えることは何でしょうか。プレ イヤーキャラクターは……コントローラで 操作するだけですから、オニが子になっ ても大して違いはないですね。問題は敵 キャラクターです。今のままだと、オニに なったはずの敵がオニ(自分自身?)から 逃げ回ってしまいます。その敵が子場合 とオニと場合とで、思考ルーチンを切り 替えなくてはいけません。前に説明した 敵キャラクターの動きの手順 2 の部分
が思考ルーチンだったことを思い出して ください。ここをどうすればいいのでしょ うか?
● もし子だったら→逃げるために どう動くのがいいか考える (前に作った思考ルーチン)。
● もしオニだったら→子を追いか けるにはどうすればいいか 考える。
この「もし子だったら」「もしオニだった ら」で手続きを分けることを「条件分岐 (ぶんき)」と言います。繰り返し(ループ) と並んでよく使う方法です。説明していま せんでしたが、これまでにお話しした「コ ントローラの入力が上なら上、右なら右と 移動方向を決める」「オニと子が 0.5m 以内であればタッチしたことにする」と いった手続きも、じつは条件分岐を使う ことになります。
ヒットチェックの部分も同様に、「プレ イヤーキャラと 3 体の敵の座標をループ して見比べる」から「オニと 3 体の子の 座標をループして見比べる」ように変更
してやれば、改良はおしまいです。
■ここまでをふり返って
ここまでにプログラムの流れを進めて いく中で大切な2つの考え方、繰り返しと 条件分岐についてお話ししました。けれ どみなさんはこの 2 つの他に、もっと大 切な考え方にすでに触れているのです。 いったい何だと思いますか? 「繰り返 しと条件分岐以外は、常に上から下へ、 順番にものごとを処理している」というこ とです。これを「逐次(ちくじ)処理」と言い ます。
例えば学校の運動会では紙に印刷し たプログラムが配られます。最初はあい さつ、次はラジオ体操、その次は 2 年生 の徒競走……。運動会はプログラムに書 かれた順番で進行します。一方、オニ ごっこのゲームプログラムは最初に初期 化で始まり、毎回のプレイヤーキャラク ターの動き、敵キャラクターの動き……と、 やはり順番に動かします。そう、じつはも のごとを進める順番(流れ)を決めてやる という意味で、ゲームのプログラムと運 動会のプログラムは同じことなのです。 少しだけハイレベルなテクニックにつ いても触れましょう。運動会は 1 つの場 所で行いますが、大きな競技会になると 複数の会場を借りて、それぞれが並行し てプログラムを進めていきます。もちろん
開会式や表彰式などは、決められたタイ ミングで同じ場所に集まっておこないま す。コンピュータゲームの世界でも、これ と同じ複数の流れを同時に進めるテク ニックが存在します。
このテクニックは、プログラムの入門 者や同人ゲームのレベルでは必ずしも 必要ありませんが、そういう技術があるこ とは知っておくとよいでしょう。もちろん 1 つ 1 つの会場で行われるそれぞれのプ ログラムは、今回お話しした 1 つの流れ だけでおこなうプログラムと大して違い はありません。
■まとめ
プログラムの流れは、“骨組み”である フレームワークから必要な手続きが呼び 出され、ライブラリに収められた“便利な パーツ”を呼び出すことで進むことは分 かっていただけたと思います。ここでカン のいい人は気づいたかもしれません。じ つはプログラムの最初の初期化の部分
と毎回の更新の部分もフレームワークの 側からみると、フレームワークに呼び出さ れる“パーツ”だったのです。プラモデル も、パーツにパーツをくっつけていくこと で完成します。
もう一つ、プログラムの流れを開始す ることを「実行する」と言います。少し難し い言葉のようですが、「運動会を実行す る」と言うのと同じことです。ゲームプロ グラムはコンピュータやゲーム機が実行 しているのです。実行すると、どのフレー ムワークでも最初は初期化のパーツを呼 び出すところから流れが始まります。 以上、大まかな説明でしたが、複雑な 市販ゲームでもこれらの応用だけで成り 立っているのです。例えば BGM を鳴ら すのだって、今、どの場面かで条件分岐 して流す曲を決め、音楽を鳴らすための
“便利なパーツ”を呼び出せばいいので す。3D のゲームでさえ、「絵だけでなくモ デルやアニメーションのデータが必要」 なのと「“便利なパーツ”の使い方が ちょっとだけハイレベルになっている」こ とを除けば、あとは X,Y の他に Z 座標を 増やすだけだと言えます。
ゲームプログラムのしくみは、一つ一 つを分解していくと意外とカンタンなの です。最初から無理をせず順に押さえて 自分のものにしていけば、いずれはハイ レベルなゲームも作れるようになるはず
です。もう少し手近なところでは、自分が ゲームで遊ぶときに「これがオブジェクト になっているんじゃないかな?」「ここは ループ、ここは条件分岐になっているな」 と考えるだけでも、自然とプログラムの力 がつくと思います。
ゲーム制作メンバーを集
ゲーム制作メンバーを集
める
める
@geekdrums
「ゲームは誰でも作れる!」
そんな希望を、感じ取ることができたら あなたはゲームクリエイターへの一歩を 既に踏み出しています。後は、自分でや りたいことを調べて、学生だろうと社会人 だろうと遠慮無くトライすることができま す。
……え? 俺は絵がかけない? アタ シはプログラムなんて無理? 僕には音 楽のことなんてわからない? そんな人 がほとんどでしょう。しかし、そこであきら諦める のはまだ早い!
ゲーム制作メンバーを集める
ゲームは一人で作らなきゃいけないわ けじゃありません。プロが作る売り物の ゲームは一人で作られたものなどほとん ど無いでしょう。一人じゃゲームが作れ ないわけではない(むしろ一人でものす ごいゲームを作ってる方も居ます…)で すが、仲間がいるに越したことはありませ ん。
みんなどうやって仲間を集めて
いるの?
ということで、ちょっとの経験と独断と 偏見から、仲間を集める方法をいくつか
提案してみます。もちろん、どれがいいか というのはその人次第なので、自分に 合った方法を考えましょう。
0、サークルに入る
えー!? あなたの学校には、ゲーム 製作サークルまたはゲーム製作部また はゲーム制作者コミュニティみたいなも のがあるですってー!?
今すぐ入って、先輩たちから色々教え てもらいなさい! さて、幸運な人は置い ておいて次に行きましょう。
1、友人を誘う
最初に断言しますが、これが理想的な 方法です。兄弟とかだったらもっと素晴ら しいかもしれません。ゲーム製作はとに かく色々話しながらやらないと終わりませ んから。
この場合、「どんなゲームを作るか」と いう企画は、友達を誘ってから一緒に考 えてもいいと思います。
しかし、多分最初は「FF みたいなゲー ム作りたいよな!!」のような所から始まり (これはひゆ比喩ですが、誰でも最初は大き な妄想をしてしまうものです)、そのうちに
「これって俺達だけで作れるのか……?」 という壁にぶち当たる可能性があります。 さて、解決策は2つ。
• 自分たちで作れる範囲のゲームを
考える
これが一番現実的で、かつ今後の成 長を考えたら最速な方法だったりします。 まずは簡単なシューティングゲームから、 とか言っても(筆者もそうでしたが)最近 の中高生の場合、「簡単なゲーム」をそも そも知らなかったりするので……昔一世 をふうび風靡したらしい「インベーダーゲーム」 なんて聞いたことあるでしょうか? それ くらい簡単なモノからでもいいと思いま す。
さて、友達同士でゲームつくろうとして 困った時の、もうひとつの解決策はもち ろん
• メンバーを増やす
さぁ、ここで焦ってはいけません!
2、ネット上で誘う
今は色んな SNS(ソーシャル・ネット ワーキング・サービス)があります。mixi をはじめ、Twitter や2ちゃんねる、モバ ゲーや GREE、ニコニコ動画もそう言え るかもしれません。個別のサービスに関 しては、個々人が使いやすい物でその サービスの規律なり節度を守ってやって ください、としか言えないわけですが、 ネットで人を誘った後に気をつけて欲し いことがあります。
それは、可能なかぎり早くそのサービ スから抜けだして、メールでも Skype でも
実際に合うのでもいいので、個別に連絡 をとりあうようにする!ことです。
ネット上でメンバーを誘って、途中まで 作業していたはいいものの、いつの間に か連絡が取れなくなった、しっそう失踪した、なん て話はありすぎて困るくらいです。ちなみ に、業界用語(?)ではこれを「エターナ る」と言います。文字通り企画が永遠(エ ターナル)に終わらなくなるということで す。
または、「ネット上だけでゲームが作れ るサービス」や、「ネットで誰でも無料で 使っていい素材を配っているサイト」など も存在します。ネットでゲーム制作できる サービスは、最近のだと「ニコゲー」や、
「RMake」なんて秀逸なサイトもありまし た。これらはプログラミングすることに比 べると出来ることが制限される部分もあ りますが、よほどの物でない限り(2 D で あれば)実現できるでしょう。
P.S.
2ちゃんねるで馬鹿にされてもめげな いで下さいね!ネットで人を集める場合
「ゲームを完成させた経験」や「企画の 具体性、面白さ」とか「(有償で人を誘っ た場合など)責任が取れるのか」などな ど厳しい論調も目立ちます。でも、だれ だって最初からそんな事できないですか ら!諦めずに経験を積みましょう。
3、サークルを作る
「友達を誘ったけど、これじゃあどうし ても自分のつくりたいゲームが作れない ぞ!」「ネットで人を集めようかと思ったけ ど、そんな自信ないぞ!」「フリー素材とか ネットのゲーム製作サービスじゃあ、俺の 企画は実現できないぞ!」
そんなにゲームが作りたいのか!それ じゃあサークルをつくっちゃいましょう! 大丈夫!そこまで作りたいゲームがあ るあなたなら、絶対にできます!学生の場 合は、学校でサークルとして作ってもらっ て、部屋を借りて宣伝したりするのがい いでしょう。自分のゲームを作るだけじゃ なくて、ゲーム製作に関わる人を皆集め て地域でコミュニティを作る、までやって もいいと思います。
冗談ではなく、
• チーム製作における対人スキルな どが上がる
• 身内だけでは知り得なかったこと を知ることができる
• 自分が責任者になることで、ゲー ムを完成させるためのプレッ シャーにもなる
などなど利点があります。
最後に
筆者は結局0~3を試し、札幌でコミュ ニティを作りました!
• 札幌ゲーム制作者コミュニ ティ”Kawaz”
http://www.kawaz.tk/
立ち上げた当時、完成させたゲームな んてなかったので、あなたにもきっとでき ます。札幌の方でしたら、参加お待ちして おります!
あと、Kawaz から派生して名古屋の 方にも、Namaz というコミュニティを今 立ち上げようとしている方がいます。
• 名古屋ゲーム制作者コミュニ ティ"Namaz"
http://namaz.netgamers.jp/ と、最後は宣伝になってしまいました が、熱意さえあれば何でも作れます。自 分にあった方法で諦めずに頑張ってくだ さい! 応援しています!
Java+Swing
Java+Swing はじめの一歩 はじめの一歩
@117Florian ゲームの中心はプログラムではない
……んですが、かといってプログラムが ないとゲームとして動かないのも事実。 とりあえず、一番簡単にゲームを作る 方法というのをやっていきたいと思いま す。
コンピュータに対する素養はいりませ ん。ゆっくり試してみれば、何となく見え てくると思います。ゆるく行きましょう。ゆ るくゆるく。
Java って何?
あちこちで名前を聞く割に正体が知ら れていない技術として「Java」という環 境があります。例えば、携帯電話だとか、 Web ブラウザの中とかでよくその名前を 見かけます。
「Java」は、アメリカの Oracle 社が開 発した「プログラムを動かすためのプロ グラム」です。Java があると、プログラム が簡単に作れますし、どんなところでも 動きます。パソコン用の Java SE や、携 帯電話向けの Java ME、変ったところで は BluRay なんかでも動きますし、今は やりのスマートフォン Android でも Java 環境が元になったプログラムが動 いてます。
Java 環境は、「Java 言語」という特殊
な言語(日本語とか英語とかの仲間)で コンピュータに指示を出します。この指示 のことをプログラムと呼んでいます。Java 言語は、世の中にたくさんあるプログラ ムを作るための言語の中ではかなり簡 単な方で、コツさえつかめばあんまり苦 労しないで思った通りのものができあが ります。
まずはためしにちょっとしたプログラム を作っていきましょう。
NetBeans の立ち上げ方
Java 言語でプログラムを作るための ツールはたくさんあります。今回は、その 中でも特に簡単に使える「NetBeans IDE」を使っていきます。
まずはスタートメニューから
「NetBeans IDE」を立ち上げてみましょ う。スプラッシュ(タイトル)がしばらく出た 上で、図のようなウィンドウが開くと思い ます。
左上が「プロジェクトウィンドウ」です。 作っている最中のプログラムがたくさん おいてあります。自動的にセーブされる ので、プログラムはここにどんどんたまっ ていきます。
左下が「ナビゲータ」。プログラムの中 身をだいたい表示します。今はプログラ ムを作っていないのでなにも入っていま せん。
右上が「ソースエディタ」。ここにプロ グラムを打ち込みます。エディタの上部 はタブになっているので、いくつものファ イルを同時に開けます。
右下が「出力ウィンドウ」と「タスクウィ ンドウ」。プログラムの実行結果などが表 示されます。
ちなみに、ウィンドウクローズのボタン (Windows の場合右上の×ボタン)をク リックするとプログラムが終了します。お おむね自動セーブされますが、最後に
「終了しますか?」などと聞かれることが あります。そのときににはセーブする方の
ボタンをおしましょう。次 NetBeansIDE を開いた時には、直前の状態が保存さ れたまま開きます。
閉じて困るものでもありませんので、 怖くなったら再起動するぐらいの気分で 行きましょう。
プロジェクトを作る
NetBeans IDE では、動くプログラム を作るためにまず「プロジェクト」を作りま す。この中にいろいろなものを作っていっ て動かす形になります。
最初に「FirstApp」というプロジェクト を作ってみましょう。
• メニューバーの「ファイル->新規 プロジェクト」
• 出てきたダイアログの「カテゴ リ」の中の Java をクリック
• 「プロジェクト」の中の「Java ア プリケーション」をクリック
• 「次へ」をクリック
• ページが変ったダイアログの中の
「プロジェクト名」のところに
「FirstApp」と打ち込む
• 「主クラスを作成」にチェックを 入れる
• 「主クラスを作成」の中を一端消 して「FirstApp」と打ち込む
• 「主プロジェクトとして設定」に チェックを入れる
• 「完了」をクリック
これでプロジェクトは完成しました。実 はこのまま動きます。とはいっても、なに もしないプログラムなのでおもしろくあり
ませんが。
ソースを打ち込む
プログラムの中で、特に Java 言語で 書かれている部分を「ソース」といいます。 Java という環境は、Java 言語で書いた プログラムを動かすようになっています が、Java 言語そのままでは動きません。 Java 言語を、Java 環境で動く形に直し てやる必要があります。
今回、NetBeans IDE を使っているの で、Java 言語で書けば Java 環境で動く ところは自動でやってくれます。
ソースは、ウィンドウ右上の「ソースエ ディタ」内で書き換えます。今はたまたま 開いていますが、もし閉じちゃったのであ れば、左上の「プロジェクトウィンドウ」の 中から「FirstApp->ソースパッケージ->
<ディフォルトパッケージ>-
>FirstApp.java」と選ぶとまた開くこと ができます。「.java」というのが、Java 言 語のソースであることを示す名前なので 探す時の目印にしましょう。
ここに、FirstApp.java を打ち込みま す。一端ソースエディタ内の文字を全部 消した上で最初から打ち込むことをおす すめします。打ち込んでいる最中に「タス ク」の中になにやらエラーが出ることがあ りますが、最後まで打ち込んでもエラー が消えない時にはどこか打ち込み間
違っています。よく見比べてみましょう。 結構細かいところが間違っている可能 性があります。
打ち込み終わったら、
メニューバーの「デバッグ->主プロ ジェクトをデバッグ」と、やってみて下さい。 うまくすれば何か出ると思います。
FirstApp.java
import javax.swing.JFrame;
import javax.swing.WindowConstants; import javax.Swing.SwingUtilities; public class FirstApp extends JFrame { public FirstApp(){
this.setVisible(true); // ウィンドウ画面に表 示
this.setSize(320,240); // ウィンドウの大き さを横320,縦240pixelにする
this.setDefaultCloseOperation(WindowConst ants.EXIT_ON_CLOSE); // 「×」をクリックされた時にプ ログラムが終了するように
}
public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FirstApp(); //インスタンスの生成 }
}); } }
オブジェクト
さて、プログラムの中身に入る前に少 しだけプログラムの構造についてお話し しましょう。
近代のコンピュータのプログラムは
「オブジェクト」というものを組み合わせ て動くようになっています。「オブジェクト (object:物体)」とは、プログラムの中に 入っている部品のことです。部品として は、元から用意されているものもあります し、自分で作ることもできます。
この部品は、中にいろんな機能がつい ています。例えば「ウィンドウ」を表すオブ ジェクトは、このオブジェクトを作って「画 面に出ろ」とお願いすると画面に表示さ れます。機能にはこのほかに「大きさを変 えろ」とか様々なものがありますが、いち いち調べているときりがありません。とに かく、お願いするとよしなに動いてくれる 部品を全部ひっくるめてオブジェクトと 呼んでいる、とだけ思って下さい。
Java 言語の中ではオブジェクトは 2 つに別れています。ひとつは「どんな機能 を持っているのか」を示す「クラス」、もう ひとつはそのクラスを使って実際にさわ れるようになっている「インスタンス」です。 クラスは直接さわれませんが、インスタン スを作るための元ネタとして使われます。 なので、通常、クラスにお願いしてインス タンスを作り(「new クラス名」でインスタ
ンスはできあがります)、できあがったイ ンスタンスにお願いしてプログラムを動 かします。
お願いすると動く機能のことを「メソッ ド」といいます。クラスの中に入っている メソッドは、そのままインスタンスから使え ます。
ちなみに、クラスもメソッドも、元からあ るものは英単語の名前で作られていま す。自分で新たに作るものは日本語でも 構いません。
今回最初に自動的に作られたクラス は、最初に主クラスとして指定した
「FirstApp」です。クラスのソースファイ ルは「FirstApp.java」と、クラス名に
「.java」がついたものです。
エントリーポイント
プログラムのうち、「始まる部分」のこと を「エントリーポイント」(entry point)と いいます。今回のプログラムの中にはい くつかのエントリーポイントがあります。
• プログラム全体でのエントリーポ イント
プログラムが動く時に最初に来るとこ ろです。具体的には「public static void main()」と書いてあるところがそうです。 実際のプログラムは、この直後の「{」 から「}」までの間を動きます。
今回この中身はちょっとおいておきま しょう。おまじないみたいな物です。おまじ
ないの種明かしは別の記事にありますの で、興味のある方はそちらをどうぞ。
• メソッドのエントリーポイント クラスの中に入っているメソッドで、ど こからかお願いされた時に来ます。 具体的には今回のプログラムには 入っていません。
これもやはり実際のプログラムは、こ の直後の「{」から「}」までの間を動きます。
• コンストラクタのエントリーポイ ント
クラスの中に入っていて、インスタンス を作った時に自動的にやってきます。 具体的には「public FirstApp()」と 書いてある部分です。
これもやはり実際のプログラムは、こ の直後の「{」から「}」までの間を動きます。 エントリーポイントから入ってきたプロ グラムは、「なるべく右に」「なるべく下に」 進んでいきます。
それぞれの行が何をやっているのか は「//」の後ろに書いておきました。「//」 の後ろが画面上で微妙に灰色になって いるのは、この部分は実際にはプログラ ムに影響しないという意味です。プログ ラムの中身とは別に、「これがなんなの か」を判る言葉で説明するためのこの灰 色の部分を「コメント」といいます。「コメ ント」は書かなくても動きますが、とりあえ
ずは今回は書き写しましょう。
プログラムってどう動く?
さて、今回のプログラムはただウィンド ウを出すだけのプログラムでした。これが どうやって動いているのかを説明しましょ う。
まず、このプログラムで使われている クラスは FirstApp ただひとつです。この クラスは、画面上でのウィンドウを表す JFrame という名前のクラス(つまり、元 から備わっている部品)の機能を使って 動いています。元からあるものを流用し て動いている、ということを示すのが
「extends Jframe」という部分です。こ れがついていると、元からの機能はその まま使えて、その上で自分独自の機能を 作ることができます。今回の場合、ただの ウィンドウにゲームの機能を付け加えて いく形になります。
プログラムがエントリーポイントから実 行されるという説明は先ほどしたとおり です。つまり、「public static void main(String[] args)」と書いてある部 分が真っ先に動きます。
この中にかかれてあるのはただ一行
「new FirstApp()」だけです。これは、 FirstApp クラスのインスタンスを作る、 という意味です。FirstApp クラスは、 JFrame の機能を持つ独自の部品です
から、この行は「独自の部品を実際にさ われるような形に作る」という意味になり ます。
さて、インスタンスを作ると、自動的に コンストラクタが実行されます。これまた コンストラクタの中を上から順に実行し ていきますが、やっていることは以下にな ります。
• ウィンドウを画面に表示(これをや らないと、作ったウィンドウが見 えない。アイコンとしても出ない)
• ×を押されたら閉じるように(これ をやらないと、×を押されても閉じ ないゾンビのようなプログラムに なってしまう)
• ウィンドウの大きさを横 320,縦 240 に(これをやらないと、小さす ぎてどこにあるんだか判らない) メソッドの中で出てくる「this」は、自分 自身のインスタンスを指します。「.」は「そ れに対してお願いする」という意味。結果 的に、「自分自身(の、元から持っている 機能)にいろいろお願いする」という書き 方になっています。
これでめでたくプログラムが動くように なりました。
ステップ実行
「動くようになりました」といわれてもぴ んと来ないかもしれません。
確かにウィンドウは出てますし、いわれ たとおり動いているような気もします。が、 本当にこれのせいで動いているのかは
微妙に謎です。
そこで、本当に動いているかどうか確 かめてみることにしましょう。
まず、「setVisible(true);」の行の左 端、数字が書いてある辺りを右クリックし て、「ブレークポイント->行ブレークポイン トを切り替え」を選んで下さい。これで、こ の行の左端に赤い■が出たと思います。 これを「ブレークポイント」といい、プログ ラムが動いている最中、ここに来たら一 端止まるということを示します。
もう一度「主プロジェクトをデバッグ」 してみましょう。すると、先ほどと違って ウィンドウが表示される代わりに、ソース エディタの中のブレークポイントを置い た行緑の矢印が出たと思います。この緑 の矢印が「イマココまでプログラムが動 いてます」マークです。緑の矢印が出て いる状態で「デバッグ->ステップオー バー」をしてみて下さい。すると、プログラ ムが 1 行下に進んで、画面にウィンドウ が出るはずです。これで、確かにこの行 が「ウィンドウを画面に表示」するという 動作をしていることが判ります。
同様に次の行を実行するとウィンドウ の大きさが変ります。が、更に次の行は 変ったことがよくわかりません。目に見え ない違いしか起こさないものもあるので す。
コンストラクタの最後の「}」まで来たら、
「デバッグ->続行」をして下さい。ステッ プオーバーでもどんどん進みますが、そ のうち、元の部品の中にまで入っていく ので、訳のわからないことになってしまい ます。訳がわからなくなったら、慌てず騒 がず「デバッグ->デバッガセッションを終 了」しましょう。何事もなく元に戻ります。 また、一度張ったブレークポイントは同 じ行で「ブレークポイント->行ブレークポ イントの切り替え」をもう一度やると解除 することができます。
こうしてみていくと、確かに「なるべく右 に」「なるべく下に」進んでいるのが見て 取れます。プログラムの中身は訳のわか らない箱ではなく、こうして直接触れるも のなのです。
コントローラとビュー
さて、ウィンドウは出すことができまし た。
とはいえ、ウィンドウだけで中身は空っ ぽです。なので、ゲームにするために中 身を作っていきたいと思います。
まず、先ほど見たウィンドウ。あれは JFrame というクラスの機能をそのまま 作ったものでした。最初の 1 文字「J」は 画面なんかを表示する「Swing/JFC」と いうジャンルの機能であることを示しま す。2 文字目以降の「Frame」が、
Windows などでいうところ「ウィンドウ」
です、Java 環境は Windows でしか動 かないわけではないので、Windows の 用語であるウィンドウという単語を使って いませんが、同じものだと思ってもらって 大丈夫です。Windows では「ウィンド ウ」と呼び、Swing/JFC では JFrame と 呼んでいるこのプログラムの外枠のこと を今後はコントローラ(Controller)と呼 びます。
これの中に、ゲームの見た目を作って いきます。
ゲームなどの見た目の部分のことを ビュー(View)といいます。
コントローラの中にビューを入れ、 ビューが実際のゲームとして動く形にな ると思って進めていきましょう。
クラスを作る
ビューは、JComponent というクラス の機能を流用して作っていきます。
というわけで、早速新たにクラスを作り たいと思います。
• プロジェクトウィンドウの中の、 FirstApp の中の、ソースパッケー ジの中の、<ディフォルトパッケー ジ>にマウスカーソルを合わせて右 クリック
• 出てきたメニューの中の「新規-
>Java クラス」
• 出てきたダイアログの中の「クラ ス名」に「View」と打ち込む
• 「完了」をクリック
また新たにソースエディタに