Я пишу простую игру консоли в C#, где карта хранится как 2 -й Char [,], а игрок движется с клавишами стрел. Вот ядро моей логики движения: < /p>
using System;
using System.IO;
using System.Collections.Generic;
class Mezo { public int X, Y; public char T; }
class Program
{
static char[,] palya;
static int startX, startY;
static void Main()
{
Init();
RunGame();
}
static void Init()
{
var sorok = File.ReadAllLines("palya.txt");
int rows = sorok.Length, cols = sorok[0].Length;
palya = new char[rows, cols];
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
{
palya[i, j] = sorok[j];
if (palya[i, j] == '*')
{
startX = i;
startY = j;
palya[i, j] = ' ';
}
}
}
static void RunGame()
{
int x = startX, y = startY;
var kezdet = DateTime.Now;
while (true)
{
Console.Clear();
Draw(x, y);
Console.WriteLine($"Idő: {(DateTime.Now - kezdet).TotalSeconds:F1}s");
var k = Console.ReadKey(true).Key;
int nx = x, ny = y;
if (k == ConsoleKey.LeftArrow) ny--;
if (k == ConsoleKey.RightArrow) ny++;
if (k == ConsoleKey.UpArrow) nx--;
if (k == ConsoleKey.DownArrow) nx++;
if (palya[nx, ny] != 'X')
{
x = nx;
y = ny;
}
if (palya[x, y] == 'T')
{
Console.Clear();
Draw(x, y);
Console.WriteLine("Nyertél!");
break;
}
}
}
static void Draw(int px, int py)
{
int rows = palya.GetLength(0), cols = palya.GetLength(1);
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
if (i == px && j == py)
Console.Write('*');
else
Console.Write(palya[i, j]);
}
Console.WriteLine();
}
}
}
< /code>
Проблема: Когда игрок находится на краю карты, и нажимает клавишу со стрелкой снаружи, я получаю индексаутофрангексэкспений на поиске Palya [NX, NY]. Я знаю, что мне нужно проверить, что NX и NY остаются внутри [0, ряды) и [0, cols), но я не уверен в самом чистом способе структурировать эти проверки без дублирования кода или создания логического грязного. Перед проверкой на стены, но это становится словесной. /> Должен ли я извлечь помощника, такого как Bool Canmoveto (int nx, int ny)? Если так, как это может выглядеть?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... ow-keys-on