平成22年春期試験午後問題 問11
問11 ソフトウェア開発(Java)
次のJavaプログラムの説明及びプログラムを読んで,設問1,2に答えよ。
〔プログラムの説明〕
リバーシゲームで2人のプレーヤの対戦を支援するプログラムである。
リバーシは,8行8列の升からなる盤に,2人のプレーヤが,一方の面が白,他方の面が黒の石を置いていき,盤上の石の個数を競うゲームである。各プレーヤは自分の石の色(白又は黒)をもつ。盤には,初期状態として,図1のとおり中央に白黒2個ずつの石を配置する。升の位置は,列をアルファベット,行を数字で表し,列・行の順に指定する。 例えば,図1で最も左上の升はa1,最も右下の升はh8である。 プレーヤは,空いている升に石を置いて,縦,横,斜めのどれかの方向に隣接する相手の石を 自分の色の石で挟まなければならない。このとき,挟んだ相手の石をすべて反転させ自分の色の石とする。 図2に,黒をもつプレーヤが盤に石を置く例を示す。
(ア)は図1の中央部分を抜き出したものであると(イ)は,黒を升f5に置いて,升e5の白を挟んだ状態である。(ウ)は,挟んだ白を反転させて黒にした状態である。相手の石を挟むことができないときは,そのプレーヤは石を置くことができないので,手番をパスする。片方の色の石が盤上からなくなったとき,すべての升が石で埋まったとき,又は空いているどの升にも石が置けなくなったとき,ゲームは終了し,自分の色の石の個数の多い方のプレーヤが勝ちとなる。
列挙 Piece は石の面を表す。フィールド BLACK は黒,WHITE は白を表す。
クラス Player は,プレーヤを表す。フィールド piece は,そのプレーヤの石の色を表し,フィールド count は,盤上での石の個数を表す。
クラス Board は盤を表し,対戦を支援する次の(1)~(7)の機能を実現する。
〔プログラムの説明〕
リバーシゲームで2人のプレーヤの対戦を支援するプログラムである。
リバーシは,8行8列の升からなる盤に,2人のプレーヤが,一方の面が白,他方の面が黒の石を置いていき,盤上の石の個数を競うゲームである。各プレーヤは自分の石の色(白又は黒)をもつ。盤には,初期状態として,図1のとおり中央に白黒2個ずつの石を配置する。升の位置は,列をアルファベット,行を数字で表し,列・行の順に指定する。 例えば,図1で最も左上の升はa1,最も右下の升はh8である。 プレーヤは,空いている升に石を置いて,縦,横,斜めのどれかの方向に隣接する相手の石を 自分の色の石で挟まなければならない。このとき,挟んだ相手の石をすべて反転させ自分の色の石とする。 図2に,黒をもつプレーヤが盤に石を置く例を示す。
(ア)は図1の中央部分を抜き出したものであると(イ)は,黒を升f5に置いて,升e5の白を挟んだ状態である。(ウ)は,挟んだ白を反転させて黒にした状態である。相手の石を挟むことができないときは,そのプレーヤは石を置くことができないので,手番をパスする。片方の色の石が盤上からなくなったとき,すべての升が石で埋まったとき,又は空いているどの升にも石が置けなくなったとき,ゲームは終了し,自分の色の石の個数の多い方のプレーヤが勝ちとなる。
列挙 Piece は石の面を表す。フィールド BLACK は黒,WHITE は白を表す。
クラス Player は,プレーヤを表す。フィールド piece は,そのプレーヤの石の色を表し,フィールド count は,盤上での石の個数を表す。
クラス Board は盤を表し,対戦を支援する次の(1)~(7)の機能を実現する。
- 配列 grid は,盤の升を表す。配列要素 grid[row][col] において,row は行,col は列である。例えば,升d2は,grid[1][3] で表される。
- 列挙 Direction は,配列 grid において,縦,横,斜め8方向の隣接する升への row 及び col のオフセットを表す定数である。
- コンストラクタは,インスタンスを生成し,盤を初期状態にする。
- メソッド canPlace は,引数 player で与えられたプレーヤが石を置ける升が あるかどうかを調べ,あるときはtrue,ないときはfalseを返す。
- メソッド reverse は,引数 row,col で与えられた升に引数 piece で与えられた色の石を置いた場合,その升から引数 dir で与えられた方向に隣接する升の石が反転可能であれば反転する。このメソッドは,反転可能かどうかを判断するために隣接する升に対して自身を再帰的に呼び出す。 すなわち,再帰呼出しによって連続する相手の石の先に piece と同色の石があるかどうかを判定し,あった場合は相手の石を反転して復帰する。すべての再帰呼出しから復帰したとき,挟んだ相手の石はすべて反転し,その反転した石の個数を返す。反転できなかったときは,0又は負の値を返す。
- メソッド place は,引数 position で指定された升に引数 player で与えられたプレーヤの石が置けるかどうかを判定する。石が置ける場合は,升に石を置き,挟んだ相手の石を反転し,反転した石の個数を返す。この処理は,メソッド reverse を呼び出して行う。指定された升に既に石がある場合,又は相手の石を1個も反転できない場合は,0又は負の値を返し,指定された升に石は置かない。
- メソッド display は,盤の状態を表示する。
広告
設問1
プログラム中の に入れる正しい答えを,解答群の中から選べ。
a に関する解答群
- -1, 0
- -1, 1
- 0, 0
- 0, 1
- 1, 0
b に関する解答群
- grid[count][0]
- grid[nrow][col]
- grid[nrow][ncol]
- grid[row][col]
- grid[row][ncol]
c に関する解答群
- *=
- +=
- -=
- /=
- =
d に関する解答群
- ++n
- n
- n + 1
- n - 1
- n++
e に関する解答群
- board
- opponent
- Piece.BLACK
- Piece.WHITE
- player
解答選択欄
- a:
- b:
- c:
- d:
- e:
- a=オ
- b=ウ
- c=イ
- d=ウ
- e=イ
解説
この設問の解説はまだありません。設問2
次の表は,プログラム3のメソッド reverse の仕様をまとめたものである。表中の に入れる正しい答えを,解答群の中から選べ。ここで,bには正しい答えが入っているものとする。
f,g に関する解答群
- 隣接する升が存在しない,又は隣接する升に石がない場合
- 隣接する升にPiece以外のクラスのインスタンスが存在する場合
- 隣接する升の石が引数pieceで与えられた石と同色の場合
- 隣接する升の石が引数pieceで与えられた石と異なる色の場合
解答選択欄
- f:
- g:
- f=ウ
- g=ア
解説
この設問の解説はまだありません。広告