1月22日 富山県西部に大雪が降った。吹雪が田も道も真っ白に染め上げた。かずは,雪のせいで車が車庫に入らないと母に頼まれ,せっせと雪かきをした。と書くと,いかにも孝行息子のように聞こえるが,実態は雪の中に大の字に寝転んだり,長靴の中をビショビショにして母に余計な手間を掛けた。雪が降るとワンコのように喜ぶ小学6年生なのである。

 そんなかずのHSP (Hot Soup Processor)によるプログラミングは,なぜか絶好調だ。 今日の課題は,
1. ラケット(細長い長方形)とボール(小さい四角形)の衝突(ヒット)判定をサブルーチン化すること。
2. 適切にコメントを入れること。
3. ラケットの動きを左右の動きだけにすること。
4. ミスしたら(ボールがラケットの下に行ってしまったら),ボールを消すこと。
5. 出てくるボールの個数を決め,ゲームを終了させること。
などである。

----------------------------------------
  screen 0,600,480,1
  cls 4
  oldy=-1
  oldx=-1
  x=300
  y=5
  z=4
  a=4
  yy=400
  oldxx=-1
  c=3
  mouse -1
*draw_r
  // y軸の壁への衝突を判定する
  if y <=2{
    z=z*(-1)
  }
  if y >= (winy-40){
    color 0,0,0
    boxf oldx,oldy,oldx+4,oldy+4
    wait 50
    oldy=-1
    oldx=-1
    x=300
    y=5
    if c > 1{
      c-=1
    }
    else {
      mouse 0
      stop
    }
  }
  // x軸の壁へ衝突を判定する
  if (x >= (winx-4) )|(x <=2){
    a=a*(-1)
  }
  // ボールを移動させる
  if (oldy >= 0) {
    color 0,0,0
    boxf oldx,oldy,oldx+4,oldy+4
  }
  color 200,255,100
  boxf x,y,x+4,y+4
  oldy=y
  oldx=x
  y+=z
  x+=a
  xx=mousex
  // ラケットがスクリーンから消えないようにする
  if xx > (winx-60) {
    xx=(winx-60)
  }
  // ラケットを移動させる
  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
  gosub *syoutotu
  wait 1
  goto *draw_r
*syoutotu
  // ラケットとボールの衝突を判定する
  if (y >= (yy-4))&(y <= (yy-1)){
    if (x >=(xx-3))&(x <= (xx+63)){
      z=z*(-1)
    }
  }
  return
----------------------------------------

 プログラムの行数が増えると,どこで何をしているかがわかりにくいやろ。だから,たとえば衝突判定をサブルーチン化したり,適切なコメントを入れることが必要なんだ,とかずに説明をする。
 サブルーチンはgosub文で実行すること,return文でサブルーチンから呼び出し元に戻ることを説明したら,*syoutotuサブルーチンを作成した。サブルーチンなんていう概念がわかるかなと心配したが,かずは深く考えず,ちょちょっとプログラムを手直しした。

 コメントは//に続けて書くことは,覚えていた。「どう書けば,わかりやすいかな」と考えて,あまりわかりやすくないコメントを書いた。しかし考えてみると,わかりやすくコメントを書くのはとても難しいことである。自分にだけわかりやすいコメントは簡単に書けるが,多くの人にわかりやすいコメントは,プログラミングよりも難しく感じられるほどだ。なお,hspのコメントはセミコロン(;)に続けて書くこともできる。

 ラベル*draw_rの数行下のif文のなかで,ラケットの下にボールが行ってしまった場合の処理を実行している。color 0,0,0(黒)でボールを書くことによりボールを消し,持ち球の数を記録する変数cの値を減らし,新しいボールを出すのか,stopでプログラムを終了させるのかを判断している。

 かずがプログラミングしている様子を肩越しにみながら,初心者には関数型の言語より,ズラズラーとコードを並べ,ラベルでぐるーんとループさせるタイプの言語の方がわかりやすいのかなと感じた。

 持ち球の個数を表示させ,減らしていくようにすれば,ゲームらしくなるだろう。BGMも付ければ,もっとそれらしいだろう。プログラムの作りとしては,もうちょいサブルーチン化して,コンパクトにまとめたいところである。