第3回レポート 勝敗判定機能を追加し by hcj

VIEWS: 11 PAGES: 9

									        第3回レポート
勝敗判定機能を追加し、
立体四目並べのプログラムを完成させる


締め切り:       7月27日(火)

来週の講義(7月20日)はレポートおよび授業に関す
る質疑
 完成した人は、来なくても可


             1
        プログラムの実行例
   1 2 3 4 5 6 7
 [ ][ ][ ][ ][ ][ ][ ]
 [ ][ ][ ][ ][ ][ ][ ]
 [ ][o][o][ ][ ][ ][ ]
 [ ][*][*][ ][*][ ][ ]
 [ ][*][o][o][o][*][ ]
 [*][*][*][o][o][o][*]
o : Drop where? (0 = Exit) 4
   1 2 3 4 5 6 7
 [ ][ ][ ][ ][ ][ ][ ]
 [ ][ ][ ][ ][ ][ ][ ]
 [ ][o][o][ ][ ][ ][ ]
 [ ][*][*][o][*][ ][ ]
 [ ][*][o][o][o][*][ ]
 [*][*][*][o][o][o][*]
     ===============
         o win!
     ===============
                          2
    プログラムの構成
主プログラム、showサブルーチン、dropサブルー
チンは、自分で作ったものを使っても、解答例の
ものを使ってもかまわない。
新たに、勝敗が決まったかどうかを確認する
サブルーチン check を作成し、
dropサブルーチンの末尾で call する。
 次ページのプログラム例参照

さらに、指定した場所から指定した方向に
同じ記号が連続して並んでいる数を返す
関数 number を作成し、checkサブルーチン内で
四目並んでいるかどうかの確認に用いる。
             3
         サブルーチン dropの例
subroutine drop(m, n, board, side)
implicit none
integer, intent(IN) :: m, n, side
character(len=1), dimension(m, n), intent(INOUT) :: board
integer :: x, done
character(len=1) :: mark

 select case (side)
 case (1)
   mark = '*'
 case (2)
   mark = 'o'
 end select

 done = 0
 do while (done == 0)
   write(*, '(a, a)', advance='NO') &
         mark, ' : Drop where? (0 = Exit) '
   read(*, *) x               4
      サブルーチン dropの例 (続き)
    if (x == 0) then
       stop
    else if (x > m .or. x < 1) then
      write(*, *) ' Out of range!!'
    else if (board(x, n) /= ' ') then
      write(*, *) ' This column is full!!'
    else
      y = m
      do while ((y > 1) .and. (board(x, y-1) == ' '))
         y = y - 1
      end do
      board(x, y) = mark
      done = 1
    end if
  end do
  call check(m, n, board, x, y)
end subroutine
                               5
   checkサブルーチン
引数: 5個
盤の幅、盤の高さ、盤の状態、
新しい玉の x座標、y座標
新しい玉が配置されたことによって、
四目並んだかどうかを判定する。
もし四目並んだら、盤の表示を行った後、
勝者の記号を表示して終了する。


          6
            number関数
引数: 7個
盤の幅、盤の高さ、盤の状態、
新しい玉の x座標、y座標、調べるx方向、y方向
 方向: -1 or 0 or 1

返り値: 整数
指定した座標から指定した方向に連続して同じ記号
が並んでいる数
                      6   [ ][ ][o][*][ ][ ][ ]
例えば座標(2,4)から          5   [ ][*][o][*][ ][ ][ ]
方向(1, -1)について、        4   [ ][o][*][o][ ][ ][ ]
同じ記号が連続して             3   [ ][*][o][*][ ][ ][ ]
いる数は 3                2   [ ][*][o][o][ ][ ][ ]
                      1   [*][o][*][o][*][ ][ ]
                           1 2 3 4 5 6 7

 方向(1, 1) なら 2, 方向(-1, 0)なら 1
                     7
     レポート提出
メールの本文には、
 プログラム作成にあたって苦労、工夫した点
を書く。
さらに、授業内容に関して、
分からないことなどがあったら、具体的に書く。




          8
       発展問題
興味があったら、以下の問題にも挑戦してみる

1. 列の指定時、四目並ぶ場所があれば、
   自動的にその列を選択するよう改変する

2. リバーシ(=オセロ)のプログラムを
   作成する



           9

								
To top