.
中高生のための
今から始めるプログラミング
11. 終了処理を行う(最終回)
最終更新日:2004/02/12

<<BACK ↑HOME NEXT>>

 1  サブルーチンの作成
ゲームを終了した時に何も表示されないのは寂しいですよね。そこで、ここでは、ゲーム終了時に勝敗が表示できるようにします。終了処理を行うサブルーチン(finish)を作成し、プログラム内の stop文を全て call finish に書き換えましょう。
 
10 declare external sub main.format
20 declare external sub main.post
30 declare external sub main.put
40 declare external function main.check
50 declare external sub main.finish
  
!**************** メインルーチン ****************
110 call format  !formatを呼び出し
160 let w=40 !格子の幅
165 let left=0 !初期化
210 do until right=1
  ......
299 loop
990 call finish !finishを呼び出し
999 end
  
!**************** サブルーチン ****************
1000 module main  !モジュール定義
1010 public sub format
1020 public sub post
1030 public sub put
1040 public function check
1050 public sub finish
1100 share numeric w,r,pieces(0 to 7,0 to 7),p
  ......

!---------------- ▽駒を置く ----------------
3000 external sub put(x,y)
  ......

3300 !パスだった場合の処理
3310 select case pass
  ......
3500 case 2
3510  call finish !ゲーム終了
3599 end select

3999 end sub
!---------------- △駒を置く ----------------
  ......

!---------------- ▽終了処理 ----------------
5000 external sub finish

5999 end sub
!---------------- △終了処理 ----------------

9999 end module
 

 2  両者の駒の総数を数える
それでは、両者の駒の総数を数えてみましょう。これは簡単です。白駒、黒駒の総数を表す変数 white, black を用意し、マス目を片っ端から調べていって、もし値が 1 ならば white に 1 を足し、-1 ならば black に 1 を足すようにすれば良いのです。これはすぐにソースにできますね。最後にプログラムの終了する命令文、stop文を追加しておきましょう。
 
!---------------- ▽終了処理 ----------------
5000 external sub finish

5100 !駒の総数を数える
5110 let white=0 !初期化
5111 let black=0 ! 〃
5120 for i=0 to 7
5130  for j=0 to 7
5140   select case pieces(i,j)
5150   case 1
5155    let white=white+1
5160   case -1
5165    let black=black+1
5170   case 0
5175    !何もしない
5179   end select
5189  next j
5199 next i

5900 !プログラムを終了
5910 stop

5999 end sub
!---------------- △終了処理 ----------------
 

 3  勝敗を判定する
さあ、いよいよ勝敗の判定です。これが最後に追加する項目です。これが終わるとオセロゲームが完成します。今まで勉強してきたことを改めて思い出しながらプログラミングしてください。オセロゲームの勝敗は、白の勝利(white>black), 黒の勝利(white<black), 同点(white=black) の3つにわけられます。このようなものは select case文でやるのが一番良いですが、select case文では定数しか扱えませんので、このような不等式のままでは実行できません。そこで、少し技巧的なことをします。まず、dif=white-black とします。すると、勝敗の行方は dif の符号にかかってきます。dif が正なら白が勝利し、負なら黒が勝利し、零なら同点になります。これなら select case文で書けますよね。それでは、最後のソースです。心して打ってください。
 
!---------------- ▽終了処理 ----------------
5000 external sub finish
  ......

5200 !勝敗判定
5210 let dif=white-black
5220 select case dif
5230 case is>0
5335  print white;"対";black;" 白の勝利です。"
5340 case is<0
5345  print white;"対";black;" 黒の勝利です。"
5350 case is=0
5355  print white;"対";black;" 同点です。"
5399 end select

5900 !プログラムを終了
5910 stop

5999 end sub
!---------------- △終了処理 ----------------
これで、ついにオセロが完成しました!最後の実行画面はこんな感じになります。
 

 4  オセロをプレイする 〜おわりに
さて、せっかくオセロが完成したのですから、とことん遊びましょう。まずは一人で遊んでみて、バグがないか確認してください。確認できたら、近くから友達を誘って、一緒にオセロを楽しみましょう。二人で十分楽しんだ後は、友達にこう言ってみてください。
 
「このオセロ、俺が作ったんだよ。」
きっと友達は目を丸くして驚くでしょう。そしてあなたをとても何かすごい人なんだなと思うに違いありません。さて、このサイトにたどり着く前、あなたはどちらの立場でしたか?そして今までの内容を振り返ってみてください。どこかに専門家じゃないと理解できない話題はありましたか?ないですよね。そうです。実はプログラミングは、大人たちの研究の材料ではなく、私たち中高生でも気軽にできるものだったのです。そうと知れば、その友達にも教えてあげてください。「でも、プログラミングって、今から始められるものなんだよ。」と。
それでは、ここまでの長い文章、読んでくれてありがとうございました。
 
完成したソースをダウンロード
 

<<BACK ↑HOME NEXT>>

Copyright (C) 2003-2004 Shohei Ohsawa, Naoya Okada & Fumiya Miyakawa. All rights reserved.