C# 我的程序不断将整个阵列的颜色更改为一种颜色,而不是每个阵列的不同颜色
我正在为我的课堂作业制作一个小板子生成器,在其中我获取一个2D数组,并用一个称为“瓷砖”的对象填充它,该对象有自己的符号、背景和前景颜色(即空=“#”)、背景红和前景蓝,而房间=“.”、背景绿和前景黄) 我已经创建了图板,并开始在上面画房间,还有我的瓷砖课。我唯一的问题是,每当我绘制图板时,它只使用给定的最后一个平铺对象参数,因此如果我最后绘制一个房间,它就有房间参数。我试着通过改变我创建了一个平铺并试图创建一个平铺来覆盖它的地方来摆弄它 以下是我的董事会类别代码:C# 我的程序不断将整个阵列的颜色更改为一种颜色,而不是每个阵列的不同颜色,c#,multidimensional-array,colors,console,C#,Multidimensional Array,Colors,Console,我正在为我的课堂作业制作一个小板子生成器,在其中我获取一个2D数组,并用一个称为“瓷砖”的对象填充它,该对象有自己的符号、背景和前景颜色(即空=“#”)、背景红和前景蓝,而房间=“.”、背景绿和前景黄) 我已经创建了图板,并开始在上面画房间,还有我的瓷砖课。我唯一的问题是,每当我绘制图板时,它只使用给定的最后一个平铺对象参数,因此如果我最后绘制一个房间,它就有房间参数。我试着通过改变我创建了一个平铺并试图创建一个平铺来覆盖它的地方来摆弄它 以下是我的董事会类别代码: namespace Bran
namespace BrandonPlayerGen
{
public class Board
{
public static object[,] board;
public static int height;
public static int width;
public static Array MakeBoard(int bwidth, int bheight)
{
Tile empty = new Tile("#", ConsoleColor.Red, ConsoleColor.Yellow,false);
board = new object[bheight, bwidth];
for (int hcheck = 0; hcheck < (bheight-1); hcheck++)
{
for(int wcheck = 0; wcheck < (bwidth-1); wcheck++)
{
board[hcheck, wcheck] = empty;
}
}
return board;
}
public static void DrawBoard(int dheight, int dwidth)
{
dwidth = width;
dheight = height;
for (int hcheck = 0; hcheck<dheight; hcheck++)
{
for (int wcheck = 0; wcheck < dwidth; wcheck++)
{
Tile.DrawTile();
}
Console.Write("\n");
}
}
public static Array MakeRoom()
{
Tile room = new Tile(".", ConsoleColor.Blue, ConsoleColor.Red,true);
int bheight = (height-1);
int bwidth = (width-1);
int hstart = Random.randInt(1, bheight);
int wstart = Random.randInt(1, bwidth);
int rheight = Random.randInt(1, 5);
int rwidth = Random.randInt(1, 5);
while (hstart > height || hstart < 1 || wstart < 1 || wstart > width||
(hstart+rheight)>bheight|| (wstart+rwidth)>bwidth)
{
hstart = Random.randInt(1, bheight);
wstart = Random.randInt(1, bwidth);
rheight = Random.randInt(1, 5);
rwidth = Random.randInt(1, 5);
}
for (; hstart<rheight; hstart++)
{
for (; wstart < rwidth; wstart++)
{
board[hstart, wstart] = room;
}
}
return board;
}
任何帮助都将不胜感激,如果我的问题格式不合适,请原谅。这是我在这里的第一个问题
编辑:
修复了生成平铺的方式,因此每次都会创建一个新的平铺,但问题是,当我显示板时,整个板上的颜色和符号都是相同的。您只创建了一个
平铺的实例。您需要为板中的每个单元创建一个新单元
另外,除非您计划在您的板中包含其他内容,否则我建议其类型应为Tile[,]
,而不是object[,]
board = new Tile[bheight, bwidth];
for (int hcheck = 0; hcheck < (bheight-1); hcheck++)
{
for(int wcheck = 0; wcheck < (bwidth-1); wcheck++)
{
Tile empty = new Tile("#", ConsoleColor.Red, ConsoleColor.Yellow,false);
board[hcheck, wcheck] = empty;
}
}
board=新磁砖[bheight,bwidth];
对于(int-hcheck=0;hcheck<(bheight-1);hcheck++)
{
对于(int-wcheck=0;wcheck<(bwidth-1);wcheck++)
{
Tile empty=新的Tile(“#”,ConsoleColor.Red,ConsoleColor.Yellow,false);
线路板[hcheck,wcheck]=空;
}
}
您只创建了一个平铺的实例。您需要为板中的每个单元格创建一个新单元格(使用new
关键字),即在内部for
循环中。或者,您可以将Tile
制作为一个结构,这样它就可以通过值而不是引用来传递感谢您@John Wu的帮助,我按照您所说的做了,我还通过以下过程更改了我的房间创建。但颜色问题仍然存在。对于(;hs)很抱歉为另一条评论打扰您,感谢您的帮助,但在看到混乱的局面后,我决定让您的眼睛不必再痛苦地阅读。因此,我按照您所展示的做了,并将该解决方案应用到了我的MakerRoom功能中。问题是颜色和符号仍然不变。问题是我的DrawT吗还是问题完全出在其他地方?我们将非常感谢您的帮助或至少是在正确方向上的引导。
int height, width;
Console.Write("Please Enter Board height: ");
height = Convert.ToInt32(Console.ReadLine());
Console.Write("Please Enter Board height: ");
width = Convert.ToInt32(Console.ReadLine());
Board.height = height;
Board.width = width;
Board.MakeBoard(height, width);
Board.DrawBoard(Board.height, Board.width);
Console.ReadKey();
Board.MakeRoom();
Board.DrawBoard( Board.width, Board.height);
Console.ReadKey();
board = new Tile[bheight, bwidth];
for (int hcheck = 0; hcheck < (bheight-1); hcheck++)
{
for(int wcheck = 0; wcheck < (bwidth-1); wcheck++)
{
Tile empty = new Tile("#", ConsoleColor.Red, ConsoleColor.Yellow,false);
board[hcheck, wcheck] = empty;
}
}