我正在尝试创建一个可以玩2048游戏的AI。我的问题是我无法以我想要的格式获得电路板。
我的代码(获得董事会):
def get_board():
board = {"1": '-',"2": '-', "3": '-',"4": '-',
"5": '-',"6": '-', "7": '-',"8": '-',
"9": '-',"10": '-', "11": '-',"12": '-',
"13": '-',"14": '-', "15": '-',"16": '-'}
tiles = driver.find_elements_by_class_name("tile")
for tl in tiles:
til = tl.get_attribute("class")
tile = til.split()
if "tile-position-1-1" in tile:
value = driver.find_elements_by_xpath("/html/body/div/div[3]/div[3]/div[1]/div")
board["1"] = value
elif "tile-position-2-1" in tile:
value = driver.find_elements_by_xpath("/html/body/div/div[3]/div[3]/div[2]/div")
board["2"] = value
elif "tile-position-3-1" in tile:
value = driver.find_elements_by_xpath("/html/body/div/div[3]/div[3]/div[2]/div")
board["3"] = value
return board
我希望它将瓷砖放在字典的正确位置,例如:
如果磁贴1-1为4则应该board['1'] = "4"
我有什么想法可以做到这一点?
答案 0 :(得分:0)
我不知道Python,但这是Java,所以希望你能翻译它。
我将电路板放入int
格式的二维数组board[1][2] = 16
,其中该图块上的类为tile tile-16 tile-position-1-2 tile-new
。我知道这不是你要求的,但你没有详细说明你如何存储各种职位......
List<WebElement> tiles = driver.findElements(By.cssSelector("div.tile"));
int[][] board = new int[5][5]; // need 5 instead of 4 because we are going to use indices 1-4 and not 0-3
for (WebElement tile : tiles)
{
String className = tile.getAttribute("className");
String regex = "tile tile-(\\d*) tile-position-(\\d)-(\\d) tile-new";
Matcher matcher = Pattern.compile(regex).matcher(className);
matcher.matches();
int x = Integer.parseInt(matcher.group(2));
int y = Integer.parseInt(matcher.group(3));
int value = Integer.parseInt(matcher.group(1));
board[x][y] = value;
}
代码使用类tile获取DIV,因为此处定义了具有任何值的所有tile。 (董事会的HTML有点奇怪的IMO,但我不是网页设计师...所以也许只是我)。然后循环遍历所有tile并获取className,其中存储了所有位置和值数据。它使用正则表达式来设置className,然后将值分配给数组board
中的正确位置。
如果您转储board
的值,您将获得类似
0000
0020
0000
0020
希望这有帮助。