目前正致力于用C#写一个Conways生活。我一直在采取一些小步骤来完成语言和游戏编程,并且在打印我的2D字符数组时遇到了麻烦。目前我正在使用GetLength - 1来不越过边界,但它无法打印出数组中的最后一个字符。
我的初始文件是什么样的
+*++
++*+
****
读入后放入Char(我相信)
*
*
****
最终打印的内容
*
**
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
namespace ConwaysLife
{
class Program
{
static char[,] universe;
static void bigBang(int h, int w, List<string> grid)
{
universe = new char[h,w];
int row = 0;
foreach (string line in grid)
{
for (int i = 0; i < line.Length; i++)
{
if (line.ToCharArray()[i] == '*')
{
universe[row, i] = '*';
}
}
row++;
}
}
//How I'm attempting to print out my 2D char array
static void offspring()
{
StringBuilder cellLine = new StringBuilder();
for (int y = 0; y < universe.GetLength(1)-1; y++)
{
for (int x = 0; x < universe.GetLength(0)-1; x++)
{
Console.Write(universe[y, x]);
}
Console.WriteLine();
}
//pause
Console.ReadLine();
}
static void Main(string[] args)
{
List<string> tempLine = new List<string>();
//Console.WriteLine("File Path?");
int width = 0;
int height = 0;
//read file into List
using (StreamReader r = new StreamReader("life.txt"))
{
while (r.Peek() >= 0)
{
tempLine.Add(r.ReadLine());
//compare current width to new width
if (tempLine[height].Length >= width) { width = tempLine[height].Length; }
//increase height when going to next row
height++;
}
bigBang(height, width, tempLine);
}
offspring();
}
}
}
更新后代()
static void offspring()
{
StringBuilder cellLine = new StringBuilder();
for (int x = 0; x <= universe.GetLength(1); x++)
{
for (int y = 0; y <= universe.GetLength(0); y++)
{
Console.Write(universe[x, y]);
}
Console.WriteLine();
}
//pause
Console.ReadLine();
}
答案 0 :(得分:0)
您的offspring
功能中有一个错误的错误。请注意,您在bigBang
函数中正确执行了此操作。
您正在x < GetLength()-1
进行循环播放。您只需要x < GetLength()
,因为这排除了x == GetLength()
时的情况。
一个类似的循环:
for (i = 0; i < 4; i++)
Console.WriteLine(i);
输出:
0
1
2
3
答案 1 :(得分:0)
我不熟悉游戏原则,但您的offspring
方法存在问题。
y < universe.GetLength(1)-1
这会转换为y < 3 - 1
或y < 2
,使您的迭代从y = 0变为1.
要修复,只需删除-1
的两个出现。
for (int y = 0; y < universe.GetLength(1); y++)
{
for (int x = 0; x < universe.GetLength(0); x++)
{
此外,当您访问universe
时,您的指数会被反转。
Console.Write(universe[y, x]);
你正在使用y变量访问行,x用于列。反过来应该这样做:
Console.Write(universe[x, y]);
给出
的最终结果++*
*+*
+**
++*
答案 2 :(得分:0)
虽然我会深入研究为什么它没有像我预期的那样工作,但是当我将它创建到我的后代()并在打印时使用这些值时,我只是简单地传递了数组的大小。一旦完成那么小的改变,输出就会按预期发出。
*
*
****