3. 象棋馬走法
Console.Write("馬目前位置和一些障礙物: ");
var d = Console.ReadLine().Split(" ").Select(int.Parse).ToList();
int y = d[0];
int x = d[1];
bool[,] obs = new bool[9, 9];
for (int i = 2; i < d.Count; i += 2)
{
obs[d[i], d[i + 1]] = true;
}
var keys = """
RRD
RRU
UUR
UUL
LLU
LLD
DDL
DDR
""".Split("\n");
while (true)
{
Console.Write("輸入移動數字鍵: ");
var c = Console.ReadKey().KeyChar - '0';
if (c < 0 || c > 7)
{
Console.Write(" (結束此程式)");
break;
}
int tx = x, ty = y;
var s = keys[c];
bool o = false;
for (int i = 0; i < s.Length; i++)
{
char item = s[i];
switch (item)
{
case 'U':
ty--;
break;
case 'L':
tx--;
break;
case 'R':
tx++;
break;
case 'D':
ty++;
break;
}
if (tx < 1 || tx > 8 || ty < 1 || ty > 8)
{
Console.WriteLine($"\n馬移動至新位置: {y} {x} (因超出棋盤外而保持原座標)");
o = true;
break;
}
if (i == 0 && obs[ty, tx])
{
Console.WriteLine($"\n馬移動至新位置: {y} {x} (因馬腳捆住而保持原座標)");
o = true;
break;
}
}
if (o) continue;
x = tx;
y = ty;
obs[y, x] = false;
Console.WriteLine($"\n馬移動至新位置: {y} {x}");
}Last updated