我正在编写一个策划游戏,我需要使用while循环中的变量来更新数组大小的值,在每个循环中增加是否有任何方法可以执行此操作?
bool game = false;
do
{
int codeSize;
int colourSize;
int guessNumber = 1;
int userGuess;
int black = 0;
int white = 0;
int count = 1;
Console.WriteLine("Welcome to Mastermind coded by ****");
Console.Write("How many positions > ");
codeSize = Convert.ToInt32(Console.ReadLine());
Console.Write("How many colours > ");
colourSize = Convert.ToInt32(Console.ReadLine());
Random rand = new Random();
int[] code = new int[codeSize];
int[] guess = new int[codeSize];
for (int i = 0; i < codeSize; i++)
{
code[i] = rand.Next(1, colourSize + 1);//filling the secret code array
}
Console.WriteLine("O.k. - I've generated a code -- guess it!");
while (black < codeSize)
{
int[,] history = new int[count, codeSize + 2];
Console.WriteLine("Next guess please.");
for (int n = 0; n < codeSize; n++)
{
Console.Write("Position " + guessNumber + " >");
userGuess = Convert.ToInt32(Console.ReadLine());
guess[n] = userGuess;
history[count - 1, n] = guess[n];
guessNumber++;
}
for (int x = 0; x < codeSize; x++)
{
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
{
if (guess[x] == code[x])
{
black++;
break;
}
goto case 2;
}
case 2:
{
if (guess[x] == code[x])
{
break;
}
int i = 0;
while (i < codeSize)
{
if ((guess[x] == code[i]) && (guess[i] != code[i]))
{
white++;
break;
}
i++;
}
break;
}
}
}
guessNumber = 1;
if (black == codeSize)
{
white = 0;
}
history[count - 1, codeSize + 1] = white;
history[count - 1, codeSize] = black;
count++;
Debug.WriteLine("-----------\nSecret code\n-----------");
for (int x = 0; x < codeSize; x++)
{
Debug.WriteLine(code[x]);
}
Console.WriteLine("Correct positions : {0}", black);
Console.WriteLine("Correct colours : {0}\n", white);
Console.WriteLine("History");
for (int t = 1; t < codeSize + 1; t++)
{
Console.Write(t + " ");
}
Console.WriteLine("B W");
for (int g = 0; g < codeSize + 3; g++)
{
Console.Write("--");
}
Console.Write("\n");
for (int t = 0; t < count - 1; t++)
{
for (int g = 0; g < codeSize + 2; g++)
{
Console.Write("{0} ", history[t, g]);
}
Console.WriteLine("\n");
}
if (codeSize > black)//reseting values for next turn
{
black = 0;
white = 0;
}
}
int play;
Console.WriteLine("\nYou Win!\n\nPress 1 to play again or any other number to quit");
play = Convert.ToInt32(Console.ReadLine());
if (play == 1)
game = true;
} while (game == true);
答案 0 :(得分:1)
当您声明数组时,数组具有固定大小,并且您无法在不创建新数组的情况下更改大小。请尝试使用强类型列表。
List<int> MyList = new List<int>();
// Add the value "1"
MyList.Add(1);
表格的或以下内容:
List<List<int>> MyTable = new List<List<int>>();
// Add a new row
MyTable.Add(new List<int>());
// Add the value "1" to the 1st row
MyTable[0].Add(1);
答案 1 :(得分:0)
有一种方法可以调整数组大小:
Array.Resize<T>
方法。详细信息:http://msdn.microsoft.com/en-us/library/bb348051(v=vs.110).aspx
但基于调整数组循环的调整通常是一个非常糟糕的主意。您需要选择另一种数据结构来保存数据,或者创建一个更大的数组,即用零填充。
答案 2 :(得分:0)
您还需要将项目添加到列表中。该列表将根据其大小动态增长。
int myInt = 6;
List<int> myList = new List<int>();
myList.Add(myInt);
答案 3 :(得分:0)
我相信您在询问是否可以在循环中更改数组的长度属性,并根据需要进行扩展。
直接,没有。有助手和类提供这样的功能,根据需要分配更多的内存,但我怀疑这是你真正需要的。您可以尝试使用固定维度的数组(程序将容忍或期望的最大codeSize),然后使用它旁边的整数来记录长度/位置。
或者,如果您确实需要扩展到任意大小并存储所有代码,只需使用List。
List<int[]> theList = new List<int[]>();
theList.Add(code);
创建一个可以继续添加的整数数组(代码)列表,并像任何简单数组一样索引。