プログラムの練習

折角なので、今日、BOXで語ったことのまとめ。二年生らがここを見てるかはしらんので、このページを教えるなり、内容を印刷するなり、普通に話すなりして、彼らに言っておいて>本

プログラム学習には大きく二つあります。

  • プログラムの学習
  • プログラム言語の学習

プログラムの学習というのは、プログラムの組み方(データ構造とか制御構造とか、アルゴリズムとか)のこと。プログラム言語の学習というのは、言語が持ってる機能(Cだとポインタとか、C++だとクラスとかtemplateとか)のこと。
 学習を始めた頃は、この二つを混同します(プログラムの学習=プログラム言語の学習と思ってしまう)が、まったく別物なので、まずこれを意識しましょう。
 で、始めた頃にまずやるのは、もちろん、プログラムの学習です。一番、良い学習方法は、自分の興味のあるソフトを作ってみることです。掲示板でもblogでも、ゲームでも、ウィルス(ぉ)でも、何でも良いです。

ま、俺はゲームが専門ですんで、ゲームを例に取りますと、もし、作りたいというゲームがあるんだったら、とりあえず、それをやってみましょう。特に無くて、漠然とゲームがいいなー、と思ったのなら、シューティングがお勧めです。
 シューティングは、凝り方ひとつで簡単にプログラムの難度調整が効くので、題材としては良いです。
 で、とりあえず、言語を舐めただけの初心者は、インベーダーを作って見ましょう。ちなみに、ブロック崩しでもほぼ同難度なので、そっちでも良いです。

インベーダーとしては、自機は横に移動するだけ、弾を一度に一発しか撃てない(弾が画面から消えるまで次弾打てない)、敵は複数いて、画面端に到達すると下がってくる。敵に弾が当たると敵が消える。
 ぐらいから始めましょう。もちろん、実際に作る時は、まず、自機を表示して動かせるようにしてー、とやっていくわけですよ。
 これができたら、敵からも弾を撃たせる。敵の弾避け壁を作る。ステージによって敵の数を変えてみる。たまに敵も縦に動いたりするようにしてギャラガ風にする。縦(横)スクSTGを想定して、自機を自由に動かせるようにする。誘導弾を作ってみる。ゼビウス風にしてみる。グラディウス風にしてみる。東方にしてみる。etc.

と段々とやれることを増やしていくだけで、プログラムの学習になります。
 やっていくうちに、プログラム長くなって関数わけ始めたり、敵とかを管理するためにデータ構造を考えてみたり、敵を倒したときに爆発さようとしてアニメ制御をできるようにしたりとかして、上達していきます。
 ここでポイントは、諦めないでとにかく考えて、調べまくること。で、そのもの使えそうなソースが見つかっても、コピぺしない。見ながら打ち込むこと。コピぺはまったく頭に残りません。そんなことやってもちっともプログラムは上達しないです。

ひとしきりできるようになったら、今度はADVを作ってみましょう。もちろん、吉里吉里/KAG3とかを使うなよw むしろ、吉里吉里/KAG3を作るんですよ。あそこまで高機能にする必要はないですが。簡単な命令を読み込んで、テキストを表示したり絵を表示したりするぐらい。この辺をいじってけば吉里吉里/KAG3とかになっていくんだなー、というのがわかったらOK。

ここまでくれば、もう初心者は脱却してます。ちょっと凝ったSTG+簡易ADVエンジンで、プログラムの基本+αですんで。
 そしたら、振り返ってみましょう。自分が一番楽しかった部分はどこかと。それによって、自分が興味のある分野が判明します。

言語は何でも良いんですが、とりあえず、Javaとかで良いかな。Cだとお膳立てが結構面倒なので(昔は、elという素晴らしいライブラリがあったんですがサポートが終わっちゃて、最新のDirectXSDKで動かないんですよね・・・あれが使えるなら楽なんすが)。お膳立てが必要でもCでやりたいというなら、それはそれでやりかたは教えましょう。
 ゲーム分野で調べてるとHSPとか出てきますが、他の言語への移行を考えると個人的には微妙かと。再帰も使えない言語でゲームプログラムは無理。最新のHSPは使えるかもしれませんが。

ま、そんなとこで。質問等はコメントか携帯にメールするなり、会ったときに言ってくれい。