2014-10-02 81 views
-1

我被告知要製作一個10x10字段的shipbattle遊戲項目。現在我需要知道如何在現場隨機生成船的位置(這是一個10x10陣列)。這些字段不能彼此重疊,它們不能彼此相鄰。它們也可以是水平或垂直的。填寫船戰鬥遊戲板C

我需要把下列船舶:船 五1場 1艘四個字段 2艘三個字段 3艘兩名 4船之一

我真的不看我怎麼能做到這一點。這是我到目前爲止:

void generateField(int field[][dim]) 
{ 
    int i,j; 
    for (i=0; i<dim; i++) 
    { 
     for (j=0; j<dim; j++) 
     { 
      field[i][j] = 0; 
     } 
    } 
} 

這使得該字段全部爲零。我想生成像我之前說的船

+0

是否有可能把這樣的前幾船,其他人沒有留下空間?那麼這項任務會更具挑戰性。否則,它歸結爲一個接一個放置它們。你將需要一個例行的碰撞測試。 (「給定長度爲l的船,起始於x,y,方向爲N,W,S或E,是重疊還是離開邊界或有鄰居?」)然後,通過你的船進行迭代;一次又一次地隨機選擇候選人的起始座標和方向,直到你的例程說好。 – 2014-10-02 08:37:30

回答

2

好像你想要一個方法,將採取int(size_of_boat),然後選擇一個隨機數爲xy(比方說:2,5)。

所有你需要做的是檢查你是否可以適應該船開始在那一點。
1.向左轉至size_of_boat。如果你沒有發現任何其他的「被佔用」位,或者你沒有離開董事會。好。
2.如果沒有,檢查了...
3.權利...
4.下來...

,如果你找到了一個方向,你的陣列爲true,設置這些位,並返回true 。如果不是這樣,這意味着你不能在該位置放置一個大小的船隻,所以隨機搜索另一個位置並重試。

這不是最優算法,但我敢肯定,這足以滿足您的需求