4 gewinnt diagonale Abfrage C#

2 Antworten

Mein Vorschlag:

for(StartX = FeldgrößeX-1; StartX > 0; StartX--)
        {
        int y = -1;
            for (x = StartX; x < FeldgrößeX; x++)
            {
            y++;
                if (Spielfeld[x,y] nicht vorhanden)
                {
                    break;
                }
                if(Spielfeld[x,y] markiert von Spieler)
                {
                    counter++;
                }else{
                    counter = 0;
                }
                if (counter == 3)
                {
                    MessageBox.Show("Sie haben gewonnen!");
                    finish = true;
                    break;
                }
            }
        }

for(StartY = 0; StartY<FeldgrößeY; StartY++)
        {
        int x = -1;
            for (y = StartY; y < FeldgrößeY; y++)
            {
            x++;
                if (Spielfeld[x,y] nicht vorhanden)
                {
                    break;
                }
                if(Spielfeld[x,y] markiert von Spieler)
                {
                    counter++;
                }else{
                    counter = 0;
                }
                if (counter == 3)
                {
                    MessageBox.Show("Sie haben gewonnen!");
                    finish = true;
                    break;
                }
            }
        }

Kann gut sein, dass die Syntax falsch ist, da ich gerade in Java bin, aber der Sinn sollte rüber kommen.

Hi hier ein stwas andere ansatz... in dem vectoren ueberprueft werden...

    public enum Cell { EMPTY, BLUE, RED }

    class Vector
    {
        public int i;
        public int j;
        public Vector(int i, int j) { this.i = i; this.j = j; }
    }

    private static List<List<Vector>> winTemplates = new List<List<Vector>>
    {
        Enumerable.Range(0, 4).Select(x => new Vector(x, 0)).ToList(),
        Enumerable.Range(0, 4).Select(x => new Vector(0, x)).ToList(),
        Enumerable.Range(0, 4).Select(x => new Vector(x, x)).ToList(),
        Enumerable.Range(0, 4).Select(x => new Vector(4 - x - 1, x)).ToList()
    };

    private static int boardHeight = 8;
    private static int boardWidth = 8;
    private static Cell[,] board = new Cell[boardHeight, boardHeight];

    private static Func<Tuple<Cell, List<Vector>>> findWinOnBoard = () => Enumerable.Range(0, boardHeight - 4)
            .SelectMany(i => Enumerable.Range(0, boardWidth - 4).Select(j => new Vector(i, j)))
            .Select(p => getWinFromPosition(p))
            .FirstOrDefault();

    private static Func<Vector, Tuple<Cell, List<Vector>>> getWinFromPosition = p => winTemplates
            .SelectMany(winTemplate => winTemplate
                .Select(q => new Vector(p.i + q.i, p.j + q.j))
                .GroupBy(v => board[v.i, v.j])
                .Where(g => g.Key != Cell.EMPTY && g.Count() == 4)
                .Select(g => Tuple.Create(g.Key, g.ToList())))
            .FirstOrDefault();

    static void Main(string[] args)
    {
        // dein spiel code here...

        var win = findWinOnBoard();
        if (null != win)
        {
            Console.WriteLine("Das {0] team hat gewonnen", win.Item1.ToString());
        }
    }
   
}