簡體   English   中英

使用.pgm和python為通向目標的瓷磚着色

[英]Color the tiles that lead to the target using .pgm and python

import Labyrinthe laby = Labyrinthe.creer(9,13)

此代碼將創建以下列表數組:

[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 2, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 1, 0, 1, 0]
[0, 1, 1, 1, 1, 1, 0, 1, 0]
[0, 1, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 0, 0, 0, 0, 0, 1, 0]
[0, 1, 0, 1, 0, 1, 1, 1, 0]
[0, 1, 0, 1, 0, 1, 0, 0, 0]
[0, 1, 0, 1, 0, 1, 1, 1, 0]
[0, 1, 0, 1, 0, 0, 0, 1, 0]
[0, 1, 1, 1, 1, 1, 0, 3, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0]

哪里,

  • '0'-是一堵牆
  • '1'-是路徑
  • '2'-起始磁貼
  • '3'-目標圖塊

我使用以下代碼將像素寫入.pgm文件,並將其顏色設置為介於0到255之間的色調,其中0(100%白色)是最亮的色調,而255是最暗(100%黑色)。

size = 20  #size of a tile in pixels
rows = len(laby)
columns = len(laby[0])
height = size * rows 
width = size * columns

f = open("laby.pgm", "w")
f.write("P2\n" + str(width) + " " + str(height) + "\n255\n") 

for y in range(height):
    for x in range(width):
        indx = x // size
        indy = y // size
        a = laby[indy][indx]
        if a == 0:
            f.write(str(50) + " ")   # colors the pixels
        elif a == 2:
            f.write(str(100) + " ")
        elif a == 3:
            f.write(str(170) + " ")
        else:
            f.write(str(a) + " ")
f.close()

上面的代碼將輸出插入下面的圖像:

用laby.py編寫的代碼的輸出

我需要什么代碼來指示計算機為通向目標的圖塊着色?

要找到A和B之間的路徑,您需要最短路徑算法。 他們大多數使用圖。

首先,您需要將迷宮轉換為圖形。 這是簡單的部分。 節點是迷宮中的1、2和3,並且所有連接在一起的節點之間都有一條邊。 使用坐標來區分節點。 2是(1,1),它連接到1(1,2),然后連接到(1,3),后者又連接到(1,4)和(2,3)...

之后,您可以實施最短路徑算法以查找從A(1,1)到B(11,7)的路徑。 如果您不熟悉這種算法,則很難做到這一點。 最著名的兩個是Bellman-Ford和Dijkstra。 我將搜索它們,因為它們都有最好的情況,並且取決於圖的大小以及路徑是否可以循環。

擁有路徑后,可以用其他顏色為路徑的像素着色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM