何となくゲームを作ってみる。(ゲームっぽくしよう!編)

さてさて、「何となくゲームを作ってみる。編」最終回は、ゲームの装飾です。
装飾と言っても、煌びやかに飾ると言う事ではなく、ゲームっぽく仕上げると言う事です。
ゲームっぽくするには、タイトル画面、ランキング、ゲーム終了(時間制限)が最低限必要だと思われます。
と言う事で、前に作ったゲームに色々追加していきましょう。ヽ(´ー`)ノ

・・・の前に、別名で保存しておいて下さい。FileのSave As...と言う奴です。

□時間制限を付ける。
まず、設定した時間が来たらイベントが発生すると言う物を作っていきましょう。
図1のL・・・あ、画像が無いですね。一応貼っておきます。

図1。
メニュー画面

Lの、Time Lineをクリックします。そして、フォルダに作成されたtimeline0をダブルクリックで開きます。

図2。
タイムラインメニュー画面。

まず、名前を決めます。End_Timeとか、適当に名付ければ良いです。
次に、名前下にあるAddをクリックします。すると、Adding a Momentと言うウィンドウが開きます。
そこのIndicate the momentと言うのは、このTim Lineが呼び出された時から時間をカウントし、
そのカウントがいくつになった時に登録された処理を実行しますか? って感じの物です。
取り合えず、短めに150と記入してください。ちなみに、1ステップは1秒ではありません。もっと短いです。
そして、更にもう1つ追加し、200と記入してください。
これで、このTim Lineが呼び出されてから150と200ステップの時に、それぞれの処理が実行される事になります。
と言う事で、次はその処理を作りましょう。

まずはStep150をクリックして選択状態にし、右メニューのcodeタグのSet the value of a variableをドラッグします。
これは、複雑なゲームには必要不可欠な、変数を設定する物です。取り合えず開きます。
上の枠には触れずに、下の枠のvariableに「global.」と、まずは記入してください。
この「global.」と言うのは、どのオブジェクトからでも読み込める、共有の変数と言う意味です。
「global.」を付けない場合は、変数を設定したオブジェクトしか読み込む事が出来ないので注意してください。
「global.」の後に、適当な半角英字を記入・・・まぁ、今回は「enda」を追加し、「global.enda」とします。
ちなみに、「global.end」だと、システムの変数に引っかかるのか、正常に読み取れないので注意してください。
そして、その下のvalueに、1と記入してください。一応、図3を用意しておきました。

図3。
変数設定画面。

これで、「global.enda」と言う変数を1にすると言う処理が完成しました。OKを押して下さい。
次に、右メニューmain1のDestroy the instanceをドラッグし、開いてください。
開いたら、さっきは触らなかった一番上のApplies toのラジオボックスを、Objectに変えて下さい。
そして、右の所をクリックすると、壁とボールのオブジェクトが出てくるので、ボールを選択します。
この設定は、先ほど選んだオブジェクトを対象に、この処理が行われると言う物です。
なので、この処理が行われた場合、ボールが破壊されると言う事です。OKを押してください。
これで、Step150の処理は完了です。次はStep200です。
Step200を選択状態にし、右メニューのscoreタグのShow the highscore tableをドラッグします。
これは、ランキングを表示すると言う処理です。設定はしなくて大丈夫です。
次に、Show the highscore tableの後に右メニューのmain2タグのRestart the gameを追加します。
これは、その名の通りゲームをリスタートさせる処理です。無いとタイトル画面に戻れません。
これで、終了処理のタイムラインは完成です。OKを押して閉じて下さい。
ここで一応、念のために上書き保存してください。

□ゲーム終了オブジェクトを作る。
タイムラインで終了しょりをを作っても、それを実行するオブジェクトが無いと意味がありません。
まず、図2のMをクリックし、新規オブジェクトを作ります。
名前はEndとか、それっぽい名前にしてください。じゃないと、分かり難くなります。
このオブジェクトを操作するわけじゃないので、画像は要りません。
まずは、EventsにCreateとDrewを作成してください。Add Eventをクリックすれば、メニューが出ます。
次に、Createを選択し、右メニューcodeのSet the value of a variableをドラッグし、開きます。
そして、variableに、タイムラインの変数処理の時つけた名前(global.enda)を入力します。
下のValueには、0が入っていると思うので、そのままで。OKを押します。
この処理は無駄な気がしますが、実はとても重要な事です。
何故かと言うと、オブジェクトがその変数を参照した時、変数が設定して無いとエラーを起こすのです。
そりゃそうです。タイムラインは時間が来た時に処理するので、その間は「global.enda」と言う変数は無いからです。
なので、オブジェクトが参照する前に、変数を設定します。ちなみに、Createが一番早く処理されます。
次に、右メニューmain2タグのSet a time lineをドラッグし、開きます。
その中のTime lineの項目をクリックすると、Time Lineの一覧(と言ってもあるのは1つなので1つ)が出るので、
先ほど作ったタイムラインの名前(End_Time)を選択し、OKをクリックします。
これで、Endが作られた時に、End_Timeが起動するようになりました。
後はオマケ。右メニューscoreタグのSet the window caption infoをドラッグします。
これは、ウィンドウ上のスコアが出る所の文字と種類を決める処理です。
開くと、スコア(得点)の他に、ライフ(命)とヘルス(体力)がありますが、触らずにOKを押します。
初期設定だとスコアだけONになっているからです。ちなみに得点の左に出るScore:と言う文字は、ここで変えられます。

次に、EventsのDrewを選択します。これは、文字や図形を書く処理です。
この処理があるインスタンスは、設定に関わらず透明になります。注意してください。
まずは、左メニューcodeタグのIf a variable has a valueをドラッグします。
これは、設定した数値になると真(true)違うと偽(false)を返す処理です。
真の場合は次の処理を実行し、偽の場合は次の実行を無視、又は偽の場合の処理をします。
まずは、variadleにタイムライン等で設定した変数の名前(global.enda)を入力します。
次に、下のvalueに1を入力します。後、下のoperationがequal toになっている事を確認します。
この一連の処理は、global.endaの変数(variable)が1(value)と等しい場合(operation)と言う処理です。
・・・説明しても分かり難いので、実際にやります。取り合えず設定は完了なので、OKを押します。
右メニューcontrolタグのStart of a blockとEnd of a blockをそれぞれ追加します。
この時、上からIf a variable has a value、Start of a block、End of a blockの順にして下さい。
次に、StartとEndの間に右メニューdrawタグのSet a font for drawing textを追加し、開きます。
場所を間違えても、ドラッグで位置を変える事が出来ます。
開いたら、Fontの横のAaBbCcDdをクリックし、詳細設定画面を開きます。
取り合えず、サイズを20に変更し、OKをクリックします。AaBbCcDdが大きくなったのを確認し、OKをクリック。
次に、右メニューdrawタグのDraw a textを、Set a font for drawing textの下に追加します。
その下にEnd of a blockがあるのを確認してください。一応図4を用意しました。確認したらDraw a textを開きます。

図4。
並び順。

まず、textに「終了〜。」と、日本語で入力してみてください。どうでしょう? 文字化けしませんか?
もし文字化けしない場合は・・・文字化けしない方法を教えてください。(ぇ
取り合えず、文字化けしても問題ありません。ちゃんと終了〜。と表示されるので。
次に、その下にあるx:に125を入力、y:150を入力し、OKを押してください。
これは、設定したx&y座標にtextで設定した文字を表示する処理です。
捕捉として、文字や図形は呼び出された一瞬だけ表示される物なので、常に表示される必要があります。
なので、常に更新し続けるDrew以外では、組み込んでも一瞬しか表示されないので、必ずDrewに組み込んで下さい。
以上でEndオブジェクトの設定は終了しました。上書き保存を推奨します。
ちなみにStart & End of a blockはカッコ( )みたいな物です。
If a variable has a valueの処理が真の場合はカッコ内の処理が行われ、偽なら飛ばされる訳です。

□スタートオブジェクトを作る。
さぁ、後少しです。図2のMを押し、新たなオブジェクトを作成します。
名前は「Start」とか、そんなような名前にして下さい。
次に、Add Eventをクリックし、メニューを出して、DrewとKey PressからEnterを選びます。
Key Pressは、キーが押された時にイベントを発生させる処理です。今回はEnterを押すと起こります。
まずはDeawから設定します。右メニューdrawタグSet a font for drawing textを追加します。
設定は前回と同じく、サイズを20にするだけです。
次に、右メニューdrawタグのDraw a textを追加し、開きます。
textに「クリックボール」と入力し、x:に80、y:に75を記入します。これで良いのでOKを押します。
もう1度右メニューdrawタグSet a font for drawing textを追加します。
今度のサイズは10です。他は何も変えなくて良いので、OKを押します。
・・・と言うことは、やはりもう1度右メニューdrawタグのDraw a textを追加します。
今回は、texetに「プッシュエンター。」と記入し、x:120、y:250に設定します。
これで、Drawの設定は完了です。

さて、いよいよ最後の設定です。Press Enterを選択して下さい。
そして、右メニューmain1タグのGo to next roomを追加します。
これは、次のルームに移動すると言う処理です。設定により、何種類かの画面効果を得られたりします。
・・・しかし、この時点でルームは1つしかないので、次はタイトルのルームを作成します。一応上書き保存を。

□タイトルルームを作る。
これで最後なので、ちゃちゃっとやっちゃいましょう。
図2のNを押し、新規ルームを作成します。
前に作ったときと同じく、まずは名前を付けます。Startとかで良いでしょう。
次に、Roomsフォルダを見てください。Meinの下にStartがあると思います。
ゲームを起動すると、上のルームが最初の画面になるので、Startを一番上にします。ドラッグで移動可能です。、
一番上になったら、やはり前と同じくWidthとHeightを320に設定し、SnapXとYを32に設定します。
さて、最後の作業です。ルームに先ほど作ったEndオブジェクトを1つ設置します。場所はどこでも良いです。
お疲れさまでした。上書き保存し、ゲームを起動させてみてください。

・・・どうですか? タイトル画面にクリックボールとプッシュエンターと表示されてますか?
エンターを押すと、ゲーム画面に移りますか? 壁に当たるとボールはちゃんと跳ねてますか?
ボールをクリックすると上部のスコアが1足され、新たにボールが出現しますか?
時間が経つと、終了〜。と表示されますか? その後、ランキング画面に移りますか?
ランキング画面でEnterかEscを押すと、タイトル画面に戻りますか?
全て正常なら、クリックボールは完成した事になります。
ヤッタネ! 今日から君はプログラマーだ!(マテ
もし違ったりエラーが出たら、何かが間違っています。バグを修正しましょう。
・・・そう、今あなたはデバッカーになりました。(マテ×2

しかし、このままだと大して面白くありません。音楽や効果音も無ければエフェクトもありません。
それに、終了までの時間が短いはずです。もう少し長くしたり、あるいは短くしたり出来ます。
又、ステージが小さいです。ステージを大きくし、ボールを2個にしたりも出来ます。
もしこのゲームを完璧にゲームとして仕上げたい場合、それは自分で試行錯誤しながらやるのが一番良いです。
試行錯誤を重ね、完成度の高いゲームとなった時、それはあなたの作ったゲームとなります。
他の種類のゲームを作るにしても、今回の講座は参考になると思います。

今回の講座をやってみて、もしゲームを作ろうと思った場合、まずヘルプを見るのが良いと思います。
見ながら色々と試してみると、もっと良いです。



─あなたはゲームを作りますか? それとも作りませんか?─



第3章以降は、あくまで参考としての講座です。
複雑な事は、見ながら作るより、自分で考え、四苦八苦しながら作る方が、良く覚えられます。
それに、ゲームが完成したときの達成感が桁違いです。
是非、1から作ってみて下さい。その為の支援として、基本的な講座、日本語版ヘルプがあるのです。


一応、比較のために今回作ったゲームファイルを置いておきます。
ゲームメーカー講座、クリックボールのゲームファイル。 GMK_Click-Ball.lzh

GM講座TOPへ
TOPへ