`
javatar
  • 浏览: 1680964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州699号
社区版块
存档分类
最新评论

[原创]简易五子棋

F# 
阅读更多
简易五子棋
10 GRAPH:CLS:FOR X= 4 TO 148 STEP 8: FOR Y=4 TO 68 STEP 8: BOX X,Y,X+8,Y+8: NEXT:NEXT
20 A=1:X=76:Y=44 :B=0
30 X=X+160*(X〈 4)-160*(X〉156):Y=Y+80*( Y〈 4 )-80*(Y〉76)
40 BOX X-4,Y-4,X+4,Y+4,1,2:M=ASC(INKEY$):BOX X-4,Y-4,X+4,Y+4,1,2
50 Y=Y-8*(M=20)+8*(M=21):X=X+8*(M=22)-8*(M=23) :IF M=29 GOTO 10
60 IF M=13 AND PEEK(20*Y+(X-4)/8+2436)<>62 GOTO 100
70 IF M=31 AND B=1 THEN CIRCLE W,V,3,1,0 : LINE W-4,V,W+4,V : LINE W,V-4,W,V+4:A=(A=0) :B=0
80 IF M=27 THEN CLS:LOCATE 3 ,9 : PRINT“退出”: END
90 GOTO 30
100 CIRCLE X,Y,3,A,1 :CIRCLE X,Y,2,1,A :W=X:V=Y:B=1
110 Z=65+62*A:K$(1)=“白棋”:K$(2)=“黑棋”:P=0:Q=0:R=0:S=0:FOR L=-32 TO 32 STEP +8
120 E=(PEEK(20*(Y+L)+(X+L-4)/8+2536)=Z):F=(PEEK(20*(Y-L)+(X+L-4)/8+2536)=Z)
130 G=(PEEK(20*Y+(X+L-4)/8+2536)=Z):H=(PEEK(20*(Y+L)+(X-4)/8+2536)=Z)
140 P=E*(P+E):Q=F*(Q+F):R=G*(R+G):S=H*(S+H)
150 IF P=5 OR Q=5 OR R=5 OR S=5 THEN CLS:LOCATE 3 ,6: PRINT K$(A+1);“胜啦!”:END
160 NEXT:A=(A=0):GOTO 30

解释:
10 画棋盘
20 赋予各数初始值
30 使光标到了屏幕边界后能循环到另一边
40 画光标,读键,反显消除上次画的光标
50 方向键,光标坐标移8点。F2键,回到10句的CLS(清屏)。
60 输入键,PEEK(20*Y+(X-4)/8+2496-60)不等于0+0+32+16+8+4+2+0=62表示该棋位没有棋。(此为NC1020型,其它型的把2496改成相应型显存的第一个PEEK值)
70 F4键,把所下棋空白掉,LINE是把空白掉的棋盘补好。
80 跳出键,END结束程序。M=等于的数就是各键所对应的ASCII码,修改它,就可用其它键控制。
90 重复读键。
100 画棋子。
110---150 判断胜负。PEEK(20*Y+(X-4)/8+2496+40)等于0+64+32+16+8+4+2+1=127表示X,Y(或X+L,Y+L)棋位棋有黑棋,PEEK值等于0+64+0+0+0+0+0+1=65表示有白棋,PEEK值等于0+0+0+0+8+0+0+0=8(在顶上一横格时等于0)表示没有棋。知道这个原理,加个禁手,自已应该可以解决了。(此为NC1020型,其它型的把2496改成相应显存的第一个PEEK值)。
160 A=(A=0)使A的值反复0和1,这样就会交替出现黑棋和白棋。
如需转帖,请注名原作者:o_o


若要加存档功能,把:
80 IF M=27 THEN CLS:LOCATE 3 ,9 : PRINT“退出”:END
改成:
80 IF M=27 THEN 170

然后在10句前面加:

9 PRINT “档中存有棋局,是否继续?”:LOCATE 3,8:“Y是/N否”:M=ASC(INKEY$)

在10句后加:

11 DIM D(200):IF M<>121 GOTO 20
12 OPEN “DANG”FOR INPUT AS #1:WRITE #1,A,P$
:FOR X=4 TO 156 STEP 8:FOR Y=4 TO 76 STEP 8
13 INPUT #1,D,P$:IF D=127 THEN CIRCLE X,Y,4,1,1
14 IF D=65 THEN CIRCLE X,Y,3,1,0:CIRCLE X,Y,4
15 NEXT:NEXT:CLOSE #1:X=76,Y=44:GOTO 30

在程序后面加:

170 FOR X= 1 TO 20 : FOR Y=1 TO 10 :W=W+1: D(W)=PEEK(160*Y+X+2455):NEXT:NEXT
180 CLS:PRINT “未下完,是否存档?”:LOCATE 3,8:PRINT“Y是/N否”
190 M=ASC(INKEY$):IF M<>121 GOTO 220
200 CLS:LOCATE 3,5:PRINT“正在存档...”
200 OPEN “DANG”FOR OUTPUT AS #1:WRITE #1,A,“,”:FOR W=1 TO 200:WRITE #1,D(W),“,”
210 NEXT:CLOSE #1:CLS:LOCATE 3,6:PRINT“存档成功!”:INKEY$
220 CLS:LOCATE 3,4:PRINT“欢迎下次再来!” END

加完后,第一次运行,应在出现“档中存有棋局,是否继续?”时不要按Y键按其它键,而在出现“未下完,是否存档?”时按Y键。这样就会生成一个“DANG”的DAT数据文件。
用这种顺序存贮是比较慢的,如果用批量法要快得多。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics