12月20日 夜10時を回ってから,かずのHSPタイム第3回が始まった。兄こうしろうが遅くまで起きているせいか,かずもだんだん夜更かしになってきた。この日はまず,キーボードからの数値入力を2つ受け取り,足した結果を表示するプログラムを作ってみた。

----------------------------------------
*input_ab
  a=0
  input a
  b=0
  input b
  button "+",*tasizan
  stop
*tasizan
  c=a+b
  print c
  goto *input_ab
----------------------------------------

 このプログラムは,HSP(Hot Soup Processor)でキーボード入力はどうやるのかなと調べがてら私が作ったものである。input aとすると入力ボックスが表示される。button "+",*tasizanで「+」をキャプションとするボタンが作成され,そのボタンをクリックすると,ラベル*tasizanへジャンプしaとbの足した結果をcに入れ,表示する。次にgoto文で変数aの入力に戻る。

 ラベル*input_abに戻るたびに,入力ボックスが作成されるし,aの入力ボックスからbの入力ボックスへのタブキーやエンターキーでの移動もコントロールしていないのだが,試しに小さなプログラムを作ってみると,いろいろ発見がある。

 HSPはコンパイルして実行するのであるが,スクリプト言語なので変数は宣言しないで,いきなり使える。a=0と変数aに0を代入してから,input aで数値を入力すると,当たり前ではあるが数値として扱われる。input aに 10,input bに20と入れるとprint cは30を返す。a=""として input aを実行すると,入力した数値は文字列として扱われ,a+bは"10"+"20"となり"1020"と文字列として連結される。
 かずはそんな面白くもない説明を,「ふーん」という顔で,聞いていた。ここまでは,大過なく進んだ。この後であるかずの「わからん。何がわからんかわからん。」という時間がはじまったのは。

 今日の目標は,boxfコマンド書いた長方形を,マウスの動きに合わせてX軸方向に動かすことである。「長方形を描いて,waitでしばらく待って消すプログラムを作ってみよう。」とまずは,こてならし。

----------------------------------------
yy= 100
xx=5
color 200,255,100
boxf xx,yy,xx+60,yy+4
wait 100
color 0,0,0
boxf xx,yy,xx+60,yy+4
----------------------------------------

 かずは上記のようにプログラムを作って,実行した。白に近い色(color 200,255,100)で長方形を描いて,1秒(100ミリ秒)待ってから,黒(color 0,0,0)で同じ大きさの長方形で描いているので,しばらくすると長方形が消える。
 ここまでは,問題なかった。次にシステム変数mousexで現在マウスが指しているX座標がわかることを説明し,マウスの動きに合わせて長方形をX軸に動かしてごらんと課題を出す。順を追って説明しているつもりなのだが,かずは「わからん」と言う。

 「以前に描いた長方形を消して,mousexの示す場所に新しい長方形を描き直すんだ。マウスの動きに合わせて,繰り返し描画できるようにgoto文でラベルに飛ばすんだ。」
 以前に長方形を書いたX座標(xxの値)を,変数を使って覚えておくこと,プログラムの開始時点では何も描いていないから,他の状態と区別できるように変数に初期値を与えること,などと口を出し,手も出し,なんとか下記のプログラムができた。

----------------------------------------
  screen 0,600,480,1
  cls 4
  yy=350
  oldxx=-1
*draw_r
  xx=mousex
  title "x座標=" + xx
  if oldxx >= 0 {
    color 0,0,0
    boxf oldxx,yy,oldxx+60,yy+4
  }
  color 200,255,100
  boxf xx,yy,xx+60,yy+4
  oldxx=xx
  wait 3
  goto *draw_r
----------------------------------------

 変数oldxxが,前に描いた長方形のX座標である。oldxxには初期値として-1を入れている。oldxxが0以上の時,oldxxを始点とする黒色の長方形を描いて,白い色の長方形を上書きして消している。
 また,title "x座標=" + xxでmousexが返した値を,ウィンドウタイトルに表示している。プログラムをデバッグしやすくするために変数の値を表示するのは定石である。

 プログラムを動かしxxの値もチェックしてから,かずにわかったかと聞くと「わからん」と答える。「どこがわからん?」と聞いても「どこがわからんか,わからん」と返す。いくら説明を繰り返しても,入力がオフになっているような状態だ。もう時間も遅いので,今日はここまでとした。

 「かず,いやになったか?」,「なーん」,「もっかいやってみりゃ,わかっちゃ」(富山弁解説:もう一回やってみれば,わかるよの意)と励ますが,わからんを抱えたまま,ぶすっと「おやすみ」と言い残し自室へ行った。
 そうは言ったものの,やはり小学6年のかずにHSPのプログラミングは「ムリやったかな」と父も少し弱気になった。

 しかし,翌日,かずはめげることなく「昨日のやつ,やろやろ」と積極的であった。もう一度,昨日のプログラムを説明すると,なんとなくわかったようだ。昨日は単に眠たかったのか,それとも少し,プログラムに慣れたのだろうか。
「こんどはY軸に,上下にも長方形が動くようにしてごらん」と言うと,何度か「XXすりゃ,いいがけ?」と念押ししながら,下記のプログラムを作成した。

----------------------------------------
  screen 0,600,480,1
  cls 4
  oldxx=-1
  oldyy=-1
  mouse -1
*draw_r
  xx=mousex
  yy=mousey
  if xx > 540 {
    xx=540
  }
  if yy > 476 {
    yy=476
  }
  if (oldxx >= 0) & (oldyy >= 0) {
    color 0,0,0
    boxf oldxx,oldyy,oldxx+60,oldyy+4
  }
  color 200,255,100
  boxf xx,yy,xx+60,yy+4
  oldxx=xx
  oldyy=yy
  wait 3
  goto *draw_r
----------------------------------------

 実行結果をお見せすることができなくて残念だが,このプログラムを実行し,マウスを前後左右に動かすと長方形がそれに合わせて移動する。mouse -1はマウスカーソルを非表示にする。マウスカーソルが見えない方が,動きが自然に感じられる。
 ひと通りプログラムのテストを終えたかずは昨日のことなど忘れ,自信にあふれた顔をみせた。