Baiklah, pertama-tama, ini adalah postingan pertama saya di sini dan biasanya saya bisa langsung mencari jawabannya, namun karena ini agak spesifik, saya tidak dapat menemukan jawaban untuk yang ini.
Saya agak pemula dalam pengkodean (saya tahu dasar-dasarnya sebagian besar dan telah menonton banyak video dan membaca banyak tutorial tentang C#) dan saya mencoba membuat kode "permainan" konsol ASCII. Semuanya berjalan cukup baik untuk sementara waktu tetapi sekarang saya terjebak pada bagian pemetaan. Pada awalnya, saya pikir saya akan memasukkan semua koordinat secara manual untuk dinding. Namun saya menemukan posting di sini menjelaskan bahwa cara yang lebih Berorientasi Objek dalam melakukannya adalah dengan membuat kelas Tile seperti itu.
public class Tile
{
public int X { get; set; }
public int Y { get; set; }
public bool IsWall { get; set; }
}
dan kemudian mengisi daftar dengan melakukan ini
private static void PopulateTiles()
{
for (int x = 1; x < 159; x++)
for (int y = 3; y < 45; y++)
Tiles.Add(new Tile { X = x, Y = y });
}
Alasan nilai awal x dan y yang ganjil adalah karena saya membatasi ubin pada bagian tertentu dari konsol, sisanya digunakan untuk GUI.
Bagaimanapun, kecuali ada cara yang lebih baik (Dan pasti ada, saya tidak tahu apa yang bisa terjadi), saya mencoba mengambil hanya sebagian dari daftar itu untuk mengubah properti ISWALL untuk menyetelnya ke TRUE dan kemudian gunakan ini
static void DrawObstacles()
{
foreach (Tile tile in World.Tiles)
{
if (tile.IsWall)
{
Console.SetCursorPosition(tile.X, tile.Y);
Console.Write("#");
}
}
}
Sejauh ini, saya mencoba beberapa solusi berbeda tetapi jelas, saya mengalami masalah dengan masing-masing solusi (saya juga mencoba menghindari memperlambat program, jika memungkinkan, dan menghindari loop lain dengan 1000+ iterasi).
//Tried this
private static void SetWalls()
{
int[] walls = new int[] { };
walls += Tiles.GetRange(0, 7); //Fails because I cannot use tiles in an int[]... of course
}
//This
List<Tile> walls = new List<Tile>();
List<Tile> walls = Tiles.GetRange(0, 7);
List<Tile> walls = Tiles.GetRange(19, 7; //Doesn't work either but I've no idea why here
//And finally
List<Tile> walls = new List<Tile>();
walls.Add(Tiles[Tiles.GetRange(0, 7)]); //Gives me an error saying that System.Collections.Generic.List<Engine.Tile> cannot be converted to int
Jadi saat ini, saya agak bingung karena saya lebih suka mengulangi daftar, daripada memasukkan setiap koordinat secara manual dalam array 2D... dan kemudian mengulanginya untuk "membangun" dinding.
Pertanyaan saya adalah: Apakah mungkin untuk mengambil hanya beberapa bagian dari daftar (seperti indeks 0 - 7, 19 - 26, 29, 31, 35 - 46) dan kemudian mengulangi daftar ubin utama untuk menggunakan "Daftar Indeks" baru ini " untuk mengubah properti ISWALL ubin pada indeks tersebut... Jika itu masuk akal.
Terima kasih sebelumnya dan jangan ragu untuk memberi tahu saya jika saya membuat kesalahan dalam postingan.