动态阵列深度/宽度代码

时间:2017-03-10 23:54:56

标签: c# arrays unity3d dynamic

如果这个问题太模糊,我很抱歉,因为我还没有真正构建任何代码,但我的问题是关于如何编码(可能在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列宽),没有任何选项,这可能是一个有意的设计选择,但它使单位运动变得如此尴尬,我不得不假设他们是出于技术限制而做的,所以这可能是一个难题。

1 个答案:

答案 0 :(得分:0)

我写了一些代码来澄清这个问题。方法form()接受地层中单位数量和地层宽度的参数,不使用数组,只需将阵型打印到控制台,任何额外的人放在最后一行并居中:

x =男性人数

y =宽度形成

r =行数或深度(根据x和y计算)

如果y没有均匀分配到x

,则L =最后一行中的剩余人员

空格=用于居中最后一行的数字空格

form()=从类Formation

调用的方法

我认为应该考虑男性的深度和数量,因为男性的数量已经设定(直到有些人死亡但这里没有模拟)并且玩家通常会将男性分散到所需的宽度,因此数量这些行中的行数和人数,包括最后一行,以及最后一行的居中,应该由程序来处理。至少这是一种方法。

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参数作为其最大索引号然后我会做一种for循环喜欢(数组中的x)或任何打印x而不只是控制台一遍又一遍地记录字母A