見出し画像

大学入試センター試験「情報関係基礎」問3をプログラムする

 2022年度より,高校の「情報」は新学習指導要領に移行する。教科書がまだ届いていないが(来年度には各社から届くだろう。採用選定のために),プログラミングの比重が今より高くなるのは間違いない。文科省から研修用教材が出ているので,来年度は教育センターによる研修会も行われるだろう。現在「情報」を指導している教員の半数以上(調査はしていないが80%以上かもしれない)はプログラミングの経験がないからだ。
 また,2024年度からの,大学入試共通テストの科目再編で「情報」を入れる動きもある。これについて,「共通テストの「情報」新設を考える」に書いたが,これまで行われていた現行のセンター試験で,数学の中にある「情報関係基礎」がそのままスライドしても不思議はない。ただし,今はプログラミングと表計算が選択問題になっているが,プログラミングが必修となることが考えられる。
 では,「情報関係基礎」のプログラミングの問題はどのようなものか。これについても「共通テストの「情報」新設を考える」で書いたが,以前あった,数学でのBASICの問題とはまったく異なるものだ。当時のプログラミング問題の選択状況や解答状況と比較するのは的外れだ。
 過去問はつぎのような内容だ。

2007 ブロック落とし
2008 バブルソート
2009 素因数分解
2010 漢数字への変換
2011 順位づけ
2012 秤と分銅
2013 営業時間の設定
2014 太鼓と掛け声
2015 ゲーム盤
2016 商品を入れる箱
2017  三角形の個数
2017追 花見の日の決定
2018  迷路
2018追 俳句の順位づけ
2019  グループ分け
2019追 ゲームの得点計算
2020  宝探しゲーム

 筆者は,「情報」の授業でこれらの過去問を扱っている。中には難しいものもあるので,比較的簡単なものとして「ブロック落とし」「バブルソート」「素因数分解」「三角形の個数」をとりあげた。まず,センター試験の問題通りに解答し,その後,その形に合わせて,CindyScriptでプログラムを作る。このとき,実際には,問題に出ているコードの完成だけではちゃんと動かない。画面表示などの設定が必要なためだ。したがって,それらは用意した上で,試験の問題に準じて答えればいいようにしている。

 最新の2020年度の問題は宝探しゲーム。面白いので作ってみた。なお,問題を解くのに30分ほどを要したが(前述のブロック落としなどより難しい),これを授業で使えるようにするには数時間を要した。その理由を述べるにあたり,まず問題を提示しておこう。

 吉野さんはロボットを操作して宝探しをするゲームを作成している。図1はゲー ム画面の完成予想図である。ゲーム画面には,横 YOKO マス×縦 TATE マスで構成されたゲームボード(以降,ボードと呼ぶ),各種情報,ロボットを操作するためのわなボタンが表示される。ボードのマスには宝が一つ,罠が複数隠されている。ゲームの目的は,ボード上のロボットを上下左右に1歩(=1マス)ずつ移動させ,罠を探知して避けながら,決められた操作回数以内で宝のマスに入れることである。
           大学入試センター試験「2020年度情報関係基礎第3問」

画像1

この画面を実際に作ったのがタイトル写真である。再掲しよう。

画像2

問題は,たとえば次のようになっている。

画像3

「移動ボタンが押されたときの手続き」をプログラムする。しかし,当然ながら,ボタンを作って表示するプログラムは含まれない。ボードの表示についても問題にはない。これらはすべて作っておかなければならない。ロボットのや罠の絵も描かなければならない。

 実は,CindyScriptでは,ボタンを作るのも,画像表示するのも簡単なのである。
 ボタンは,Cinderellaの作図機能を使って,文字を画面に表示し,これに「インスペクタ」を使ってボタンの機能を与えることができる。ボタンを押したときに実行されるプログラムは,ボタンの属性の中に直接書いてもよいし,関数として定義しておいてボタンからその関数を呼んでもよい。
 ロボットなどの絵は,画像ファイルとして作っておいて,それを取り込んでしまう。取り込んでしまうので,別ファイルとして存在していなくてもよいのだ。表示は,座標と,その名前を指定するだけだ。
 これをPythonで書いたらどうか。残念ながらそれができるだけの知識がないので比較ができない。Pythonに詳しい方にご教授願えれば幸いである。
 ちなみに,CindyScriptでは,全部で140行程度だった。

ゲームの進行の図を示しておこう。
上下左右のボタンを選び(選ぶと色が変わる)「移動」「罠探知」のどちらかのボタンを押す。たとえば,「左」を選んでおいて2回移動した後,罠探知ボタンを押したら罠が見つかった場合の画面である。

画像4

その後,罠を避けて宝までたどり着くと,ゲームは終わる。なお「もう一度やる」というボタンはもとの仕様にはないので追加した。

画像5

罠にかかると次のようになる。それぞれのメッセージは,問題の仕様通り。

画像6

実際の授業では,問題の部分を空白にして埋めさせる,ということになる。
まず紙ベースで解いて,それを実際にコーディングするわけだ。その際,配列の要素の表現などで,言語の仕様が異なる部分を判断させながらコーディングさせることになる。したがって,この判断ができないと,前述のように,紙ベースではできたが実際のコーディングができない,ということがでてくるわけだ。

 ところで,問題のコーディングだけではゲームとして不十分なところがいくつかある。たとえば,罠探知をしたときに,罠があれば「罠を発見した」というメッセージを表示するが,罠がなかったときには何も起こらない。ここはやはり「罠はなかった」というメッセージを出したいところだ。また,罠にかかると「ダメージを受けた」となるが,実際にはダメージに相当することは起こらない。これも,ダメージによって(罠から脱出するために)残り操作回数が1回減る,といったことをしたい。また,右に進むときはロボットの向きも右にするとか,追加することがいろいろ考えられる。それらを追加して考えさせるのも面白いだろう。

 共通テストに「情報」が組み込まれるか,また,教科書で使われる言語がどうなるか,など不明な点は多いが,こんな形で過去問で練習しておくことは可能である。