//Tick do jogo public void tick2() { //Stopwatch para testar performance Stopwatch st1 = new Stopwatch(); st1.Start(); //Pega as direções armazenadas e joga pra direção atual if (subDir1 != Direcao.Nenhuma) { direction = subDir1; subDir1 = Direcao.Nenhuma; } if (subDir2 != Direcao.Nenhuma) { subDir1 = subDir2; subDir2 = Direcao.Nenhuma; } //Move snake para a proxima posição e executa o metodo if (direction == Direcao.Left) { posição.X -= dimension; moveRect(); } else if (direction == Direcao.Right) { posição.X += dimension; moveRect(); } else if (direction == Direcao.Up) { posição.Y -= dimension; moveRect(); } else if (direction == Direcao.Down) { posição.Y += dimension; moveRect(); } //Passa por todos os retangulos para mudar sua cor caso mude de tema e mudar o tamanho da Border PointCollection d = new PointCollection(); for (int i = 0; i < rects.Count; i++) { d.Add(new Point(Canvas.GetLeft(rects[i]), Canvas.GetTop(rects[i]))); rects[i].StrokeThickness = i / (double)rects.Count; if (i == rects.Count - 1) { rects[i].StrokeThickness = 1.2; } if (rects[i].Fill != rectColor) { rects[i].Fill = rectColor; } if (rects[i].Stroke != rectStrokeColor) { rects[i].Stroke = rectStrokeColor; } } //Caso a cobra bata em si mesma if (d.Where(l => l == posição).Count() > 1) { Canvas.SetZIndex(rects.Last(), int.MaxValue); rects.Last().Fill = hitColor; t.Stop(); MessageBox.Show("Nice"); t.Dispose(); return; } //Caso saia do quadrado if (posição.X > 29 * dimension || posição.Y > 29 * dimension || posição.X < 0 || posição.Y < 0) { rects.Last().Fill = hitColor; t.Stop(); MessageBox.Show("Nice"); t.Dispose(); } //Teste de performance st1.Stop(); Debug.WriteLine(st1.Elapsed); }