Python 連連看連接算法
2020-02-23 04:40:47
供稿:網友
功能:為連連看游戲提供連接算法
說明:模塊中包含一個Point類,該類是游戲的基本單元“點”,該類包含屬性:x,y,value。
其中x,y代表了該點的坐標,value代表該點的特征:0代表沒有被填充,1-8代表被填充為游戲圖案,9代表被填充為墻壁
模塊中還包含一個名為points的Point列表,其中保存著整個游戲界面中的每個點
使用模塊的時候應首先調用createPoints方法,初始化游戲界面中每個點,然后可通過points訪問到每個點,繼而初始化界面
模塊中核心的方法是link,通過提供源點和終點,可嘗試連接兩點,如果可以連接則返回保存路徑的path列表,否則返回False
代碼如下:
#-*-coding:utf-8-*-
"""連連看連接算法
為連連看游戲提供連接算法
模塊中包含一個Point類,該類是游戲的基本單元“點”,該類包含屬性:x,y,value。
其中x,y代表了該點的坐標,value代表該點的特征:0代表沒有被填充,1-8代表被填充為游戲圖案,9代表被填充為墻壁
模塊中還包含一個名為points的Point列表,其中保存著整個游戲界面中的每個點
使用模塊的時候應首先調用createPoints方法,初始化游戲界面中每個點,然后可通過points訪問到每個點,繼而初始化界面
模塊中核心的方法是link,通過提供源點和終點,可嘗試連接兩點,如果可以連接則返回保存路徑的path列表,否則返回False
"""
import random
__author__ ="http://blog.csdn.net/anhulife"
__license__ ="python"
class Point:
"""Point類
Point類是游戲中基本單元:“點”
"""
def __init__(self,x,y,value):
self.x = x
self.y = y
self.value = value
self.directs = None
self.changed = 0
def __createDirect(self,pre,target):
"""構造點的方向集
每個點在連接的過程中都持有一個方向集,這個方向集中保存著該點的前進方向選擇的優先級
優先級:指向目標點的方向級別最高,在同等級別并且遵循x方向優先于y方向
"""
self.directs = list()
stx = target.x - self.x
sty = target.y - self.y
if stx >= 0 :
self.directs.append("right")
self.directs.append("left")
else:
self.directs.append("left")
self.directs.append("right")
if sty >= 0 :
self.directs.insert(1,"up")
self.directs.append("down")
else:
self.directs.insert(1,"down")
self.directs.append("up")
if pre == None :
return
spx = pre.x - self.x
spy = pre.y - self.y
if spx == 0 :
if spy == 1:
self.directs.remove("up")
else:
self.directs.remove("down")
else :
if spx == 1:
self.directs.remove("right")
else:
self.directs.remove("left")
def forward(self,pre,target):
"""點的前進動作
點的前進即是依次從方向集中取出優先級高的方向,并判斷該方向上的下一個點是否被填充