using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; namespace SilverlightApplication1 { public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); Loaded += (InicializaJogo); } Canvas TelaJogo; Peca[] pecas; Pino[] pinos; TextBlock score; Button reiniciar; int movimentos; void InicializaJogo(object sender, RoutedEventArgs e) { score = new TextBlock(); score.Text = "aqui vai a quantidade de vezes"; score.FontSize = 30; reiniciar = new Button(); reiniciar.Content = "Reiniciar"; Canvas.SetLeft(reiniciar, 400); Canvas.SetTop(reiniciar, 250); reiniciar.Click += new RoutedEventHandler(reiniciar_Click); TelaJogo = new Canvas(); TelaJogo.Children.Add(score); TelaJogo.Width = 1024; TelaJogo.Height = 768; TelaJogo.Background = new SolidColorBrush(Colors.Gray); LayoutRoot.Children.Add(TelaJogo); pinos = new Pino[3]; pecas = new Peca[4]; pinos[0] = new Pino("Imagens/pino.png", TelaJogo, 250, 650); pinos[1] = new Pino("Imagens/pino.png", TelaJogo, 450, 650); pinos[2] = new Pino("Imagens/pino.png", TelaJogo, 650, 650); pecas[0] = new Peca("Imagens/maispequena.png", TelaJogo, 100, 100); pecas[1] = new Peca("Imagens/pequeno.png", TelaJogo, 100, 100); pecas[2] = new Peca("Imagens/medio.png", TelaJogo, 200, 100); pecas[3] = new Peca("Imagens/grande.png", TelaJogo, 300, 90); EventosHanoi.OnSoltar += new PecaSoltar(EventosHanoi_OnSoltar); EventosHanoi.OnPronta += new ImagemPronta(EventosHanoi_OnPronta); ContarImagens = pecas.Length + pinos.Length; } void reiniciar_Click(object sender, RoutedEventArgs e) { PrimeiroPino(); movimentos = 0; score.Text = movimentos.ToString(); TelaJogo.Children.Remove(reiniciar); } int ContarImagens; void EventosHanoi_OnPronta() { ContarImagens--; if (ContarImagens == 0) { PrimeiroPino(); } } void PrimeiroPino() { double altura = pinos[0].Height + pinos[0].Y; for (int i = pecas.Length - 1; i >= 0; i--) { altura -= pecas[i].Height; pecas[i].Y = altura; pecas[i].X = pinos[0].X - pecas[i].Width / 2 + pinos[0].Width / 2; } pinos[0].InserirPecas(pecas); } int Sobreposicao(Peca peca) { for (int i = 0; i < pinos.Length; i++) { Rect rectPino = new Rect(pinos[i].X, pinos[i].Y, pinos[i].Width, pinos[i].Height); Rect rectPeca = new Rect(peca.X, peca.Y, peca.Width, peca.Height); rectPino.Intersect(rectPeca); if (rectPino != Rect.Empty) return i; } return -1; } void EventosHanoi_OnSoltar(Pino pinoOrigem, Peca peca) { int pinoIndice = Sobreposicao(peca); if (pinoIndice > -1 && !pinoOrigem.Equals(pinos[pinoIndice])) { if (pinos[pinoIndice].InserePecaNoPino(pinoOrigem, peca)) { movimentos++; if (pinos[2].PecasCount == pecas.Length) { score.Text = "Torre Transferida em " + movimentos + " movimentos"; TelaJogo.Children.Add(reiniciar); pinos[pinos.Length - 1].Removedor(); } else { score.Text = movimentos.ToString(); } } } else { peca.X = pinoOrigem.PosAnterior.X; peca.Y = pinoOrigem.PosAnterior.Y; //MessageBox.Show("não houve colisao!!!!!!!!!!!!!!!!!!!!!!"); } } } }