電子書籍の厳選無料作品が豊富!

サブルーチン*CHECK_TABLEは、味方の色(COL:0が黒、1が白)の数を
上から、右上、右、右下、下、左下、左、左上の8つの方向を順番に
数えるプログラムなのですが、上手く動作しません。

出来かけのソースを載せますので、誰か、助けてください。
100 '最初のプログラム(2009/03/18-05:44:23)
110 DIM MASU(640/32,480/32):CLC_X=23*32:CLC_Y=20*32:JUNBN=1
120 DIM CHKTBL_X(7):DIM CHKTBL_Y(7):DIM C(7)
130 CHKTBL_X(0)=0:CHKTBL_Y(0)=-1
140 CHKTBL_X(1)=1:CHKTBL_Y(1)=-1
150 CHKTBL_X(2)=1:CHKTBL_Y(2)=0
160 CHKTBL_X(3)=1:CHKTBL_Y(3)=1
170 CHKTBL_X(4)=0:CHKTBL_Y(4)=1
180 CHKTBL_X(5)=-1:CHKTBL_Y(5)=1
190 CHKTBL_X(6)=-1:CHKTBL_Y(6)=0
200 CHKTBL_X(7)=-1:CHKTBL_Y(7)=-1
210 PALETTE 8,(150,0,0)
220 *MAIN_LOOP'メインループ--------------------------------------------------
230 CLS 3:SCREEN 3,5,0
240 GOSUB *DRAW_TABLE
250 GOSUB *GET_CLICK
260 SCREEN 3,1,0
270 GOTO *MAIN_LOOP '--------------------------------------------------------
280 *DRAW_TABLE
290 LINE(0,0)-(640,480),8,BF '背景色を塗る
300 FOR I=0 TO 640/32
310 FOR J=0 TO 480/32
320 LINE(I*32,J*32)-(I*32+32,J*32+32),7,B '升目を描く
330 CX=I:CY=J
340 IF MASU(CX,CY)=1 THEN CIRCLE(I*32+16,J*32+16),16,0:PAINT(I*32+16,J*32+16),0
350 IF MASU(CX,CY)=2 THEN CIRCLE(I*32+16,J*32+16),16,7:PAINT(I*32+16,J*32+16),7
360 NEXT J'マスの値に応じて円の色を変える
370 NEXT I
380 RETURN
390 *GET_CLICK '-------------------------------------------------------------
400 'GET MOUSE 0,SW,MOUSE_X,MOUSE_Y
410 GET MOUSE 2,SW,CLC_X,CLC_Y 'クリックした座標を取得
420 IF CLC_X<>0 AND CLC_Y<>0 THEN CX=CLC_X\32:CY=CLC_Y\32 '32で割る
430 IF MASU(CX,CY)=0 AND FLAG=1 THEN MASU(CX,CY)=JUNBN+1 '順番通りにマスを反映させる
440 NUM1=CX:NUM2=CY:COL=JUNBN+1
450 GOSUB *CHECK_TABLE
460 FOR I=0 TO 7
480 IF C(I)>4 THEN WINCOLOR=JUNBN+1:GOSUB *WIN
485 PRINT "C(";I;")=";C(I)
490 NEXT I
500 MOUSE ON,2:ON MOUSE GOSUB *CHANGE_JUNBN
510 RETURN
520 *CHANGE_JUNBN
530 JUNBN=JUNBN XOR 1:FLAG=1 '順番を反転させる
540 RETURN
550 *CHECK_TABLE '-----------------------------------------------------------
560 FCOL=COL '味方の色
570 FOR I=0 TO 7
580 CHECK_X=NUM1:CHECK_Y=NUM2:COUNT=0 '指定の座標からチェックする
590 FOR J=0 TO 100
600 IF CHECK_X<0 OR CHECK_X>640/32 THEN GOTO *BK
610 IF CHECK_Y<0 OR CHECK_Y>480/32 THEN GOTO *BK
620 IF COUNT>0 AND MASU(CHECK_X,CHECK_Y)<>FCOL THEN GOTO *BK
630 IF COUNT>0 AND MASU(CHECK_X,CHECK_Y)=FCOL THEN C(I)=C(I)+1
640 CHECK_X=CHECK_X+CHKTBL_X(I):CHECK_Y=CHECK_Y+CHKTBL_Y(I)
650 COUNT=COUNT+1
660 NEXT J
670 *BK
680 NEXT I
690 RETURN
700 *WIN '-------------------------------------------------------------------
710 IF WINCOLOR=1 THEN PRINT"黒が勝ちました。!" ELSE PRINT"白が勝ちました。!"
720 RETURN

A 回答 (1件)

ざっとプログラムを眺めただけですが、気になる点がありました。



・*CHECK_TABLE でチェックする前に、C(I)の初期設定(1を代入?)をしていないのでは?
・たとえば白を置いた(クリックした)とき、上に4個白が並んでいる場合はOKですが、上に2個、下に2個白が並んでいる場合は勝ちと判断できないのでは?

もし違っていたらすみません。
    • good
    • 0
この回答へのお礼

nag0720さん、返事が遅れてすみません。
アドバイスありがとうございます。
上記のアドバイスを基に作り直してみます。

お礼日時:2009/04/03 20:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!