SHIROのIchigoJam日記

マイコン「IchigoJam」(イチゴジャム)の電子工作とプログラミングをメインに

大学入学共通テストのすごろく

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のマスに着くと終了します。
f:id:shiro0922:20210119001556p:plain
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で組んでみたのがこちら。
f:id:shiro0922:20210119002411p:plain
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