如果这个问题太模糊,我很抱歉,因为我还没有真正构建任何代码,但我的问题是关于如何编码(可能在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 :(得分: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