Какая платформа? При использовании.NET используйте System.Uri.TryCreate
, не regex.
, Например:
static bool IsValidUrl(string urlString)
{
Uri uri;
return Uri.TryCreate(urlString, UriKind.Absolute, out uri)
&& (uri.Scheme == Uri.UriSchemeHttp
|| uri.Scheme == Uri.UriSchemeHttps
|| uri.Scheme == Uri.UriSchemeFtp
|| uri.Scheme == Uri.UriSchemeMailto
/*...*/);
}
// In test fixture...
[Test]
void IsValidUrl_Test()
{
Assert.True(IsValidUrl("http://www.example.com"));
Assert.False(IsValidUrl("javascript:alert('xss')"));
Assert.False(IsValidUrl(""));
Assert.False(IsValidUrl(null));
}
(Благодаря @Yoshi для подсказки [приблизительно 112])
Для игр эпохи NES, о которых вы говорите, все было в 2D. Уже одно это упрощает многие вещи.
Некоторые машины той эпохи (особенно с аппаратными спрайтами, такие как Commodore 64) имели аппаратное обнаружение коллизий. Большинство игр, которые не полагались на аппаратное обнаружение столкновений, использовали бы либо ограничивающую рамку, либо маску совпадения (1-битное растровое изображение спрайта).
В любом случае обнаружение столкновений обычно выполнялось «апостериори», за исключением специальных случаи, как на краю света. В некоторых играх действительно были ошибки, когда слишком быстрое движение при ударе по чему-то могло заставить вас пройти через это. (Фактически, обзоры игр начала 80-х часто комментируют, насколько точным было обнаружение столкновений.)
Для платформеров вы обычно проверяете, является ли персонаж "
Здесь есть статья , в которой подробно рассматривается программирование «платформенной игры» Nintendo Entertainment System (NES).
Я не могу правильно погуглил, потому что раньше я не встречал эту статью.
Для таких игр, как Super Mario World (SNES), игра сохраняла уровни в формате памяти, что упрощало получение местоположения Марио X / Y, преобразование его в адрес плитки, а затем немедленную проверку плиток вокруг этого адреса. . Поскольку уровни всегда были фиксированной ширины (хотя область, которую вы могли видеть, варьировалась), это упростило управление адресацией, поскольку это всегда было фиксированное смещение от позиции Марио, например, Адрес + 1 для плитки рядом с Марио,