เอาล่ะ ก่อนอื่น นี่เป็นโพสต์แรกของฉันที่นี่ และโดยปกติฉันจะเข้าไปและค้นหาคำตอบได้ แต่เนื่องจากนี่ค่อนข้างเจาะจง ฉันจึงไม่สามารถหาคำตอบสำหรับคำตอบนี้ได้
ฉันค่อนข้างเป็นมือใหม่ในการเขียนโค้ด (ฉันรู้พื้นฐานเป็นส่วนใหญ่และได้ดูวิดีโอมากมายและอ่านบทช่วยสอนมากมายเกี่ยวกับ C#) และกำลังพยายามเขียนโค้ด "เกม" คอนโซล ASCII ทุกอย่างดำเนินไปได้ด้วยดีมาระยะหนึ่งแล้ว แต่ตอนนี้ฉันติดอยู่ในส่วนของการทำแผนที่ ตอนแรกฉันคิดว่าจะป้อนพิกัดทั้งหมดสำหรับผนังด้วยตนเอง อย่างไรก็ตาม ฉันพบโพสต์ที่นี่ที่อธิบายว่าวิธีการเชิงวัตถุที่มากกว่าในการทำคือการสร้างคลาสไทล์เช่นนั้น
public class Tile
{
public int X { get; set; }
public int Y { get; set; }
public bool IsWall { get; set; }
}
แล้วเติมรายการโดยทำสิ่งนี้
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 });
}
สาเหตุของค่า x และ y เริ่มต้นเป็นคี่เพราะฉันจำกัดไทล์ไว้ที่บางส่วนของคอนโซล ส่วนที่เหลือใช้สำหรับ GUI
ไม่ว่าในกรณีใด เว้นแต่จะมีวิธีที่ดีกว่า (และต้องมีอย่างใดอย่างหนึ่ง ฉันไม่รู้ว่ามันคืออะไร) ฉันกำลังพยายามดึงข้อมูลเพียงบางส่วนของรายการนั้นเพื่อเปลี่ยนคุณสมบัติ ISWALL เพื่อตั้งค่าเป็น TRUE แล้วใช้สิ่งนี้
static void DrawObstacles()
{
foreach (Tile tile in World.Tiles)
{
if (tile.IsWall)
{
Console.SetCursorPosition(tile.X, tile.Y);
Console.Write("#");
}
}
}
จนถึงตอนนี้ ฉันลองวิธีแก้ปัญหาที่แตกต่างกันสองสามแบบ แต่เห็นได้ชัดว่าฉันประสบปัญหากับแต่ละวิธี (ฉันยังพยายามหลีกเลี่ยงการทำให้โปรแกรมช้าลง ถ้าเป็นไปได้ และหลีกเลี่ยงการวนซ้ำซ้ำมากกว่า 1,000 ครั้ง)
//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
ตอนนี้ ฉันหลงทางไปเล็กน้อยเนื่องจากฉันต้องการวนซ้ำรายการ แทนที่จะป้อนทุกพิกัดด้วยตนเองในอาร์เรย์ 2 มิติ... แล้ววนซ้ำเพื่อ "สร้าง" กำแพง
คำถามของฉันคือ: เป็นไปได้หรือไม่ที่จะดึงข้อมูลเพียงบางส่วนของรายการ (เช่นดัชนี 0 - 7, 19 - 26, 29, 31, 35 - 46) จากนั้นวนซ้ำรายการหลักของไทล์เพื่อใช้ "รายการดัชนีใหม่นี้ " เพื่อเปลี่ยนคุณสมบัติ ISWALL ของไทล์ที่ดัชนีเหล่านั้น... ถ้านั่นสมเหตุสมผล
ขอบคุณล่วงหน้าและอย่าลังเลที่จะบอกฉันหากฉันทำผิดพลาดในโพสต์