written by やねうらお
1.ygs2k使ってるかなー!? イエーイ!
前号でご紹介したyaneuraoGameScript2000(以下ygs2k)はどうでしたか?
もうゲームプログラムは組めるようになりましたか?
今回もygs2kでプログラムを組んで行きたいと思っているのですが……あれあれ〜、向こうのほうからは、
「ちょっとやったけど、難しくてやめちゃったよ!」
とか聞こえてくるんですけどー。(笑)
だけど心配ありません!!今回は、そういう人たちのための講座なんです。だからして、まずは、ygs2kの最新版(ver1.56)を用意してください。(クリックしてファイルに保存してください。使い方は前の号を参考にしてください) 一応、私のホームページからもダウンロードすることが可能です。
ところで、このygs2kのサポート掲示板
http://nagoya.cool.ne.jp/bbs/robert/
が、あるんですけど、たまにとんでもないことを言ってくる人がいるんですよ。
「ファイナルファンタジーみたいなゲームを作りたいんですけど、どうすればよいか教えてください」とか「ストリートファイターのような格闘ゲームを作りたいんですけどどうすれば良いのでしょうか」だとか。
いやー、実際、困るんですよねー、こういうの(笑)
ファイナルファンタジーみたいなゲームの作り方なら、こっちが知りたいわい!とも言えないし(笑)
ストリートファイターのような格闘ゲームを作るのにはどうすれば良いのでしょうかって言われてもやねー(笑)、あなた何がどれだけ出来るの?えっ?何も知らないの?パソコン触ったのはつい最近だって?あんた何歳?12?えっ。中学生じゃん。何から勉強していいですかって言われても…いやー、それは学校の勉強をしっかりやってだなぁ…とか延々と世間話をして、最後に「まあいろいろ頑張れよ(笑)」とかその程度のことしか言えないんですよ。はい。いきなり作るにしては目標が大きすぎやしませんか?簡単なことから着実にやっていきましょうよ!それが一番てっとり早いんですから!
そんなわけで今回は、キャラクターを動かす!です。ゲームなんですから、キャラクターが動いて“なんぼ”ですよ。キャラクターひとつ動かんでゲームって言えんのかー!というか、キャラクターひとつ動かせんでゲームプログラミングが出来るのかー!とか思うんですけど、実際Windowsで普通にプログラミングするとなるとキャラクターひとつ動かすだけでも凄く大変なのですよねー。まあ、その苦労話をここで語っていても仕方ないので、さっそく動かしてみたいと…
あっ。ちょ、ちょっと待ってください。あなたプログラミング経験はありますか?ない?あっ。C言語を学校でちょっとだけやった?はい。いろいろな方がおられるようですが、ygs2kは基本的にC言語です。もしC言語の入門書がお手元にあって、それが300ページあるとしたら、そのうちの1ページ目から、30ページ目ぐらいまでは目を通していただきたいんです。それ以上は望みません。というかygs2kには不要です。
本来ならば、C言語をまったく知らない人には、ここで1時間ほどC言語の入門書を本屋で立ち読みしてきていただきたいのですが(笑)、今回は私が簡単に説明します。もちろん全部ではないので、これでは少なすぎるとか、わかりにくいと思ったら、C言語の入門書を見ると良いと思います。C言語の書籍は氾濫していますし、インターネットを検索すればC言語を解説しているページは無数に見つかります。大切なのは、一つの情報源に頼ろうとしないこと。わからなければ悩む必要なんて無いんです。もっと自分に合ったものを探せばいいんです。Take it easy!
2.C言語とは何か?
ygs2kは、ゲームが簡単に作れる一種のプログラム言語です。プログラムって何のことかわかれへんーって言う方もおられるかと思いますが(笑)、要はコンピュータにやらせたい仕事をコンピュータに分かる言葉で書き綴ったものです。とは言っても、コンピュータに分かる言葉ってのがいろいろあるんですよね(笑)。ygs2kは、その中でもC言語に近い文法を採用しています。もし、C言語ではなく日本語で書いてよいなら、
画像"test1.bmp"を1番のプレーンに読み込め。 1番のプレーンを画面の(30,50)の座標に描画せよ。 |
って感じになると思うのですが、ygs2kではこれを、
LoadBitmap("test1.bmp",1,0); BltFast(1,30,50); |
と書きます。両者を比較してみれば、なんとなく意味はわかりますね。
私は別に、ygs2kの命令を日本語にしても良かったのですが(笑)、入力が面倒になるんで英語にしました。だから、英語になっているのには別に深い意味はありません。
よく見ると画像を読み込みなさいという命令がLoadBitmapらしく、その後ろ、括弧をして、ファイル名やら何か数字がうじゃうじゃと書いてありますね。そのへんの意味についてはいま考えないことにして、文末には必ず「;」(セミコロン)をつける。これはC言語のスタイルです。これがあって、初めて文が終わるんです。日本語で言えば、「。」ですね。逆に、「;」が無い限りは、文が続いているものだと(コンピュータは)思っちゃう!のです。だから、「;」を忘れずにね。
また、ygs2kはC言語と同じくフリーフォーマットです。フリーフォーマットって何かと言うと、トークン(単語)とトークンの間はいくら空白や改行が入っていても構わないというものです。だから、さきほどの例は、
LoadBitmap( "test1.bmp",1,0 ); BltFast( 1, 30, 50 ); |
これでも一向に構わないわけです。
ところで、これを読んでいる読者の方のなかには、LoadBitmapってなんやろ?どういう働きをするんだろ?とか考えて気になって眠れない人はいませんか? 私もそういう性格なんですけど(笑)、プログラミングの世界は、そういう好奇心も大切です。LoadBitmapが気になる人は、すべての命令について完全に記載したマニュアルがつけてあるので、そちらを参考にすると良いでしょう。(ygs2kを解凍すればmanualフォルダの「スクリプトマニュアル」というファイルがあるはずです。他の命令についてもそちらのほうが詳しく書かれているので、是非、併読されることをお勧めします)
長くなってきたので、それでは、このプログラムを実際に実行してみますか。前回説明したように、ygs2000.exeの存在するフォルダのなかにscriptというフォルダを作るんでしたね。そして、scriptフォルダのなかに、メモ帳かテキストエディタでgamestart.cというファイルを作って、その内容として、
LoadBitmap("test1.bmp",1,0); BltFast(1,30,50); |
と入力します。内容を保存したら、ygs2000.exeをダブルクリックして実行します。すると…
うひょー!!すんません〜。嘘言ってました(笑)
これでは、まだ動かないんですよ〜。
まあ、「CompileError.txtを参照のこと」って書いてあるんで、CompileError.txtをメモ帳等で開けて、中を見てやろうじゃありませんか。
script/gamestart.c(1) : ファイルスコープに意味不明の文字が... script/gamestart.c(1) : 関数 main が未解決です(実体が定義されていません) スクリプトのコンパイルエラー内容は、以上です。 |
なんか、わけわからーん!
はい、ごもっとも。これは、「scriptフォルダにあるgamestart.cの1行目、ファイルスコープに意味不明の文字がある」ということなんです。ファイルスコープってのはC言語の用語なので、詳しく知りたいことはその手の入門書に譲るとして、要するに、「1行目に君は何書いているんだい?」ってygs2k君は、言っておるわけですよ。何をって言われても、命令はさっきので間違ってないんですが…だとしたら…??
void main( ) { LoadBitmap("test1.bmp",1,0); BltFast(1,30,50); } |
このように1行目と4行目を追加してみましょう。1行目は、「いまからメインがはじまるで〜」という開始の合図。4行目は、「ここで終わったで〜」という終了の合図。このように、{ と }は、ブロックを形成します。つまり、{ から、 } までが、一つのブロックなんだよ〜、一つの塊(かたまり)なんだよ〜とygs2kに知らせるのに使います。
これでygs2kを実行してみてください。正しく入力されていれば、さきほどの「コンパイルエラーが発生しました」というメッセージは出ないはずです。(出たとすれば、文字の入力ミス、gamestart.cが正しい場所に正しい名前で作られているかなどをもう一度チェックしてみてください) このように「コンパイルエラーが発生しました」が出ないということは、コンパイルエラーは発生しなかった(笑)ということですね。
で、そのコンパイルエラーって何でしょうか?コンパイルとは、ygs2kがそのプログラムを実行する前に行なう変換作業のことで、主に文字チェックや文法チェックを行なっています。これに成功したから、コンパイルエラーが発生しなかったわけです。つまり、このプログラムは文法的にOKだったんですよ。ygs2kがそれを認めたんですよ。よかったですね〜。おめでとうございます!
このように問題なくコンパイルされたことを「コンパイルが通った」と言います。
ところが、画面には何も表示されません。黒い窓が一瞬現れたかと思うと一瞬で消えてしまったではありませんか。どうして?と思いませんか?思ってください。そうです。コンパイルエラーは出なかったんでしょ?文法チェックはOKだったんでしょ?なのに、どうして?と思いますね。
ところで、あなたはこのような文をどう思いますか?
私の妹は私の母であった。
あれれ?と思いますよね。日本語として文法的に間違ってはいないけど、意味はどことなくおかしい。意味不明か、あるいは文脈によっては成立するのかも知れない、そんな文章ですよね。つまり、文法的に(構文的に)どれだけ正しく書けていたとしても、その意味が正しいかどうかというのは、また別問題なのです。
プログラムでも同様です。コンパイルは通ったけど、動かない。文法チェックはOKだけど、そのプログラムは意味を成さない。そんなことは日常茶飯事なんです。
では今回のプログラム、何が悪いんでしょうか?プログラムを先頭から読んで行きましょう。1行目はおまじないだから良しとして、2行目は、LoadBitmapで画像ファイルを読み込む。その画像ファイルがtest1.bmpですよ、と…あれれ?そんな画像用意してないよ!はい、その通りです。画像が無かったわけですね(笑) それでは、ここをクリックして、test1.bmpを保存してください。保存先は、ygs2000.exeの存在するフォルダにお願いします。
さて、気をとりなおしてygs2000.exeを実行!今度こそうまく行きましたか? 何? やはり同じだって?? そんなはずは…あっ。大切なものをgamestart.cに忘れてます。それはこれです。
void main( ) { LoadBitmap("test1.bmp",1,0); BltFast(1,30,50); halt; // これ忘れてます!! } |
haltが無いと描画しないんです(笑) 賢明な読者の方は、「じゃあ、BltFastで描画するって話は嘘だったのか?」って言われると思うんですけど、違うんです。ゲームだから、描画している過程が見えるとまずいんで、実際に見えている画面とは別に、裏で画面を持っているわけです。それをygs2kの用語では、セカンダリプレーンと呼んでいるのですが、このBltFastは、そのセカンダリプレーンに描画する命令だったんです。そこで、いくらやっても実際の画面には反映されない、と。セカンダリプレーンの内容を、実際に見えるプレーン(プライマリプレーン)にコピーしてやるのがこのhalt様なのです(笑)
これでygs2kを実行してください。うまく画面に女の子が描画されたはずです。どうですか?出ましたか?
えっ。一瞬なんか出たけど消えちゃったよーって?ええ。それでいいんです。いや、良く無い??そうは言っても、描画したあと、プログラムはそこで終わっているんですから、消えて当然です。これを消えなくするには、gamestart.cを
void main( ) { LoadBitmap("test1.bmp",1,0); BltFast(1,30,50); halt; loop halt; // これ追加します } |
このように変更することです。この行の役割についてはいまは考えなくて構いません。いまは、そこで停止させたいときはloop halt;と書く、と機械的に覚えておけばそれでOKです。
はい。このような画面が出ましたか?出たなら、それで成功です。右上の×印を押して、この窓を消してください。
気付かれたかも知れませんが、プログラムの途中で
// ←ここ以降は、その行はまるごとコメントとなる
このように//(ダブルスラッシュ)を使うと、そこ以降にコメントが書けます。あとで見返してみたときにこのような注釈がついていたほうがわかりやすいですし、他の人も理解しやすいので、なるべくコメントを書くといいでしょう。
また、各行は、読みやすくするため何文字か字下げしてありますが、これをインデントと言います。これはプロでも好みが分かれるところなので、これが正しいというのはありません。とりあえず私流のインデントを見ていただいて、こういうインデントはわかりやすいな、いいなと思われたなら、ご自分のスタイルとして取り入れていただければ幸いです。
さて、次は、BltFast(1,30,50);の30の部分を200に変更してみましょう。
どうですか?このようになりましたか?同様に、50の部分もいろいろと好きな数字に変更してみてください。どうですか?何かわかってきましたか?
どうやら、X座標とY座標を指定するようです。そして、その座標系は上図のようになっているようですね。(Y座標は下に行くと増えるので、そのへん気をつけたほうがいいかも知れません) BltFastは指定した場所(座標)に、その画像の左上のカドが来るようなタイプの描画(画像転送)のようです。
void main( ) { LoadBitmap("test1.bmp",1,0); BltFast(1,50,50); halt; BltFast(1,150,50); halt; BltFast(1,250,50); halt; loop halt; } |
ということは、このようにすれば、(50,50),(150,50),(250,50)と3つの位置に次々と表示されて移動して行ってるように見えるんじゃありませんか?
どうでしょうか?やってみましょう。
実行すると、こんな画面になったと思いますが、これはあなたの意図と違うんじゃありませんか?だって、何やら残像のようなものが残ってますよ...(これはこれでカッコイイですが…)
何故このようになったんでしょうか?何やら前回のが消えていないようですね?? 実はこれは、さきほどのセカンダリプレーン(裏画面)を消していないために、前回に描画したものがずっと残っているというのが原因なのです。そこで、
void main( ) { LoadBitmap("test1.bmp",1,0); ClearSecondary(); // セカンダリプレーンを消去 BltFast(1,50,50); halt; ClearSecondary(); BltFast(1,150,50); halt; ClearSecondary(); BltFast(1,250,50); halt; loop halt; } |
このように変更します。これで前回のはうまく消えます。試してみてください。
3.画像を移動させてみる
どうですか?動きましたか??
えっ?一瞬で移動しちゃって何が何だかわからない?
そうかも知れません。それでは、もっとゆっくり移動させてみてはどうですか?例えば、座標でx方向に1ずつ(1ドットずつ)移動させてみてはどうでしょうか?つまり、x座標を0から639まで1ずつ変化させてみてはどうですか?
ということは、0から639ということは、640箇所に表示するわけで、一箇所につき3行プログラムを書かなければならないから、640×3=1920行も書かなくっちゃならないの?
と思わるかも知れません。はい、それでもいいんです(笑) いいんですが、面倒ですね。これをなんとか回避したいと思います。
void main() { int x; x = 0; LoadBitmap("test1.bmp",1,0); loop { ClearSecondary(); BltFast(1,x,0); halt; x = x + 1; } } |
実行してみてください。どうですか?ゆっくりと右に動いていきましたね?これは、どういう仕組みなのでしょうか?
このプログラムには、新しい概念が2つ出てきています。一つは、ループという概念。もう一つは、変数という概念です。
ループというのは、赤字で示してある部分で、loopと書いて、 { }を書くのです。この{ }はさきほどやったブロックを形成するためのもので、スタートとエンドを示すために使います。もし、loopと書いて{ }が無ければ、loopのあとの一文だけが永久に繰り替えされます。最初に出てきた
loop halt;
というのは、実はhaltを永久に繰り返す構文だったわけです。何故、haltを永久に繰り返さなければならないかというと、窓の右上にある×印を押されたかどうかのチェックはhalt中にしか行なわないため、haltをせずにloopを行なうと、ユーザーは強制終了させる他なくなってしまうからです。
loopのほうは、これで分かりました。どうして同じことを繰り返しているだけのはずなのに、画像は少しずつ右にずれていくんでしょうか?これが大切なところです。同じものの繰り返しのなかに、何か変化する要素、動的な要素が入りこんでいるに違いありません。それがプログラム中に青で示してある部分で、変数というのを使っています。
変数というと難しく感じるかも知れませんが、読んで字の如く「変わる数」、どんな数字でも入るような箱を想像してみてください。
int x;
の部分は、そのための箱を用意する部分です。箱の名前はxです。この部分は、プログラミング用語で言うと、変数を使いますよと宣言する部分で、変数宣言と言います。xは変数の名前だから、変数名と言います。
言語によっては、この変数宣言を行なわなくても変数が使えるのですが、そうなってくると、ミスタイプしたときに別の変数と見なされてしまい、これが発見しにくいエラーの原因になります。そこで、たいていのプログラミング言語では、変数宣言が必要であるように設計してあります。変数をわざわざ宣言するのは、面倒なようですがとても重要なことなのです。ygs2kでも、変数宣言を行なわずに変数を使おうとすると、コンパイルエラーになり、実行できません。(わざとそのような仕様にしてあります)
そしてint x;の一行下にある、
x = 0;
というのは、変数xに、0を代入しなさいということです。代入というのはプログラミング独特の概念ですが、値を入れることです。それならば
x = y;
というようになっていると、yの値がxに入ります。このとき、yの値はどうなるんでしょうか?無くなってしまうんでしょうか?いいえ、そうではありません。yの値はまったく変化しません。yの値は、無くならないのです。別の言い方をすれば、値はyからxにコピーされるのです。これが代入です。
この代入って概念、とても不思議だと思いませんか?箱の中身は無くならないのです。コピーされるのです。実生活していてこのような経験をすることはまずありません。買い物をしたら当然お金は減るし(笑)、使ったものは無くなります。ところがコンピュータの世界ではそうではないのです。使っても減らないんです。代償なしにコピーできるんです。代償があるとすれば、それは代入を実行するために必要な時間だけです。私は、初めてこれを知ったとき、無から有が生まれてくる…あるいは錬金術のようなものに感じましたが、みなさんはどうですか?
話がそれました。先を急ぎましょう。そして、
BltFast(1,x,50);
の部分では、具体的に値を指定するかわりにxという変数を指定しています。変数xの値が実際の数字のかわりに使用されます。これは難しくないですね。そして、
x = x + 1;
の部分。これは何でしょうか?これが今回、最大の難関です。
どうもこれが代入らしきことは、ここまで読んできたみなさんならおわかりになられると思いますが、だとしたらどういった代入なのでしょうか?
結果から言いますと、これでxの値は1増えます。
仕組みは、まず、ygs2kは、右辺を計算します。右辺っていうのは言うまでもなく=記号の右側のことです。(x+1)なので、現在のx値より+1だけ大きい値になります。その計算結果を左辺に書かれているもの(ここでは変数x)に代入するわけで、結果としてxは1だけ増えます。代入ってとっても不思議ですね。
4.条件分岐
さきほどのプログラムでは、画像を動かしてみたものの画面内にとどまっていませんでした。
それは、xの値が限りなく大きくなっていくからで、これを防ぐには画像が右端(座標は639)へ行ったときに元の場所へ戻してやればいいわけです。
わざとらしく言うと、「もし画像が右端へ行ったならば、ほにゃららする」です。その部分だけのプログラムを書くとこうなります。
if ( x == 639) // もしxが639ならば x = 0; // xを0にする |
なんとなくわかりますでしょうか?注意すべき点は、== は = と違って、”等しい”って意味です。
初心者のうちは、 == と書くべき所に = って書いてしまうことが多いから注意してくださいね。これを日本語に訳すと、「もし x と 639 が等しいならば x に 0 を代入する」ですね。意訳すると、「x が 639 だったら x を 0 にする」
つまりifのあとに条件を( )で囲って書く。そのなかの条件が成立しているときのみ、その次に書かれている一文が実行されるんですね。
これをループの中へ入れておくと、画像は右端へ着いた時に左端へ戻るというわけです。
gamestart.cを次のように変更してみましょう。
void main() { int x; x = 0; LoadBitmap("test1.bmp",1,0); loop { ClearSecondary(); BltFast(1,x,0); halt; x = x + 1; if (x==639) x = 0; } } |
ygs2kを実行すると左端から移動を始め、右端へ着くとまた左端へ戻って繰り返す・・・思惑通りですね。でも、動きがなんだか遅いので、もう少し速く動かしてみましょうか…。
x = x + 1;
で1ずつ増やしているから遅いわけで、10ずつ増やしてみてはどうですか?
x = x + 10;
に変更してygs2kを実行してみてください。
どうでしたか?
確かに速く動くようになったけど、画面右端に消えて行ったあと、そのまま戻ってこないよー。
はい、そうですね。なぜなんでしょうか?少し考えてみてください。
わかりましたか?10ずつ動かす時、x は 0,10,…,630,640 と増えてくから、639にはならないわけです。そうすると、x は 永久に 0 に戻ることはないと…。それならば、
if(x == 640){ //x が 640 ならば x = 0; //x を 0 にする } |
ってすればいいのでしょうか?これは、確かに動きます。しかし、これだと1ずつ動かす時と10ずつ動かす時はちゃんと動きますが、例えば3ずつ動かす時にはうまく動かないですね。
つまり、こんなことをやっていたら、x の 増分を変えるごとにこの条件式を書き換えなくてはいけないんです。これでは抜本的な解決にはなっていません。
if(x > 639){ //x が 639 を越えたならば x = 0; //x を 0 にする } |
これなら x の増加分がいくつでも正しく動きます。こういう風にあらゆる場合を考えたプログラムを書くことが大切です。そして未来形でプログラミングすることが大切です。それはこのように、仕様の変化に対応して行けるプログラムのことです。とは言ってもなかなか難しいんですけどね(笑)
今回のC言語講座は、これでおしまいです。
スクリプトマニュアルを見て、今回出てきたmain、変数、条件分岐などについて復習(予習)しておいてくださいね。
5.ヌキ色とは何か?
ちょっと、この画像を見てください。
さきほどの画像に、円形の画像が重なっていますね。ちょっと不思議な印象を受けられるかと思うのですが、どのようにやればこういう描画が行なえるのでしょうか?この円形の画像データはこれ(test2.bmp)です。(クリックして、ファイルに保存してください) ペイントで開いてみればわかると思いますが、このようになっていますね。
円の外側は緑色になっています。この緑色の部分は、描画のときに転送されないようですね? これをゲームの制作現場では「ヌキ色」と言います。その色だけが(転送のときに)抜けるからです。指定した色だけが抜けます。色が少しでも違うと抜けません。ところが、このヌキ色にする時にPhotoShopなどで描いていると、アンチエイリアスがかかってしまって輪郭付近が微妙に違う色になっていたりすることがあるんですよ。これをヌキ色を失敗すると言います。
そうなると、納期まぎわでパニック状態の現場ではヌキ色に失敗しているようなCGが見つかると、「この×××が脱いでいる絵、ヌキが間違ってるよ!こんな絵じゃ、ユーザーもヌケないよ!!」なんて怒鳴り声が聞こえてきます。(下ネタですみません:笑)
ヌキ色は、絶対に使わない色にします。だいたいは緑の原色にすることが多いようです。ygs2kの場合、ヌキ色は、色でも指定できますが、場所で指定するほうが簡単です。(マニュアルのSetColorKeyPosを参照してください) これの指定が無い場合、左上がヌキ色として指定されたことになります。
ヌキ色部分を描画しないタイプの転送は、さきほどのBltFastの替わりにBlt命令を使うだけです。
gamestart.cを次のように書きます。
void main() { int x; x = 0; LoadBitmap("test1.bmp",1,0); LoadBitmap("test2.bmp",2,0); loop{ ClearSecondary(); BltFast(1,0,0); Blt(2,0,x); // ヌキ色が有効な描画 halt; x++; } } |
もうここまで読んでこられた方ならば、何をしているかわかりますね。えっ?わからない?
わからない方は、ygs2kを実行しながら、いろいろ試してみるようにしてくださいな。
y座標を変化させるのに、変数はxでいいんですか?
注意深く読まれた方ならば、そんなことを言われるかも知れません。ええ、いいんです。プログラムとしては正しく動作します。変数名は名前なので、実際の役割とは無縁だからです。とは言っても、もちろん、内容を想像させる名前の方がいいのはいいですね。ここではyとなっているほうが適切でしょう。
そう言えば、むかし、オタッキーなプログラマが、変数名を自分の好きなアニメの主人公の名前にしていました。ちょうど、そのプログラムを見せてもらったのですが、
MagicalEmi = (CreamyMami + PastelYumi) /2;
こんな感じでした(笑) お前、これなんなんだよー。わかんないよーと周りからブーイングの嵐でした。みなさんも、そうならないように気をつけましょう(笑)
ヌキ色なんですが、DirectXのプログラミングの用語では「カラーキー(Color Key)」と呼ぶようで、私もマニュアルを書いた時点ではそれで統一していたのですが、どうもこのへんがわかりにくいようで質問が絶えません。そんなわけで、マニュアル中でカラーキーと書いてある部分は、すべてこのヌキ色のことなんだな、とご理解いただければ幸いです。
6.最後に
今回の講義はどうでしたか?ここまでは理解できましたか?
×××ツクールと比べて、少し道のりは長そうですが、そこには自分で1から作る喜びや、好きなゲームを作れるという無限の可能性があると思います。ygs2kは、今では幅広い利用者を得て、先日オフ会を行なったりと、ユーザー同士の情報交換も活発に行なわれています。
何も知らない状態から1本のゲームを完成させるには、それなりの知識や苦労は必要ですが、ygs2kを使えば思った以上に簡単です。それはみなさん言っておられます。肝心なのは、この講座を読んで、それでわかったつもりになるのではなくて、プログラムを自分でいろいろアレンジしてみることです。自分のやり方を試してみることです。その中で得られるものは、とても大きなものだと思います。
次回は、キー入力に応じて動かす部分と接触判定です。ここまでやれば、ygs2kでやっと簡単なゲームが作れるようになります。
そして次回には、WAFFLEから9月ごろに発売になる「詩(うた)/仮題」のほうのご紹介、および改造記事も書けると思います。
みなさん、乞う御期待!