2017-03-10 67 views
-1

如果這個問題太模糊,我還沒有真正構建出任何代碼,但是我的問題是關於如何編寫代碼(可能在Unity3d腳本的C#中,但實際上只是一般的)總戰爭遊戲中動態變化的單位深度/寬度。動態數組深度/寬度代碼

在TW遊戲中,您可以點擊並拖動以將單位從nx2陣型更改爲2xn陣型以及兩者之間的任何內容。這裏有一個視頻(手錶從15秒到30秒):

https://www.youtube.com/watch?v=3aGRzy_PzJQ

我很好奇,一般來講,有關代碼,將允許某人在飛行中交換一個數組的元素,如那。我假設這裏的地層單位是數組中的元素

的話,你可能會開始有一個這樣的數組:

int[,] array = new int[2, 20]; 

,並用一個這樣的數組結束:

int[,] array = int[20, 2]; 

但是在兩者之間創建最接近的近似值,最後一行在某些情況下未被填充,然後最後一行的元素將不得不以視覺爲中心,直到列寬達到所有元素的數量行再次相等。

它讓我想起編程問題的一個常見介紹,需要您向控制檯寫一個由*組成的金字塔堆疊起來,並在每行之間添加一個空格的元素,但複雜得多。

大多數較低技術的編隊戰術遊戲如戰禍只是讓你選擇線陣列(2行深)或列陣(2列寬),沒有任何選擇之間的任何選擇,這可能是這是一個有意的設計選擇,但它使得單位運動變得如此尷尬,以至於我不得不假定他們沒有技術限制,所以也許這是一個難題。

+0

你有沒有考慮過使用列表?你不能像你想要的那樣在C#中改變數組。 –

+0

_「我實際上還沒有構建任何代碼」 - 這是關於它的總結。坦率地說,我不認爲嘗試使用_collection_數據結構作爲某種對象的地理佈局模型是個好主意。最好有一個簡單的集合(例如數組或列表),只需_stores_對象,然後讓每個對象保持自己的位置。當你想改變地層時,只需穿過現有的物體併爲它們分配新的位置,即用新物體填充新構造的空間。 –

+0

但是真的,你的問題太廣泛了。許多不同的方式來做到這一點,以及你應該怎樣做的方式,儘可能多的不同意見。 –

回答

0

我寫了一些代碼來澄清這個問題。 form()方法不需要使用數組,而是使用陣列中的單位數量和陣列寬度的參數,並且將任何額外的人放在最後一行和居中的位置打印出控制檯形式:

X =數目的男性

Y =寬度形成

R =行數,或者深度(從x和y計算)

l最後一頁行=剩男性如果y不劃分均勻分成x

空間=數字空間中使用居中最後一行

形式()=方法從階級的形成所謂

我想通,因爲人的數量設置應採取的男人的深度和數量(直到有死,但這裏沒有模擬),玩家通常會將男子分散到所需的寬度,所以包括最後一排在內的那些排的行數和人數以及最後一排的居中數應該是由程序照顧。至少這是做到這一點的一種方法。

namespace ConsoleApplication6 
{ 

    class Formation 
    { 
     public int x; 
     public int y; 

     public Formation(int x, int y) 
     { 
      this.x = x; 
      this.y = y; 
     } 


     public void form() 
     { 
      int r = x/y; 
      int Left = x % y; 
      int Space = (y - Left)/2; 
      for (int i = 0; i < r;i++) 
       { 
       for (int j = 0; j < y; j++) 
        { 
        Console.Write("A"); 
        } 
       Console.WriteLine(); 
       if (i == r - 1) 
       { 
        for (int m = 0; m < Space; m++) 
        { 
         Console.Write(" "); 
        } 
        for (int k = 0; k < Left; k++) 
        { 
         Console.Write("A"); 
        } 
       } 
       } 
     } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      Console.WriteLine("enter the number of men: "); 
      int a = Convert.ToInt32(Console.ReadLine()); 
      Console.WriteLine("enter the formation width: "); 
      int b = Convert.ToInt32(Console.ReadLine()); 
      Formation testudo = new Formation(a,b); 
      testudo.form(); 
      Console.ReadKey(); 
     } 
    } 
} 

所以,我想我正在試圖做的改善,這是有上面的代碼運行多次,實時爲用戶輸入不同的所需的寬度(Y的變化),並人死(X變化)但是,如果它實際上是在遊戲中實現的,我認爲它必須是一個數組,所以我猜這個數組可能會把x參數作爲它的最大索引號,然後我會做一種循環像(x在陣列)或任何打印x而不是隻是控制檯記錄字母A一遍又一遍