专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 人工智能

哪位高手能帮小弟我的程序写PVS(主要变例搜索)

发布时间:2011-07-03 09:18:19 文章来源:www.iduyao.cn 采编人员:星星草
谁能帮我的程序写PVS(主要变例搜索)
各位帮帮忙了!~

 REM 将116、士115、士114、象113、象112、车111、车110、马109、马108、包107、包106、卒105、卒104、卒103、卒102、卒101(黑)
  REM 帅216、仕215、仕214、相213、相212、车211、车210、马209、马208、炮207、炮206、兵205、兵204、兵203、兵202、兵201(红)

  Public Function SearchFull(ByVal Cer As Byte, ByVal Steps As Integer, ByVal UpMax As Long, ByVal Alpha As Integer, ByVal Beta As Integer) As Integer

  ''Cer=1计算黑方的棋子 Cer=2计算红方的棋子 棋盘ChessBoard(90)
  ''返回分数
  Dim i As Integer, j As Integer
  Dim T As Byte, T1 As Integer, T3 As Integer, T4 As Integer ''临时变量
  Dim ChessValue As Long ''记录棋子当前落子点的分数
  Dim MaxValue As Long


  Dim Sc(scMAXDOWNPOINT) As CHESSER ''用来存储我方搜索到的每种走法

  Dim k As Integer

  n = n + 1

  MaxValue = -10000

  Steps = Steps - 1

  If Steps < 1 Then

  Return qSearch(Cer, 10, Alpha, Beta, False) ''返回估值

  Exit Function

  End If


  k = MakeMove(Sc, Cer)  

'排序程序,略过


  ''搜索找到的所有落子点(Sc数组)
  For i = 0 To k - 1

  ''落子点不能有自己的棋
  If Int(ChessBoard(Sc(i).ObjXy) / 100) <> Cer Then
  ''GetLocateValue判断落子点的分数

  T1 = CchessValue(Cer, ChessBoard(Sc(i).ObjXy), Sc(i).ObjXy)

  T3 = ChessBoard(Sc(i).InitXy) ''保存(起点的棋子)
  T4 = ChessBoard(Sc(i).ObjXy) ''(终点的棋子)

  ''如果吃到王就不再运算
  If T4 Mod 100 = 16 Then Return -9999


  ChessBoard(Sc(i).InitXy) = 0 ''移动棋子
  ChessBoard(Sc(i).ObjXy) = T3 ''试下棋


  ''如果有吃子,Eval减分
  If T4 <> 0 Then

  Eval = Eval + CchessValue(0, T4, Sc(i).ObjXy)

  End If


  Eval = -Eval : Ply = Ply + 1

  ChessValue = SearchFull(NextCer(Cer), Steps - 1, MaxValue, -Beta, -Alpha)  

  Eval = -Eval : Ply = Ply - 1


  ChessBoard(Sc(i).InitXy) = T3 ''恢复棋盘
  ChessBoard(Sc(i).ObjXy) = T4

  If T4 <> 0 Then

  Eval = Eval - CchessValue(0, T4, Sc(i).ObjXy) ''恢复Eval

  End If

  If MaxValue < ChessValue Then MaxValue = ChessValue

  End If


  '新增
  If MaxValue > Alpha Then Alpha = MaxValue


  If (MaxValue > Beta) Then Return -MaxValue

  Next i

  Return -MaxValue

  End Function

------解决方案--------------------
Public Function SearchFull(ByVal Cer As Byte, ByVal Steps As Integer, ByVal UpMax As Long, ByVal Alpha As Integer, ByVal Beta As Integer) As Integer 

''Cer=1计算黑方的棋子 Cer=2计算红方的棋子 棋盘ChessBoard(90) 
''返回分数 
Dim i As Integer, j As Integer 
Dim T As Byte, T1 As Integer, T3 As Integer, T4 As Integer ''临时变量 
Dim ChessValue As Long ''记录棋子当前落子点的分数 
Dim MaxValue As Long 


Dim Sc(scMAXDOWNPOINT) As CHESSER ''用来存储我方搜索到的每种走法 

Dim k As Integer 
dim fFoundPv as Boolean = FALSE

n = n + 1 

MaxValue = -10000 
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: