Ok pozmieniałem trochę i jest dużo lepiej aczkolwiek...
s++;
if (nChar == 'w')
{
i++;
j++;
tabY[j]=y;
tabX[i]=x;
k=j;
n=i;
dc.MoveTo(x,y);
y=y-10;
for (i=1;i<=s;i++)
for (j=1;j<=s;j++)
if ( (tabY[j]==y) && (tabX[i]==x) )
MessageBox("YYY");
j=k;
i=n;
dc.LineTo(x,y);
}
Tak wygląda kod w przypadku każdego kierunku poruszania się (W S A D ). Oczywiście zmienna s++ jest poza tym. I działanie jest następujące. Komunikat pokazuje się gdy głowa węża jest na starej pozycji XY, tyle że trochę źle to ocenia.
Legenda
pomarańczowy -> glowa węża
czerwony -> ciało węża
niebieski -> linie współrzędnych
zielone kółka -> przecięcie się ciała węża ze współrzędnymi.
Czyli reasumując, komunikat wyświetla się jeśli głowa węża znajduje się na współrzędnej Y ciała węża i współrzędnej X węża, tyle że tą współrzędną (np X ) nie obiera sobie z tego samego momentu gdzie znajdowała się pozycja ciała współrzędnej Y.
Troche masło maślane ale mam nadzieje, że rozumeisz o co chodzi.
Edit:
Chyba sobie poradziłem ;). Użyłem tylko jednej pętli for (bez zagnieżdzenia) i jednego indeksu (operuję tylko i )
Więc jak widzicie żadnej tablicy dwuwymiarowej nie trzeba :P