编写五子棋游戏中,向棋盘走子这一步被卡住了,高手帮忙

cn_archer 2006-02-12 01:36:46
Private Sub picBoard_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
'落子操作
sx = Fix(X / 21) + 1: sy = Fix(Y / 20) + 1 '求落子位置
If Board(sx, sy) <> 0 Then Exit Sub
Call sndPlaySound("PutStone.wav", 0) '播放声音
Board(sx, sy) = Server '储存棋子数据
DrawBoard '重画棋盘
result = GameResult(Server) '判断游戏是否结束
If result = Server Then '取得胜利
MsgBox "恭喜!您取得了本局胜利!", vbOKOnly, "对局结束"
Win(Server) = Win(Server + 1)
If Server = 1 Then Lost(2) = Lost(2) + 1 Else Lost(1) = Lost(1) + 1
frmMain.lblBlackScore.Caption = Str(Win(1)) + "胜" + Str(Lost(1)) + "败"
frmMain.lblWhiteSocre.Caption = Str(Win(2)) + "胜" + Str(Lost(2)) + "败"
Me.cmdAgain.Enabled = True
End If
Send "1" + Chr(sx) + Chr(sy) '通过网络向对方发送落子信息
picBoard.Enabled = False '在对方走棋时间内,已方不能再落子
End Sub

上面是向棋盘落子的函数,但是一直提示 Subscript Out of range... 不知道是什么原因

我把我的源代码传到 http://www.9101.cn/f0511s1/go.rar
请高手们帮我看看,万分感谢!
...全文
382 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cn_archer 2006-03-23
  • 打赏
  • 举报
回复
原因还是没找出来,不过时间这么久了,还是先结一下帖吧。
xyjdn 2006-02-16
  • 打赏
  • 举报
回复
网上有现成的代码
jadeluo 2006-02-12
  • 打赏
  • 举报
回复
X和Y的计量单位是什么?Pixel还是Twip?

如果是Twip的话,下面的语句中X只除以21,而Y只除以了20是肯定会有问题的。
sx = Fix(X / 21) + 1: sy = Fix(Y / 20) + 1
province_ 2006-02-12
  • 打赏
  • 举报
回复
sx=X\21+1
sy=Y\21+1
cn_archer 2006-02-12
  • 打赏
  • 举报
回复
我知道是越界,但是一直没找出问题在哪
cn_archer 2006-02-12
  • 打赏
  • 举报
回复
我的QQ是56049418
MSN cn_archer@hotmail.com

昨天弄到凌晨五点还没搞定。。现在头都蒙了。。
加我吧,有些问题我即时向你反馈一下,这里一时也说不清楚

万分感谢了
西雀 2006-02-12
  • 打赏
  • 举报
回复
下标越界
检查一下sx,sy是否超出Board这个数组的上下界
jadeluo 2006-02-12
  • 打赏
  • 举报
回复
看来你没看明白我说的是什么意思。

你改成:

sx = Fix(X / (21 * Screen.TwipsPerPixelX)) + 1: sy = Fix(Y / (20 * Screen.TwipsPerPixelY)) + 1
cn_archer 2006-02-12
  • 打赏
  • 举报
回复
似乎是 Board(sx,sy)这里出错,但我实在找不出原因在哪了。
cn_archer 2006-02-12
  • 打赏
  • 举报
回复
问题是,我把X和Y都除以21或20也不行。。
QFiver 功能简介: 1. 针对QQ游戏平台五子棋:能够代替人进行思考和落子,替你战胜对手。同时支持无禁手和禁手规则。 2. 具有四个不同的“大脑”:就是四个不同的引擎,各具特色,可以应对不同的对手! 3. 设置难度:机器人下棋当然也需要进行“思考”,和人一样,思考得越久,下的水平越高。所以你要设置合适的难度,如果碰到水平并不是特别优秀的玩家设置较低的难度就可以,这样落子的速度较快,反之如果碰到难得一见的高手,就应设置较高的难度,虽然想的时间会变长一些,但战胜的把握更大。 4. 获胜预先提示:当机器人觉得你即将获胜的时候,它会进行提示! 5. 走子延时:机器人有时会下得很快,最快可以在对手落子后的0.5秒内出击。但如果总是这么快容易让对手发现不是真人在下棋,所以适当延长走棋时间。 6. 人机模式:你可以把机器人当作你的一个小军师,让他帮你下一步,有时候合作也很有意思哦,注意:点击一次“人机模式”或按一次F6,软件只帮你走一步棋,下棋过程要用这种模式,先必须先按F12停止“自动模式”。 7. 收拾残局(仅“推荐”引擎有此功能):即在游戏已经开始的情况下继续替你战斗,这是一个非常实用的功能。另外有一个特殊用法:如果你同意悔棋,这个时候棋盘上的棋子就改变了,可以先止机器人操作然后再点“自动模式”。 8.关于悔棋功能:如果你要同意别人悔棋,请先按F12止机器人操作,然后再点“同意”悔棋,之后可按F5实现自动模式或按F6实现人机模式。 9.随开:就是执黑子时随机任意开局,不选它时,执黑开局的第一子都是走心。 10.挂机:在无人值守的情况下自动对战。试想,如果你将房间设置改为只同“分差不超过100的玩家”进行游戏,找一个热闹的房间和抢手的桌子,也许几个小时后你就升了好几段(当然前提是这个过程你没有被蓝钻踢掉)!
用c#编写的五子棋人机对战 核心算法 核心算法就是计算计算机应该在哪里落子。    思路的伪代码如下。    PC_Stone    For i = 1 to 15     For j = 1 to 15     If ( board[i][j] != -1)     Qz[i][j] = -     Esle     FindQz(Qz[i][j])    getTheMaxQz()    而在这个过程最主要的算法是计算每个点的权重,由此判断电脑应该将棋子落在哪个地方。    计算确定点的权重的函数是FindQz();,函数里面有对于多种不同情况下,函数所赋给那个点的权重值,这些值是累加的。函数主要通过对四个函数X1(),X2(),X3(),X4()的调用来确定每个点所处地位。    FindQz()函数可以分为两部分。    第一部分是假设人在此点落下一子后,此点给人所带来的好处是多少。通过对函数X1()计算如果在点board[i][j]落下,所在行有多少连续的相同的点数。与X1(),类似的是X2()是计算board[i][j]所在列的点数。X3()是计算左高右低的斜排,X4()是左低右高的情况。经过计算后,将这四种情况所带来的改变加到一起,就是将棋子落在这里对假设方带来的好处。    第二部分是假设电脑在此落一点之后,此点给电脑带来的好处是多少。调用过程与第一部分基本一样,没什么不同。    经过这样的调用,将两部分计算出的结果加到一起,算出来的就是电脑下在这一点会带来的所有影响。选取影响最大的一点,落子,这样就能在一定程度上达到某种智能。    对于X1()函数,他的作用实现是这样的。运用两个计数器count与flag,count用于计算有多少相连的相同的子,并且是一board[i][j]为心,向两边发散(说他是心并不意味着他是相连的点的心位置)。Flag是计算相连的子的两端是否有阻挡。阻挡分为两部分,一部分是到了表格的尽头,另一种是被另一种颜色的棋子挡住。这样综合count与flag两个参数,给出board[i][j]点对于行的贡献值。    对于X2(),X3(),X4()他们的原理是与X1()一样的,只不过是坐标不同罢了。这样,计算完之后,再进行比较,就能得到最好的点了。        对于特殊落点的判断问题:   设以围棋棋盘左下角为坐标原点建立直角坐标系xOy,   若(9,10)(9,11)(10,10)(11,9)上有黑子,(8,12)(10,9)(11,8)上有白子,现在到白棋走子,   若走(10,12)(11,11)就属于斜向走子,但是通常直向的(紧贴着棋子走的)走子要比斜向的走子对防守的贡献大,   若走(8,11)(8,10)(8,9)(9,9)其一个的均属于单侧走子,而另一侧则空虚,所以也不好,   若走(11,10)也不好,因为在(11,8)的子已经对防守有了一定的贡献了,同理走(10,11)的也不好,因为(10,9)的子也对防守有了一定的贡献.所以说此时最佳的走子方法就是走(9,12)   若(8,10)有白子,(10,10)(11,10)(12,10)有黑子,到白子走,由于(8,10)对防守贡献了一部分,所以应该走(13,10)而不走(9,10)。   若为黑走,就应该走(13,10)而不走(9,10),因为白子的(8,10)会削弱它对攻的贡献

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧