2021年度大学入学共通テストが1/16(土)・17(日)に行われましたが、17日の科目「情報基礎」の第3問
https://mainichi.jp/exam/kyotsu-2021/q/?sub=IFB10
で、すごろくのプログラミングの問題が出ました。
IchigoJam BASICで、そのすごろくを組んでみました。
ゲームプログラムを作ったことがある受験生は「うんうん、配列変数はこんな風に使うよね」でしょうが、未経験だとかなり難しいんじゃないでしょうか。
問1「基本のすごろく」
問題を穴埋めした正解のプログラムはこちら。
(01) ninzu←2, owari←0, r←0 (02) iを1からninzuまで1ずつ増やしながら, (03) | Koma[i,r]←1 (04) を繰り返す (05) owari=0の間, (06) | r←r+1 (07) | iを1からninzuまで1ずつ増やしながら, (08) | | Saikoro[i,r]←【出た目を入力】 (09) | | k←Koma[i,r-1] (10) | | bairitu←Masu[k] (11) | | もしbairitu=0かつSaikoro[i,r]≧4ならば (12) | | | bairitu←1 (13) | | を実行する (14) | | idou←切り捨て(Saikoro[i,r]×bairitu) (15) | | Koma[i,r]←k+idou (16) | | もしKoma[i,r]<1ならばKoma[i,r]←1を実行する (17) | | もしKoma[i,r]≧15ならば (18) | | | Koma[i,r]←15, owari←1 (19) | | を実行する (20) | を繰り返す (21) を繰り返す
これをIchigoJam BASICで組んでみたのがこちら。
スペースキーを押すと、プレイヤーが交互にさいころを振って進みます。コースの15のマスに着くと終了します。
IchigoJam webで動かせます。
1 CLS 2 LET [1],1,1,-1,2,1,0,1,0,1,1,-1,2,1,-1,1 3 LC 0,2 4 FOR X=1 TO 15 5 IF [X]=1 ?"-"; 6 IF [X]=-1 ?"/"; 7 IF [X]=0 ?"O"; 8 IF [X]=2 ?"@"; 9 NEXT 10 N=2:E=0:R=0 20 FOR I=1 TO N 22 LC 0,I-1 23 ?I 25 LC 0,I*5 26 ?"==PLAYER";I;"==" 27 ?"-":?"-":?1 30 [I*20+R]=1 40 NEXT 50 @LOOP 60 R=R+1 70 FOR I=1 TO N 72 LC R*3,I*5+1 73 ?R 74 BEEP:WAIT 30 75 IF !BTN(32) CONT 76 SRND TICK() 80 [40+I*20+R]=RND(6)+1 85 LC R*3,I*5+2 86 ?[40+I*20+R] 90 K=[I*20+R-1] 100 B=[K] 110 IF B=0 AND [40+I*20+R]>=4 THEN B=1 120 ' 130 ' 140 D=[40+I*20+R]*B 141 IF B=2 D=[40+I*20+R]/2 150 [I*20+R]=K+D 160 IF [I*20+R]<1 THEN [I*20+R]=1 170 IF [I*20+R]>=15 THEN [I*20+R]=15:E=1 180 ' 190 ' 191 V=#900+32*(I-1) 192 POKE V,0 193 COPY V+1,V,31 194 LC [I*20+R]-1,I-1 195 ?I 197 LC R*3,I*5+3 198 ?[I*20+R]; 200 NEXT 210 IF E=0 GOTO @LOOP 211 BEEP 10,30 212 LC 0,15 213 CLK
- 行番号は、問題プログラムの(01)→10、(02)→20…と10刻みに対応しています。それ以外の行は画面表示など他の処理をしています。
- 変数は以下のように変えています。
- owari → E
- bairitu → B
- idou → D
- Koma[*,*] → [20]~[39](プレイヤー1)、[40]~[59](プレイヤー2)
- Saikoro[*,*] → [60]~[79](プレイヤー1)、[80]~[99](プレイヤー2)
問2「オバケを追加」
問題を穴埋めした正解のプログラムはこちら。
(01) ninzu←2, owari←0, r←0, obake←6 (02) iを1からninzuまで1ずつ増やしながら, (03) | Koma[i,r]←1 (04) を繰り返す (05) owari=0の間, (06) | r←r+1 (07) | a←(r-1)%4 (08) | もしa<2ならば (09) | | obake←obake+1 (10) | を実行し, そうでなければ (11) | | obake←obake-1 (12) | を実行する (13) | iを1からninzuまで1ずつ増やしながら, (14) | | Saikoro[i,r]←【出た目を入力】 (15) | | k←Koma[i,r-1] (16) | | bairitu←Masu[k] (17) | | もしbairitu=0かつSaikoro[i,r]≧4ならば (18) | | | bairitu←1 (19) | | を実行する (20) | | idou←切り捨て(Saikoro[i,r]×bairitu) (21) | | Koma[i,r]←k+idou (22) | | もしKoma[i,r-1]<obake かつ Koma[i,r]>obakeならば (23) | | | Koma[i,r]←obake (24) | | を実行する (25) | | もしKoma[i,r]<1ならばKoma[i,r]←1を実行する (26) | | もしKoma[i,r]≧15ならば (27) | | | Koma[i,r]←15, owari←1 (28) | | を実行する (29) | を繰り返す (30) を繰り返す
これをIchigoJam BASICで組んでみたのがこちら。
IchigoJam webで動かせます。
1 CLS 2 LET [1],1,1,-1,2,1,0,1,0,1,1,-1,2,1,-1,1 3 LC 0,3 4 FOR X=1 TO 15 5 IF [X]=1 ?"-"; 6 IF [X]=-1 ?"/"; 7 IF [X]=0 ?"O"; 8 IF [X]=2 ?"@"; 9 NEXT 10 N=2:E=0:R=0:G=6 20 FOR I=1 TO N 22 LC 0,I-1 23 ?I 25 LC 0,I*5 26 ?"==PLAYER";I;"==" 27 ?"-":?"-":?1 30 [I*20+R]=1 40 NEXT 50 @LOOP 60 R=R+1 70 A=(R-1)%4 80 IF A<2 THEN G=G+1 ELSE G=G-1 90 ' 100 ' 110 ' 120 ' 121 LC G-2,2:?CHR$(0,237,0) 130 FOR I=1 TO N 132 LC R*3,I*5+1 133 ?R 134 BEEP:WAIT 30 135 IF !BTN(32) CONT 136 SRND TICK() 140 [40+I*20+R]=RND(6)+1 145 LC R*3,I*5+2 146 ?[40+I*20+R] 150 K=[I*20+R-1] 160 B=[K] 170 IF B=0 AND [40+I*20+R]>=4 THEN B=1 180 ' 190 ' 200 D=[40+I*20+R]*B 201 IF B=2 D=[40+I*20+R]/2 210 [I*20+R]=K+D 220 IF [I*20+R-1]<G AND [I*20+R]>G THEN [I*20+R]=G 230 ' 240 ' 250 IF [I*20+R]<1 THEN [I*20+R]=1 260 IF [I*20+R]>=15 THEN [I*20+R]=15:E=1 270 ' 280 ' 281 V=#900+32*(I-1) 282 POKE V,0 283 COPY V+1,V,31 284 LC [I*20+R]-1,I-1 285 ?I 287 LC R*3,I*5+3 288 ?[I*20+R]; 290 NEXT 300 IF E=0 GOTO @LOOP 301 BEEP 10,30 302 LC 0,15 303 CLK
- 変数は以下のように変えています。
- obake → G