======== break_k.def ======== 大野元久 Oh!No! 1992/06/20 25/10/17 konno 2025-09-30 k01 CPU負荷軽減、カーソルキー対応 konno 2025-10-04 k02 キー加速、だんだん速度アップ、バー伸ばし 2025-10-17 k03 ターボカーソル、ボール軌道変化、難易度・パターンメニュー化 * Macro 70 ^\ "BreakOut" ?. &m("") &04 ;push ; 初期化 x=12, y=12, a=1, b=1, d-, f=100, h=18, p-, ; dj+, ; 全角スペース表示 ; wl12, ; メニュー位置 &s &#Y(0) mx[+, #N "$$SHOOT$$.%%%" #m mx], ;close mr+, ; an$1e, as$11, ;背景を青にする (wy<=20)?{ ; ======== ステータスライン消し ======== wa.54=0, #] ; テキスト上端を上げ #85 再描画 wa.56=lc, wa.57=lc-1, ; FKEYラインを下げて消す &d } &d !01 (r<0)? >q ; ゲームメニュー k=r, pp=k, (fa)? { g-, k"上級", } ? { g+, k"初級", } &m("■■■ %sモード パターン%d でゲームスタート ■■■",k,r+1) ; &d >z &07 ; u 機種判別 0:VTDOS 1:MS-DOS Player 2:DOSVAXJ3 c-, ; count t-, ; キーブーストフラグ q120, ; 速度アップ閾値 bb1, ; ★★ bb0:beep off bb1:beep on e=8, ; ★★ e ウエイト値 ; g1, ; ★★ g1:初心者向け? ; pp1, ; ★★ pp:ブロックパターン ; ; (pp>6||pp<0)? pp4, ; ; (g==0)? o"===", ? o"====", (g==0)? o"〓〓〓", ? { o"〓〓〓〓", } &s mr+, ; (38){' '} #m (pp!=5)?{ (30){ ' ' } #m #e #k #p #x #x } ; n=5, n=4, (pp==5)? n=2, :A &08 ; (4){ ' ' } (30){ '■' } (4){ ' ' } #m (pp==5)?{ (30){ ' ' } #m #e #k #p #x #x &08 #p #p } (wy-8){ #p } ; ゲーム本体 ======================================== :L (e>=1)? { (c==q)? { e--, q=q*3-40, } } ;speed up 80 200 560 1640 4880; f++, (f<32)? >M f-, (g==1)? >M ;初級なら障害物無し &x(p) &y(10) &?("      ") &r p=r%33, &x(p) &?("▼▼▼▼▼") :M (f&1)? >S i=x*2, j=y, &x(x*2) &y(y) x += a, y += b, ; (x<0||x>37)? { a = -a, x += a*2, } ; org (x<0||x>29)? { a = -a, x += a*2, } ;?? (y<0)? { b = -b, y += b*2, >N } &x(x*2) &y(y) ; (cd=='=')? { &02 b = -b, y += b*2, >N } ; org (cd=='〓')? { &02 b = -b, y += b*2, >N } ; (ly>=(wy-2))? >Q (cd==' ')? >N d += (cd == '■'), (bb)? { &b(2) } ; beep &m("%4d pts. wait%d count%d",d,e,c) ; &x((x-a)*2) m=(cd==' '), &x(x*2) &y(y-b) n=(cd==' '), (m==n)? { a = -a, b = -b, >N } (m)? a = -a, (n)? b = -b, :N &x(i) &y(j) ; " " (j==wy-4)? { (i>0)? { #s } (i>54)? { &x(54) } "   " >j ;S } " " ; &x(x*2) &y(y) "○" ; org :j &x(x*2) &y(y) "●" :S &y(wy-3) &s ; キー入力 &01 ;&k k=r, (k==27)? >q ;Q &06 ; &?("    ") :k #if DOSV ; PC-9801 以外でのキー入力 ((k=='4'||k==$4B00)&&(h>0))? h--, ;← ((k=='6'||k==$4D00)&&(h<35))? h++, ;→ #endif #if 98 ; PC-9801 でのキー入力 ((k=='6'||k==$3C00)&&(h<35))? h++, ;→ ((k=='4'||k==$3B00)&&(h>0))? h--, ;← ; k=$052a, ; org ; dz[, dz-, ; ((k.8&$40)&&(h>0))? h--, ; ((k.9&$01)&&(h<35))? h++, ; dz], &k (r==27)? >Q #endif ; キー入力終り (h<0)? h=0, (h>27-g)? h=27-g, &x(h*2) ; &?("===") ; org &?("%s",o) ; &?("〓〓〓") &d &s ; &k k=r, (k&&t==0)? { &x(h*2) &?("   ") t+, >k } &00 ;(k&&t<2)? { t++, >k } (t>1)? >m :n (k=='4'||k==$4B00)? { &06 h=h-2, &00 t++, >k } ;← (k=='6'||k==$4D00)? { &06 h=h+2, &00 t++, >k } ;→ :m t-, (k=='S'||k=='s')? { :s &k (r)?? { &03 >s } } (k==0)? &03 (t==2)? { t-, >n } ; wait 時間待ち c++, >L :Q ; 終了 ============== &d #if 98 am[10, #else am[79, #endif (4){ &m(" ★★★ GAME OVER!★★★ ") :y &k (r)?>y &d &b(2) &w(10) ; beep #if 98 (am==10)? am12, ? am10, #else (am==79)? am47, ? am79, #endif } am], :q mx[+, #C (s)? 'N' mx], ;close #] :z (wa.54==0)?{ &d wa.54=1, #] ; ステータスライン on wa.56=lc-2, wa.57=lc-3, ; ##06 FKEYライン復帰 } &m("%4d pts. wait%d count%d ",d,e,c) &05 ;pop . ;============================================== 00: ; ==== key input ==== &k k=r, 01: ; ==== 速度変更 ==== &00 (e<4)? . (k>='1'&& k<='3')? { ((k-48)*10) { d++,} e=e-(k-48), } ; 0 〜 9 (k=='S'||k=='s')? { :s &k (r)?? { &03 >s } } 02: ; ボール軌道変更 ===== (bb)? { &b(2) } ; beep &00 (k=='6'||k==$4D00)? { i=x*2, x++, } ;→ (k=='4'||k==$4B00)? { i=x*2, x--, } ;← 03: ;idle ウエイト ===== &00 (k=='4'||k==$4B00)? { t2, . } ;← (k=='6'||k==$4D00)? { t2, . } ;→ &w(e) ; 時間待ち #if 98 (e<=0)? { &w(1) . } ; &i($28) #else ; (e>=6)? { ax$1680, &i($2f) } ;&m("idle call: AX=%04x CF=%d",ax,r) #endif 04: ;push ========== wl[12, du[-, dj[-, de[-, mi[+, am[, an[, as[, ; 1 1 1 0 0 95 15 bb[, qq[, #if kVZ op[-, ; 14 インジケータバー #endif 05: ;pop ========= #if kVZ op], #endif qq], bb], as], an], am], mi], de], dj], du], wl], &d wa.54=1, #] ; ステータスライン on wa.56=lc-2, wa.57=lc-3, ; ##06 FKEYライン復帰 06: ; バー消し ======= &s (h<0)? h=0, (h>26)? h=26, &x(h*2) &?("    ") 07: ; ==== 機種判別 ==== AX=$7476, BX=$0000, CX=$6F64, ;VTDOS:ax0 MSP:ax1 DOSVAXJ3:ax$7476 &i($2F) u=2, ;VTDOS check $7476なら DOSVAXJ3 (ax==$7476)? { u=2, } ;DOSVAXJ3 (ax==1)? { u=1, } ;MS-DOS Player (ax==0)? { u=0, } ;VTDOS 08: ; ==== ブロックパターン ===== ; n=5, n=4, (pp==5)? n=2, :A ; (4){ ' ' } (30){ '■' } (4){ ' ' } #m ; org (pp>0&&pp<5)? { (pp){ ' ' } } (pp<5)? { (30-(pp*2)){ '■' } >a } (pp==5)? { (30){ '■' } >b } (pp==6)? { (14){ '■' } (2){' '} (14){ '■' } >b } :a (pp>0)? { (pp){' '} } :b #m ; (n--)? >A *p 01 "ブロックゲーム 難易度とパターン",20,8,6 "0 パターン0 両端0残し" "1 パターン1 両端1残し" "2 パターン2 両端2残し" "3 パターン3 両端3残し" "4 パターン4 両端4残し" "5 パターン5 上下分割" "6 パターン6 縦分割" "L 難易度選択: 初級 上級",fa * ======== End of break.def ========