Upset!

オセロ風のゲームです。

遅いし1行なのでとてもやりづらいのが難点ですが、PBでもフルサイズの対戦オセロが何とかやれるんだ!ということが伝われば。


R1  2023/8/9 PB-SIMでのエラーを回避、PokecomGO(no wait)に対応。

対応機種

PB-SIM(fast)、PokecomGO(fast,no wait)を推奨します。PB-100+拡張メモリにも対応しますが、時間が掛かります。

プログラムサイズは1,092ステップですが、変数領域を確保した後は残メモリ12ステップになります。

遊び方

 事前に RUN モードにて DEFM 58 を実行し、変数領域を確保しておきます。

 盤面は 8×8。自分は黒コマ"◆"で先攻、コンピュータは白コマ"〇"で後攻です。(最初にパスすれば後攻になる) 

"←"の先(左隣マス)がカーソル位置。右に行番号(上から 0,1,2,…7)を表示します。 

カーソル位置は"4"← "6"→ "8"↑ "2"↓で移動し、"5"で場所を決めてコマを打ちます。パスは"0"です。

 コンピュータの番ではカーソルが消え、自分の番ではカーソルを表示します。

 全てのマスに打ち終えたらゲーム終了です。

コンピュータがパスし更に自分もパスしたら強制終了となり、残りのマスは折半して勝敗判定します。 

upset 説明書 R1.pdf

プログラム説明書 program manual

PB-100実機形式

PB-SIM形式

[P0]

10 VAC

15 U(27)=2:U(28)=1:U(35)=1:U(36)=2

25 B=3:K=2:L=2:$="_\DI\CI"

30 IF KEY<>"" THEN 30

35 GOSUB #2: PRINT CSR A+1;"\LA";

61 IF KEY="4"; A=A-SGN A: GOTO 30

62 IF KEY="6"; A=A+SGN(7-A: GOTO 30

63 IF KEY="8"; B=B-SGN B: GOTO 30

64 IF KEY="2"; B=B+SGN(7-B: GOTO 30

65 IF KEY="5";PRINT CSR A;"+";: GOTO 70

66 IF KEY="0" THEN 75

67 GOTO 61

70 IF U(A+B*8)<>0 THEN 30

71 D=A:E=B:F=1:C=1: GOSUB #1

72 IF O=0 THEN 30

74 K=K+O+1:L=L-O: GOTO 76

75 IF M=-99;L=L+(64-K-L)/2:K=64-L

76 GOSUB #2:M=-99

82 FOR D=0 TO 7: FOR E=0 TO 7

84 IF U(D+E*8)<>0 THEN 104

86 F=0:C=2: GOSUB #1: IF O=0 THEN 104

90 N=0:IF (D-7)*D=0;N=4

91 IF (E-7)*E=0;N=4

92 IF U=0; IF D<2; IF E<2;N=-4: IF D=0; IF E=0;N=8

94 IF U(7)=0; IF D>5; IF E<2;N=-4: IF D=7; IF E=0;N=8

96 IF U(56)=0; IF D<2; IF E>5;N=-4: IF D=0; IF E=7;N=8

98 IF U(63)=0; IF D>5; IF E>5;N=-4: IF D=7; IF E=7;N=8

100 N=N+O+RAN#-.5: IF N>M;R=D:S=E:M=N

104 NEXT E: NEXT D

106 IF M=-99 THEN 30

108 D=R:E=S:F=1:C=2: GOSUB #1:K=K-O:L=L+O+1

110 A=D:B=E: GOTO 30


[P1]

10 O=0:FOR I=-1 TO 1: FOR J=-1 TO 1

20 IF I=0; IF J=0 THEN 95

30 G=I:H=J:IF D+G>-1; IF D+G<8; IF E+H>-1; IF E+H<8 THEN 40

35 GOTO 95

40 IF U(D+G+(E+H)*8)+C<>3 THEN 95

50 G=G+I:H=H+J:IF D+G>-1; IF D+G<8; IF E+H>-1; IF E+H<8 THEN 60

55 GOTO 95

60 T=U(D+G+(E+H)*8): IF T+C=3 THEN 50

65 IF T=0 THEN 95

67 IF F=1;U(D+E*8)=C

70 P=D:Q=E

75 P=P+I:Q=Q+J: IF P=D+G; IF Q=E+H THEN 95

80 IF F=0 THEN 90

85 U(P+Q*8)=C

90 O=O+1: GOTO 75

95 NEXT J: NEXT I: RETURN 


[P2]

10 PRINT : FOR T=0 TO 7

15 PRINT CSR T;MID (U(T+B*8)+1,1);

20 NEXT T: PRINT CSR 9;B;

25 IF L+K<64; RETURN 

30 PRINT : IF K>L; PRINT "Win!": END 

35 IF K=L; PRINT "DRAW": END 

40 PRINT "LOSE.": END