第二十一話 初めてのプログラム
翌日、俺は授業が終わると部室へと向かって行った。
昨日出会った女の子の事を思い出してた。彼女とは途中で別れたが、そのうちまた逢えそうな予感がしていた。
ただ一つ、気になっていたことがあった。
部室では立花先輩と西原さんが既に来ていた。
「あ、イツキくん、今日もよろしくね」と先輩はにこりと笑みを見せた。
「うぃーす、先輩。西原さんも」
「あら、来ましたね。さっきから立花先輩とイツキくんのこと、話してたんですよ」
一体、なんの話をしてたやら。
俺は自分の席へと向かいながら、気になっていた事を先輩に尋ねた。
「先輩、Lispって知ってますか?」
「え、そりゃ知ってるけど。関数言語でしょ? あたしはちょっとEmacsを拡張するのでしか使わないけど」
先輩は、それがどうしたって顔をしている。
「関数言語?」
「うん。Cを含めた大半のプログラミング言語は手続き型言語ってカテゴリーに入るのよ。後から作られたC++、C#、Javaとかはオブジェクト指向言語ってのに進歩しているけど、基本は手続き型ね。でも、Lispは違う。関数型って言って、かなり変わっているわよ」
そう言ってから、先輩は俺をまじまじと凝視した。
「ふーん、イツキくん、Lispに興味あるの? へぇー。やるじゃない、ハッカーへの第一歩ね」
「い、いや。ちょっと小耳にはさんだだけだよ」
「なんだ」先輩はくすっと笑った。「ま、Lispは、プログラマなら誰もが一度は挑戦したいと思う言語ね。パソコンの父、アラン・ケイは、Lispを『これまでに設計された最も偉大なプログラミング言語』って言ってるわ」
「へえ。そうなんだ」
アラン・ケイなんておっさんは知らんが、先輩がそこまで評価しているのなら、きっと凄い言語なのだろう。
それを使いこなしていた昨夜の少女はいったい……?
「でも今はイツキくんは、Cに専念したほうがいいわね。あれこれと色んな言語を齧っても、どれも使いこなせないのなら意味ないわよ」
「そうですね」
これで、話は終わり、俺は自分のPCの前に座るとブートをかけた。
「それじゃあ、イツキくん。早速始めようー」
Windowsの画面が表示されると、先輩は溌剌と言った。
うむむ。ついに来てしまった。俺の初プログラミング。
「イツキくん、頑張ってくださいね」と西原さんも横で応援する。
「しかし、何を作ればいいのやら」
「そうねぇ。最初はすごーく簡単なものから始めるといいわよ。例えば……数当てゲームとか」
「数当てゲーム?」
「うん。たとえば1から10までの数の中から、ランダムに決めた正解を1つ作るでしょ。で、プレイヤーが数を入力して、それが正解かどうか判定するってやつ」
「えらい簡単な内容ですね。今時の3DFPSなんかと比べれば」
比べても仕方ないが、それでも……だ。
「馬鹿にしちゃダメよ。これでも、ゲームプログラミングについて多くの事を学べるんだから。たとえば、メインループとか」
「メインループ?」
「ゲームは常に、プレイヤーからの入力、判定、出力をループさせ続けているの。これは、どんなゲームもそう。3Dのゲームとかも、単純に言えば、マウスやジョイスティックでの入力、そしてプレイヤーキャラや敵キャラの移動の計算、移動結果を画面に表示、音を鳴らすを繰り返しているだけなのよ」
「ううむ。なるほど。なら、まずは数当てゲームをやります」
俺は覚悟を決めた。
いくぞ、京塚イツキ! 俺の華麗なるゲームプログラマの道が、いま始まるのだ!
/* 数当てゲーム kazuate.c */
#include<stdio.h>
int main(void)
{
int seikai = 5;
int kazu;
printf("数当てゲーム \n");
printf("数を入力してください(1 - 10) :");
return 0;
}
「とりあえず、ここまで書いたが……」
「ま、イツキくんにしては上出来ね。出来れば変数とか英語にしてほしいけど」
先輩は苦笑する。この女、いつも一言多いな。
「まあまあ。ちなみにC#だと、日本語文字の変数も出来るんですよー」と西原さん。
「ところで、正解は5で固定しましたが、ランダムって……」
「ランダム知らないの? デタラメに選ぶ数のことよ。サイコロを振って決めるようなの。ま、後でやり方は話すから、今は5で固定しておきましょ」
「ふむふむ。次は、入力ですよね」
「文字の入力は、scanf関数……は、やめておいて、前に話した──」
「完全に忘れました」
俺は白状した。
「でしょうねぇ……」先輩もため息をつく。「思い出させてあげる。fgetsとsscanf関数を使うのよ。詳しくは第八話を見てね」
「うむむ。では、こうかな?」
俺はコードを付け加える。
/* 数当てゲーム kazuate.c */
#include<stdio.h>
int main(void)
{
int seikai = 5;
int kazu;
char buf[100];
printf("数当てゲーム \n");
printf("数を入力してください(1 - 10) :");
fgets(buf, 100, stdin);
sscanf(buf,“%d“,&kazu);
printf("正解は、 %d です!\n" , seikai);
return 0;
}
「上出来上出来。じゃ、とりあえずここまで走らせてみようー」
先輩の言葉に俺は頷き、コマンドプロンプトを開くと、自ら入力する。
C:¥sample>gcc -o kazuate -Wall kazuate.c_
「どきどきするな……」俺は呟く。
「始めてのプログラムだと、誰でもそうよね。エラー無いかな、とか、ちゃんと動くかなー、とか」
「ええ。じゃ、やりますよ」
意を決すると俺はエンターキーを押した。
gcc、俺を裁いてみやがれ!!