2015年7月17日金曜日

ゲーム;TICBAN

progloaderで「ゲーム;TICBAN」をダウンロードすると、
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 件のコメント:

コメントを投稿