回 帖 发 新 帖 刷新版面

主题:棋类游戏的算法的原理是怎样的呀>?

如题,棋类游戏的算法的原理是怎样的呀>?懂的都说说看!

回复列表 (共13个回复)

11 楼


   CASE 3 '下
      N.x = N.x: N.y = N.y + 10
      CASE 4 '左
      N.x = N.x - 10: N.y = N.y
      END SELECT

      IF ((LASTN1.x = N.x) AND (LASTN1.y = N.y)) OR ((LASTN.x = N.x) AND 
      (LASTN.y = N.y)) THEN
      REP = REP + 1 '
      IF REP > 5 THEN EXIT DO '如果重复到达同一节点则停止
      END IF
      LASTN1.x = LASTN.x: LASTN1.y = LASTN.y '记下上次及上上次访问的节点
      LASTN.x = N.x: LASTN.y = N.y
      PathFound(PathNumber).x = N.x
      PathFound(PathNumber).y = N.y
      PathNumber = PathNumber + 1
      LOOP
      ELSE
      PRINT "T is a bar"
      END IF
      END SUB

      FUNCTION SelDirect 
      DIM s(4) AS INTEGER

      IF Maze(INT(N.x / 10), INT((N.y - 10) / 10)) = 0 THEN
      s(1) = ABS(T.x / 10 - N.x / 10) + ABS(T.y / 10 - N.y / 10 + 1)
      ELSE
      s(1) = -1
      END IF


      IF Maze(INT((N.x + 10) / 10), INT(N.y / 10)) = 0 THEN
      s(2) = ABS(T.x / 10 - N.x / 10 - 1) + ABS(T.y / 10 - N.y / 10)
      ELSE
      s(2) = -1
      END IF

      IF Maze(INT(N.x / 10), INT((N.y + 10) / 10)) = 0 THEN
      s(3) = ABS(T.x / 10 - N.x / 10) + ABS(T.y / 10 - N.y / 10 - 1)
      ELSE
      s(3) = -1
      END IF


      IF Maze(INT((N.x - 10) / 10), INT(N.y / 10)) = 0 THEN
      s(4) = ABS(T.x / 10 - N.x / 10 + 1) + ABS(T.y / 10 - N.y / 10)
      ELSE
      s(4) = -1
      END IF

      FOR i = 1 TO 4
      IF s(i) <> -1 THEN MIN = s(i): FX = i: EXIT FOR
      NEXT
      IF (s(1) = -1) AND (s(2) = -1) AND (s(3) = -1) AND (s(4) = -1) THEN
      FX = 0
      ELSE
      FOR i = 1 TO 4
      IF s(i) <> -1 THEN
      IF s(i) < MIN THEN MIN = s(i): FX = i
      END IF
      NEXT
      END IF
      SelDirect = FX
      END FUNCTION

      DEFINT A-Z
      SUB SelNode (SeledNode AS Node, Col AS INTEGER)
      'CLS
      DIM TEMP(100) AS INTEGER
      GET (0, 0)-(9, 9), TEMP
      DO
      SELECT CASE INKEY$
      CASE "8"
      NewX = LastX: NewY = LastY - 10
      IF NewY < 0 THEN NewY = 0
      PUT (LastX, LastY), TEMP, PSET
      GET (NewX, NewY)-(NewX + 9, NewY + 9), TEMP
      LINE (NewX, NewY)-(NewX + 9, NewY + 9), Col, B
      LastX = NewX: LastY = NewY
      CASE "5"
      NewX = LastX: NewY = LastY + 10
      IF NewY > 190 THEN NewY = 190
      PUT (LastX, LastY), TEMP, PSET
      GET (NewX, NewY)-(NewX + 9, NewY + 9), TEMP
      LINE (NewX, NewY)-(NewX + 9, NewY + 9), Col, B
      LastX = NewX: LastY = NewY
      CASE "4"
      NewX = LastX - 10: NewY = LastY
      IF NewX < 0 THEN NewX = 0
      PUT (LastX, LastY), TEMP, PSET
      GET (NewX, NewY)-(NewX + 9, NewY + 9), TEMP
      LINE (NewX, NewY)-(NewX + 9, NewY + 9), Col, B
      LastX = NewX: LastY = NewY
      CASE "6"
      NewX = LastX + 10: NewY = LastY
      IF NewX > 310 THEN NewX = 310
      PUT (LastX, LastY), TEMP, PSET
      GET (NewX, NewY)-(NewX + 9, NewY + 9), TEMP
      LINE (NewX, NewY)-(NewX + 9, NewY + 9), Col, B
      LastX = NewX: LastY = NewY
      CASE CHR$(13)
      PUT (LastX, LastY), TEMP, PSET
      ExitFlag = 1
      END SELECT


      LOOP UNTIL ExitFlag = 1
      SeledNode.x = NewX: SeledNode.y = NewY
      END SUB

12 楼

不同的棋类游戏评估程序是不一样的
象5子棋
只需要把最后一步落的子周围5步以内的范围全考虑一遍就可以了
象棋肯定就不是这么处理了

13 楼

是问你算法;

我来回复

您尚未登录,请登录后再回复。点此登录或注册