主题:棋类游戏的算法的原理是怎样的呀>?
LANDZERO
[专家分:0] 发布于 2005-09-20 12:25:00
如题,棋类游戏的算法的原理是怎样的呀>?懂的都说说看!
回复列表 (共13个回复)
11 楼
w1212q [专家分:660] 发布于 2006-11-24 17:30:00
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 楼
jyf1987 [专家分:930] 发布于 2006-11-25 10:27:00
不同的棋类游戏评估程序是不一样的
象5子棋
只需要把最后一步落的子周围5步以内的范围全考虑一遍就可以了
象棋肯定就不是这么处理了
13 楼
w1212q [专家分:660] 发布于 2006-11-27 13:25:00
是问你算法;
我来回复