TICBAN.bas
が追加されます。
ゲームの解説です。画面には通路のパーツとなるブロックが並んでいます。
この上を一定の速度でボールが転がっていきます。通路に沿って迷路内を転がっていく
ボールの進路をうまく組み換えて上下左右にある1~8のゲートをすべて通すというのがゲームの内容です。
ゲートは、同じ番号2箇所を通ることで通過とみなされます。
(入り口の番号で入ったことがチェックされ、出口の番号通過で加点されます。)
一度通ったゲートには穴が開きます。
どのようにするかというと、迷路の中にはひとつだけ空白のブロックがありますので、
その部分を移動させることにより迷路を組み換えていくことができます。ちょうど15パズルのような要領です。
このあたりは説明を読むより、実際にあれこれやってみたほうがわかりやすいでしょう。
当然、通路からボールが落ちてしまったり、行き止まりになったら、ゲームオーバーです。
全部で11面ありますが、そのなかに1面だけクリアできない面かあるかもしれません。
そのほかの面はすべてクリアできることを確認してありますので、こんな面クリアできないよーなどと駄々をこねても
ダメですからね。
X-BASIC for iOS版はプログラムリストだけを見ての移植なので、オリジナルと同じ動作をしているかわかりません。
(S-OSの動作環境を構築できないので。X1エミュレーター自体は入手できたのですが。)
よって、クリアできるかどうかも不明です。
私の頭では1面もクリアできませんでしたので。
クリアしたはずなのに終わらないとか、バグがあるとわかる方はお知らせください。
オリジナルはOh!X1989年7月号のS-OS上のコンパイラTTC用のゲームです。 元があるので転載禁止です。 オリジナルのソースは以下に。
; TICBAN
; FOR Tiny Tiny Compiler
; PROGRAMED BY J.YAMADA
; Oh!X 1989-7
.R=0
WIDCH 40
7
'C' LOCATE 28,2 "* TICBAN *"
LOCATE 28,20 "FOR TTC" LOCATE 28,22 "BY J.YAMADA"
.S=0 .C=0 .M=1 GOSUB 880
10
LOCATE 27,17 "PUSH ANY KEY!"
LOCATE 27,17 " "
.A=(G IF A=0,10 IF A<'0,1 IF A>'9,1
.A=A-$30 .R=A GOSUB 880
; MAIN ROUTINE
1
REPEAT
.W=5 REPEAT GOSUB 870
.A=(G IF A=$1B,9
GOSUB 994 DEC W UNTIL W=0
GOSUB 500 IF A=0,6 GOSUB 880
6
IF F#8,5 GOSUB 700 ;ROUND CLEAR
5
UNTIL M=0
; GAME OVER
LOCATE 6,13 " * GAME OVER * "
LOCATE 28,14 "RETRY(Y/N)?"
8
.A=(F IF A=' ,7 IF A='Y,7
IF A#'N,8 CHR A
9
RETURN
; BALL MAIN ROUTINE
; BALL MOVE
500
LOCATE N,O CHR $7B .H=N .I=O
IF P=1,501 IF P=2,502
IF P=3,503 IF P=4,504
499
.N=H .O=I LOCATE N,I CHR 'O .C=C+1 ADC S GOSUB 803
.A=0 RETURN
; UP MOVE
501
GOSUB 505 IF A=0,499 ;UP CHECK
GOSUB 506 .P=2 IF A=0,499 ;RIGHT CHECK
GOSUB 507 .P=4 IF A=0,499 ;LEFT CHECK
GOTO 510 ;MISS !!
; RIGHT MOVE
502
GOSUB 506 IF A=0,499
GOSUB 508 .P=3 IF A=0,499
GOSUB 505 .P=1 IF A=0,499
GOTO 510
; DOWN MOVE
503
GOSUB 508 IF A=0,499
GOSUB 506 .P=2 IF A=0,499
GOSUB 507 .P=4 IF A=0,499
GOTO 510
; LEFT MOVE
504
GOSUB 507 IF A=0,499
GOSUB 508 .P=3 IF A=0,499
GOSUB 505 .P=1 IF A=0,499
GOTO 510
; MISS !!
510
LOCATE N,O CHR '* DEC M
LOCATE 8,11 " MISS ! " BELL 1 GOSUB 804
511
IF M=0,512 IF (G#' ,511 .A=$50 RETURN
512
.A=0 RETURN
; UP CHECK
505
.I=I-1 GOTO 509
; RIGHT CHECK
506
.H=H+1 GOTO 509
; LEFT CHECK
507
.H=H-1 GOTO 509
; DOWN CHECK
508
.I=I+1
509
GOSUB 550 GOSUB 560
RETURN
; SCRN CALL $9FF8
550
LOCATE H,I .A=$9F .B=$F8 CALL A,B GETA D
RETURN
; CHR CHECK
560
IF D=$7B,561 IF D='-,562
IF D='I,562 IF D=' ,562
IF D='+,562
IF G#D,563 BELL 1 INC F GOSUB 600
.A=G-$30*10 .C=C+A ADC S GOSUB 803
563
.G=D
561
.A=0 RETURN
562
.A=$F0 .H=N .I=O
RETURN
; GATE SUB
600
IF G='1,601 IF G='2,602
IF G='3,603 IF G='4,604
IF G='5,605 IF G='6,606
IF G='7,607 IF G='8,608
RETURN
601
.A=6 .B=0 GOTO 609
602
.A=18 .B=0 GOTO 609
603
.A=24 .B=6 GOTO 609
604
.A=24 .B=15 GOTO 609
605
.A=18 .B=21 GOTO 609
606
.A=6 .B=21 GOTO 609
607
.A=0 .B=15 GOTO 609
608
.A=0 .B=6
609
LOCATE A,B .Z=1 GOSUB 1011
RETURN
; ROUND CLEAR
700
LOCATE 6,10 " ROUND CLEAR! " BELL 1
INC R IF R#11,701 .R=0
701
IF (G#' ,701 GOSUB 880
RETURN
; BLOCK MAIN ROUTINE
870
.A=(G IF A=0,878
IF A='J,874 IF A='L,873
IF A='M,876 IF A='I,875
878
RETURN
; RIGHT MOVE 6
873
IF X=3,810 .L=X .X=X-3 GOSUB 888 .T=A
LOCATE L,Y .Z=A GOSUB 1011 .U=3 .V=0
GOTO 872
; LEFT MOVE 4
874
IF X=21,810 .L=X .X=X+3 GOSUB 888 .T=A
LOCATE L,Y .Z=A GOSUB 1011 .U=253 .V=0
872
.K=X .X=L GOSUB 889 .X=K
GOTO 877
; UP MOVE 8
875
IF Y=18,810 .L=Y .Y=Y+3 GOSUB 888 .T=A
LOCATE X,L .Z=A GOSUB 1011 .U=0 .V=253
GOTO 871
; DOWN MOVE 2
876
IF Y=3,810 .L=Y .Y=Y-3 GOSUB 888 .T=A
LOCATE X,L .Z=A GOSUB 1011 .U=0 .V=3
871
.K=Y .Y=L GOSUB 889 .Y=K
877
IF N-X>2,879 IF O-Y>2,879
.N=N+U .O=O+V LOCATE N,O CHR 'O
879
.T=0 GOSUB 889 .Z=0 GOSUB 1000
810
RETURN
; MEN DATA TO KVRAM DATA TENSOU
802
GOSUB 995 .A=$9F .B=00 WIND2 A,B
.K=0 REPEAT .]=[ .E=E+1 ADC D WIND1 D,E
.B=B+1 ADC A WIND2 A,B
INC K UNTIL K=42
RETURN
; SHOKIKA
880
GOSUB 802 GOSUB 990 GOSUB 997 GOSUB 800
.X=12 .Y=9 .Z=0 GOSUB 1000 GOSUB 1015
.T=0 GOSUB 889 .N=4 .O=4 LOCATE N,O CHR 'O .P=2
GOSUB 803 GOSUB 804 .G=0 .F=0
RETURN
; ROUND PRINT
800
LOCATE 28,12 "ROUND" PRT1 R RETURN
; SCORE PRINT
803
LOCATE 28,7 "SCORE " PRT2 S,C RETURN
; BALL PRINT
804
LOCATE 28,9 "BALL " PRT1 M RETURN
; BLOCK NO. ADDRESS
886
.D=$9F .E=00 .A=X-3/3 .E=E+A ADC D
IF Y=3,887 .B=Y-3/3 REPEAT
.E=E+7 ADC D DEC B UNTIL B=0
887
WIND1 D,E
RETURN
; BLOCK NO. READ
888
GOSUB 886 .A=[ RETURN
; BLOCK NO. WRITE
889
GOSUB 886 .[=T RETRUN
; WAKU PRINT
990
.X=0 .Y=0 GOSUB 991 GOSUB 991
.Z=1 GOSUB 1000 .Y=Y+3
GOSUB 992 GOSUB 992
.X=0 GOSUB 993 GOSUB 993
.Z=1 GOSUB 1000
RETURN
991
.Z=1 GOSUB 1000 .X=X+3
.Z=8 GOSUB 1000 .X=X+3
.Z=3 GOSUB 1000 .X=X+3
.Z=7 GOSUB 1000 .X=X+3
RETURN
992
.X=0 .Z=8 GOSUB 1000 .X=X+24 .Z=7 GOSUB 1000 .Y=Y+3
.X=0 .Z=2 GOSUB 1000 .X=X+24 GOSUB 1000 .Y=Y+3
.X=0 .Z=5 GOSUB 1000 .X=X+24 .Z=6 GOSUB 1000 .Y=Y+3
RETURN
993
.Z=1 GOSUB 1000 .X=X+3
.Z=5 GOSUB 1000 .X=X+3
.Z=3 GOSUB 1000 .X=X+3
.Z=6 GOSUB 1000 .X=X+3
RETURN
; WAIT
994
.A=15 REPEAT .B=0 REPEAT
INC B UNTIL B=0 DEC A UNTIL A=0
RETURN
; MEN ADDRESS MEN DATA $A000
995
.D=$A0 .E=00
.A=R IF A#0,996
WIND1 D,E RETURN
996
REPEAT .E=E+42 ADC D DEC A
UNTIL A=0 WIND1 D,E
RETURN
; MEN PRINT KVRAM AREA $9F00
997
.D=$9F .E=00 WIND1 D,E
.G=3 REPEAT .H=3 REPEAT
.Z=[ .E=E+1 ADC D WIND1 D,E
LOCATE H,G GOSUB 1011 .H=H+3 UNTIL H=24
.G=G+3 UNTIL G=21
RETURN
; BLOCK PRINT ROUTINE
1000
LOCATE X,Y
1011
IF Z=0,1001
IF Z=1,1002 IF Z=2,1003
IF Z=3,1004 IF Z=4,1005
IF Z=5,1006 IF Z=6,1007
IF Z=7,1008 IF Z=8,1009
RETURN
1001
" " 'DLLL' " " 'DLLL' " " RETURN
1002
"+-+" 'DLLL' "I+I" 'DLLL' "+-+" RETURN
1003
"+" CHR $7B "+" 'DLLL' "I" CHR $7B
"I" 'DLLL' "+" CHR $7B "+" RETURN
1004
"+-+" 'DLLL' CHR $7B CHR $7B CHR $7B
'DLLL' "+-+" RETURN
1005
"+" CHR $7B "+" 'DLLL' CHR $7B CHR $7B
CHR $7B 'DLLL' "+" CHR $7B "+" RETURN
1006
"+" CHR $7B "+" 'DLLL' "I" CHR $7B
CHR $7B 'DLLL' "+-+" RETURN
1007
"+" CHR $7B "+" 'DLLL' CHR $7B
CHR $7B "I" 'DLLL' "+-+" RETURN
1008
"+-+" 'DLLL' CHR $7B CHR $7B "I"
'DLLL' "+" CHR $7B "+" RETURN
1009
"+-+" 'DLLL' "I" CHR $7B CHR $7B
'DLLL' "+" CHR $7B "+" RETURN
; GATE NO. PRINT
1015
.A=4 .B=2 .K='1 GOSUB 1016
.A=A+6 .K='2 GOSUB 1016
.A=4 .B=21 .K='6 GOSUB 1016
.A=A+6 .K='5 GOSUB 1016
.A=24 .B=4 .K='3 GOSUB 1017
.B=B+3 .K='4 GOSUB 1017
.A=2 .B=4 .K='8 GOSUB 1017
.B=B+3 .K='7 GOSUB 1017
RETURN
1016
LOCATE A,B CHR K .A=A+6 LOCATE A,B CHR K
RETURN
1017
LOCATE A,B CHR K .B=B+6 LOCATE A,B CHR K
RETURN
END



0 件のコメント:
コメントを投稿