2017-07-30 52 views
2

所以即時製作桌面遊戲GO的JavaScript和即時通訊計數領域的麻煩。如果你不知道,GO就像是一個複雜的棋子,你可以水平和垂直放置石塊而不是對角線。當遊戲結束並且你製作了寶石邊框(棋盤邊緣算作任何人)時,就會出現一個區域。計算棋盤遊戲領土背後的邏輯(GO)

territory

所以上面的圖片是我到目前爲止所。

白色=玩家1,黑色=玩家2,綠色=領土

所以綠色只配備在比賽結束。比賽現在已經結束,黑方控制了2名囚犯的董事會左上角。裏面的小組已被識別並着綠色。問題是,我怎麼知道綠色領土屬於哪個球員?

任何人都可以看到黑色擁有領土的所有邊/邊界(記住董事會的邊緣是任何人)。當內部有囚犯時,它開始變得艱難。我可以檢查每個綠色細胞旁邊的每個細胞。如果有黑色和白色,它不是一塊領土,但如果有囚犯的話,這不會奏效。

單向即時思考可能是一種選擇,即嘗試識別繞過它的邊界。如果我能做到這一點,我可以輕鬆地檢查它是誰的領土。使用正方形,圓形或任何變形的形狀計算邊界peices會很容易?我不確定。

任何幫助appriciated :)

+0

你將不得不爲它創建自己的算法 – user7951676

+0

好吧,我收集了這個,但那個算法的邏輯是什麼?我只是意識到,我可以滾動組中的每個人。如果它的四面都是綠色的,那麼它的中間就可以移除以識別邊界。不知道這是否會與檢察官 –

+0

我不知道Go的工作原理。你是否需要找到劃分板塊的路徑(因爲你說的是​​floodfill) - 檢查[這個問題](https://stackoverflow.com/questions/2631576/using-recursion-to-find-paths-in-a -2d-array) – James

回答

-1

我要去張貼自己的想法,並嘗試這種方法。因此,我將首先獲取領域中最左邊的列,在這種情況下,它的索引爲0.我將使用for循環滾動瀏覽列,找出列中最上面和最下面的石頭。所以首先是第0列。最上面的石頭是0,最下面的是5(忽略紙板標記)。因爲這一定是這個形狀的頂部和底部邊界,我會檢查頂部和底部之上的石頭並記下它們。

由於石材的頂部0,0是木板的邊緣,因此其標記爲「兩者」。現在在下面,它將被標記爲「黑色」。我們現在有這個領土的所有者。我會重複所有的列,然後所有的行,如果它得到任何衝突的業主,我會打破循環,因爲它不能成爲一個領土。

我只是在我的腦海想到這一點,我要去嘗試,現在

+0

*我只是想到了這一點,我現在就去試試看*然後這不是一個答案。這將是一個答案後,你實現它,並找到它的作品(提示:它不會)。 – 2017-07-30 16:26:52

+0

以及爲什麼不行?邏輯看起來完美無瑕。此外,答案部​​分不是針對始終有效的二元答案。人們發佈建議以及他們認爲會起作用的內容。如果確實如此,op會給它打個勾,並表示它工作正常 –

0

我設法到底用我自己的算法非常有效地做到這一點。

它將首先識別有問題的區域並獲取lowX,lowY,highX,highY。所以在這種情況下,它將分別爲0,0,5,5。然後我做一個for循環是這樣的:

for (var j = lowX; j < highX + 1; j++) 
    {  
     var lowColumnY = null; 
     var highColumnY = null; 

     for (var k = 0; k < territories[i].length; k++) 
     {    
      if (territories[i][k].x == j) 
      { 
       if ((lowColumnY == null) || (territories[i][k].y < lowColumnY)) 
       { 
        lowColumnY = territories[i][k].y; 
        console.log(lowColumnY); 
       } 

       if ((territories[i][k].y > highColumnY) || (highColumnY == null)) 
       { 
        highColumnY = territories[i][k].y; 
       } 
      }        
     } 

這樣穿境而過的所有列滾動和作品走出低點和高點,這是聲明的第2個變量。然後,我重複Y的for循環,並最終以每個邊界的座標離開。我已經通過繪製紅色圓圈來證明這一點,因此它易於視覺化,並且您可以看到它不會干擾任何囚犯。

territory

所以最後我只檢查其中紅色圓圈是石頭的每種顏色。如果有任何相互衝突的顏色,它不能成爲一個領土。在這種情況下,唯一的顏色是黑色,我們知道它是一個黑色的領土。

+0

也@torazaburo你現在有蛋在你臉上說它不會工作:) –