Advertisement
Guest User

MazeBot (29/04/2017)

a guest
Apr 29th, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 26.63 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace MazeBot
  12. {
  13.     public partial class frmMazeBot : Form
  14.     {
  15.         public int size = 8;
  16.  
  17.         public Point[] Neighbor = new Point[4];
  18.         public int neighborCont = 0;
  19.  
  20.         public PictureBox[,] LED = new PictureBox[30, 30];
  21.         public bool[,] bloco = new bool[30, 30];
  22.         public int i, j;
  23.  
  24.         public Point walker;
  25.         public int moveX, moveY;
  26.  
  27.         public Point[] Path = new Point[225];
  28.         public int pathCont;
  29.  
  30.         public Random rnd = new Random();
  31.         public int borda;
  32.  
  33.         public Point blocoInicial;
  34.         public Point blocoFinal;
  35.         public int blocoExtremidade;
  36.  
  37.         public Point[] Aberta = new Point[225];
  38.         public Point[] Fechada = new Point[225];
  39.         public int fechadaCont;
  40.         public Point Atual;
  41.         public int[] Vizinho = new int[4];
  42.  
  43.         public Point Obstaculo;
  44.  
  45.         public string direcao = "up";
  46.  
  47.         public string movimento;
  48.         public int k = 0;/////////////////////
  49.  
  50.         public frmMazeBot()
  51.         {
  52.             InitializeComponent();
  53.  
  54.             for (j = 0; j < 30; j++)
  55.             {
  56.                 for (i = 0; i < 30; i++)
  57.                 {
  58.                     LED[i, j] = new PictureBox();
  59.                     Controls.Add(LED[i, j]);
  60.                 }
  61.             }
  62.  
  63.             AtualizarSize();
  64.  
  65.             for (neighborCont = 0; neighborCont < 4; neighborCont++)
  66.             {
  67.                 Neighbor[neighborCont] = new Point(size, size);
  68.             }
  69.  
  70.         }
  71.  
  72.         private void btnGerarLabirinto_Click(object sender, EventArgs e)
  73.         {
  74.         ResetarLabirinto:
  75.  
  76.             ZerarLEDs();
  77.             txtMovimentos.Text = "";
  78.             k = 0;
  79.  
  80.             blocoInicial = new Point(0, size - 1);
  81.  
  82.             LED[blocoInicial.X, blocoInicial.Y].BackColor = Color.Blue;
  83.             bloco[blocoInicial.X, blocoInicial.Y] = true;
  84.  
  85.             while (true)
  86.             {
  87.                 blocoExtremidade = rnd.Next(0, size);
  88.                 borda = rnd.Next(2);
  89.  
  90.                 switch (borda)
  91.                 {
  92.                     case 0://SUPERIOR
  93.                         blocoFinal = new Point(blocoExtremidade, 0);
  94.                         break;
  95.                     case 1://DIREITA
  96.                         blocoFinal = new Point(size - 1, blocoExtremidade);
  97.                         break;
  98.                 }
  99.  
  100.                 LED[blocoFinal.X, blocoFinal.Y].BackColor = Color.Blue;
  101.                 bloco[blocoFinal.X, blocoFinal.Y] = true;
  102.  
  103.                 int NumDeExtremidades = 0;
  104.  
  105.                 for (j = 0; j < size; j++)
  106.                     for (i = 0; i < size; i++)
  107.                         if (bloco[i, j])
  108.                             NumDeExtremidades++;//CONTA EXTREMIDADES (PONTO INICIAL E FINAL)
  109.  
  110.                 if (NumDeExtremidades == 2)
  111.                     break;//SAI DO WHILE CASO JA TENHA PONTO INICIAL E FINAL
  112.             }
  113.  
  114.             walker = blocoInicial;//walker --> ponto que se desloca para determinar caminho
  115.  
  116.             Path[pathCont] = walker;
  117.             pathCont++;
  118.  
  119.             try
  120.             {
  121.                 //Teste();
  122.                 Maze(3);
  123.                 //MauriciosWay();
  124.                 //A_Estrela();
  125.  
  126.                 ListarCaminho();
  127.  
  128.                 for (j = 0; j < size - 1; j++)
  129.                 {
  130.                     for (i = 0; i < size - 1; i++)
  131.                     {
  132.                         if (bloco[i, j] &&
  133.                             bloco[i + 1, j] &&
  134.                             bloco[i, j + 1] &&
  135.                             bloco[i + 1, j + 1])
  136.                         {
  137.                             goto ResetarLabirinto;
  138.                         }
  139.  
  140.                         if (i < size - 3 && j < size - 3)
  141.                         {
  142.                             if (bloco[i + 1, j] &&
  143.                                 bloco[i, j + 1] &&
  144.                                 bloco[i + 1, j + 1] &&
  145.                                 bloco[i + 2, j + 1] &&
  146.                                 bloco[i + 1, j + 2])
  147.                             {
  148.                                 goto ResetarLabirinto;
  149.                             }
  150.                         }
  151.  
  152.                     }
  153.                 }
  154.  
  155.                 for (j = 0; j < size; j++)
  156.                 {
  157.                     for (i = 0; i < size; i++)
  158.                     {
  159.                         if (!bloco[i, j])
  160.                         {
  161.                             int obs = rnd.Next(2);
  162.  
  163.                             if (obs != 0)
  164.                             {
  165.                                 LED[i, j].BackColor = Color.DimGray;
  166.                             }
  167.                         }
  168.                         else if (blocoInicial != new Point(i, j) && blocoInicial != new Point(i, j) && blocoFinal != new Point(i, j) && blocoFinal != new Point(i, j))
  169.                         {
  170.                             if (chkShowPath.Checked)
  171.                             {
  172.                                 LED[i, j].BackColor = Color.Red;
  173.                             }
  174.                             else
  175.                             {
  176.                                 LED[i, j].BackColor = Color.LightGray;
  177.                             }
  178.                         }
  179.                     }
  180.                 }
  181.  
  182.                 LED[blocoFinal.X, blocoFinal.Y].BackColor = Color.Blue;
  183.  
  184.                 Atual = new Point(0, size - 1);
  185.                 lblBot.Left = LED[Atual.X, Atual.Y].Left + (LED[Atual.X, Atual.Y].Width - lblBot.Width) / 2;
  186.                 lblBot.Top = LED[Atual.X, Atual.Y].Top + (LED[Atual.X, Atual.Y].Height - lblBot.Height) / 2;
  187.  
  188.                 lblBot.BringToFront();
  189.             }
  190.             catch (Exception ex)
  191.             {
  192.                 MessageBox.Show("Error: " + ex.Message, "Erro");
  193.             }
  194.  
  195.         }
  196.  
  197.         public void ZerarLEDs()
  198.         {
  199.             for (j = 0; j < size; j++)
  200.             {
  201.                 for (i = 0; i < size; i++)
  202.                 {
  203.                     LED[i, j].BackColor = Color.LightGray;//COR DEFAULT DOS LEDS
  204.                     bloco[i, j] = false;
  205.                     pathCont = 0;
  206.                 }
  207.             }
  208.  
  209.             neighborCont = 0;
  210.             fechadaCont = 0;
  211.             listBox1.Items.Clear();
  212.         }
  213.  
  214.         public void ListarCaminho()
  215.         {
  216.             listBox2.Items.Clear();
  217.  
  218.             for (pathCont = 0; pathCont < 64; pathCont++)
  219.             {
  220.                 listBox2.Items.Add("(" + Path[pathCont].X + ", " + Path[pathCont].Y + ")");
  221.  
  222.                 if (Path[pathCont] == blocoFinal)
  223.                 {
  224.                     break;
  225.                 }
  226.             }
  227.         }
  228.  
  229.         public void Teste()
  230.         {
  231.             moveX = blocoFinal.X - blocoInicial.X;
  232.             moveY = blocoFinal.Y - blocoInicial.Y;
  233.  
  234.             TracarCaminho(moveX, moveY);
  235.         }
  236.  
  237.         public void Maze(int nivel)
  238.         {
  239.             for (int n = 0; n < nivel; n++)
  240.             {
  241.                 if (n + 1 == nivel)
  242.                 {
  243.                     moveX = blocoFinal.X - walker.X;
  244.                     listBox1.Items.Add("moveX: " + moveX);
  245.                     moveY = blocoFinal.Y - walker.Y;
  246.                     listBox1.Items.Add("moveY: " + moveY);
  247.                     TracarCaminho(moveX, moveY);
  248.                     break;
  249.                 }
  250.  
  251.             RANDOM_X:
  252.                 moveX = rnd.Next(1 - walker.X, size - 1 - walker.X);
  253.                 if (moveX == 0 || walker.X + moveX == blocoFinal.X)
  254.                     goto RANDOM_X;
  255.                 listBox1.Items.Add("random: " + moveX);
  256.  
  257.             RANDOM_Y:
  258.                 moveY = rnd.Next(1 - walker.Y, size - 1 - walker.Y);
  259.                 if (moveY == 0 || walker.Y + moveY == blocoFinal.Y)
  260.                     goto RANDOM_Y;
  261.                 listBox1.Items.Add("random: " + moveY);
  262.                 TracarCaminho(moveX, moveY);
  263.             }
  264.         }
  265.  
  266.         public void MauriciosWay()
  267.         {
  268.             for (int k = 0; k < 5; k++)
  269.             {
  270.                 idVizinhos();
  271.  
  272.                 if (Neighbor[1] == new Point(size, size) && Neighbor[2] == new Point(size, size) && Neighbor[3] == new Point(size, size))
  273.                     walker = Neighbor[0];
  274.                 else if (Neighbor[2] == new Point(size, size) && Neighbor[3] == new Point(size, size))
  275.                     walker = Neighbor[rnd.Next(2)];
  276.                 else if (Neighbor[3] == new Point(size, size))
  277.                     walker = Neighbor[rnd.Next(3)];
  278.                 else
  279.                     walker = Neighbor[rnd.Next(4)];
  280.  
  281.                 //walker = Neighbor[rnd.Next(4)];
  282.                 Path[pathCont] = walker;
  283.                 LED[walker.X, walker.Y].BackColor = Color.Red;
  284.                 bloco[walker.X, walker.Y] = true;
  285.  
  286.                 for (neighborCont = 0; neighborCont < 4; neighborCont++)
  287.                 {
  288.                     Neighbor[neighborCont] = new Point(size, size);
  289.                 }
  290.             }
  291.  
  292.  
  293.             moveX = blocoFinal.X - walker.X;
  294.             listBox1.Items.Add("moveX: " + moveX);
  295.             moveY = blocoFinal.Y - walker.Y;
  296.             listBox1.Items.Add("moveY: " + moveY);
  297.             TracarCaminho(moveX, moveY);
  298.  
  299.         }
  300.  
  301.         public void A_Estrela()
  302.         {
  303.  
  304.             Atual = walker;
  305.  
  306.             while (Atual != blocoFinal)
  307.             {
  308.                 LED[Atual.X, Atual.Y].BackColor = Color.Red;
  309.  
  310.                 for (int k = 0; k < 4; k++)
  311.                     Vizinho[k] = 100;
  312.  
  313.                 if (Atual.Y - 1 >= 0)
  314.                 {
  315.                     for (int k = 0; k < 64; k++)
  316.                         if (Fechada[k] == new Point(Atual.X, Atual.Y - 1))
  317.                             break;
  318.                     Vizinho[0] = Math.Abs((Atual.X) - blocoFinal.X) + Math.Abs((Atual.Y - 1) - blocoFinal.Y);
  319.                 }
  320.  
  321.                 if (Atual.X + 1 <= size - 1)
  322.                 {
  323.                     for (int k = 0; k < 64; k++)
  324.                         if (Fechada[k] == new Point(Atual.X + 1, Atual.Y))
  325.                             break;
  326.                     Vizinho[1] = Math.Abs((Atual.X + 1) - blocoFinal.X) + Math.Abs((Atual.Y) - blocoFinal.Y);
  327.                 }
  328.  
  329.                 if (Atual.Y + 1 <= size - 1)
  330.                 {
  331.                     for (int k = 0; k < 64; k++)
  332.                         if (Fechada[k] == new Point(Atual.X, Atual.Y + 1))
  333.                             break;
  334.                     Vizinho[2] = Math.Abs((Atual.X) - blocoFinal.X) + Math.Abs((Atual.Y + 1) - blocoFinal.Y);
  335.                 }
  336.  
  337.                 if (Atual.X - 1 >= 0)
  338.                 {
  339.                     for (int k = 0; k < 64; k++)
  340.                         if (Fechada[k] == new Point(Atual.X - 1, Atual.Y))
  341.                             break;
  342.                     Vizinho[3] = Math.Abs((Atual.X - 1) - blocoFinal.X) + Math.Abs((Atual.Y) - blocoFinal.Y);
  343.                 }
  344.  
  345.  
  346.                 int Near = Math.Min(Math.Min(Vizinho[0], Vizinho[1]), Math.Min(Vizinho[2], Vizinho[3]));
  347.  
  348.                 Fechada[fechadaCont] = Atual;
  349.                 fechadaCont++;
  350.  
  351.                 if (Near == Vizinho[0])
  352.                     Atual = new Point(Atual.X, Atual.Y - 1);
  353.                 else if (Near == Vizinho[1])
  354.                     Atual = new Point(Atual.X + 1, Atual.Y);
  355.                 else if (Near == Vizinho[2])
  356.                     Atual = new Point(Atual.X, Atual.Y + 1);
  357.                 else if (Near == Vizinho[3])
  358.                     Atual = new Point(Atual.X - 1, Atual.Y);
  359.             }
  360.  
  361.         }
  362.  
  363.         public void TracarCaminho(int moveX, int moveY)
  364.         {
  365.             if (moveX > 0)//CASO MOVIMENTO SEJA PARA A DIREITA
  366.             {
  367.                 for (int k = 0; k < moveX; k++)//ANDA N CASAS NO EIXO X
  368.                 {
  369.                     walker.X++;
  370.                     LED[walker.X, walker.Y].BackColor = Color.Red;
  371.                     bloco[walker.X, walker.Y] = true;
  372.                     Path[pathCont] = walker;
  373.                     pathCont++;
  374.                 }
  375.             }
  376.             else if (moveX < 0)//CASO MOVIMENTO SEJA PARA A ESQUERDA
  377.             {
  378.                 for (int k = 0; k > moveX; k--)//ANDA N CASAS NO EIXO X
  379.                 {
  380.                     walker.X--;
  381.                     LED[walker.X, walker.Y].BackColor = Color.Red;
  382.                     bloco[walker.X, walker.Y] = true;
  383.                     Path[pathCont] = walker;
  384.                     pathCont++;
  385.                 }
  386.             }
  387.  
  388.             if (moveY > 0)//CASO MOVIMENTO SEJA PARA BAIXO
  389.             {
  390.                 for (int k = 0; k < moveY; k++)//ANDA N CASAS NO EIXO Y
  391.                 {
  392.                     walker.Y++;
  393.                     LED[walker.X, walker.Y].BackColor = Color.Red;
  394.                     bloco[walker.X, walker.Y] = true;
  395.                     Path[pathCont] = walker;
  396.                     pathCont++;
  397.                 }
  398.             }
  399.             else if (moveY < 0)//CASO MOVIMENTO SEJA PARA CIMA
  400.             {
  401.                 for (int k = 0; k > moveY; k--)//ANDA N CASAS NO EIXO Y
  402.                 {
  403.                     walker.Y--;
  404.                     LED[walker.X, walker.Y].BackColor = Color.Red;
  405.                     bloco[walker.X, walker.Y] = true;
  406.                     Path[pathCont] = walker;
  407.                     pathCont++;
  408.                 }
  409.             }
  410.         }
  411.  
  412.         public void idVizinhos()
  413.         {
  414.             neighborCont = 0;
  415.  
  416.             if (walker.X + 1 <= size - 1)
  417.             {
  418.                 if (!bloco[walker.X + 1, walker.Y])
  419.                 {
  420.                     Neighbor[neighborCont] = new Point(walker.X + 1, walker.Y);
  421.                     neighborCont++;
  422.                 }
  423.             }
  424.  
  425.             if (walker.X - 1 >= 0)
  426.             {
  427.                 if (!bloco[walker.X - 1, walker.Y])
  428.                 {
  429.                     Neighbor[neighborCont] = new Point(walker.X - 1, walker.Y);
  430.                     neighborCont++;
  431.                 }
  432.             }
  433.  
  434.             if (walker.Y + 1 <= size - 1)
  435.             {
  436.                 if (!bloco[walker.X, walker.Y + 1])
  437.                 {
  438.                     Neighbor[neighborCont] = new Point(walker.X, walker.Y + 1);
  439.                     neighborCont++;
  440.                 }
  441.             }
  442.  
  443.             if (walker.Y - 1 >= 0)
  444.             {
  445.                 if (!bloco[walker.X, walker.Y - 1])
  446.                 {
  447.                     Neighbor[neighborCont] = new Point(walker.X, walker.Y - 1);
  448.                     neighborCont++;
  449.                 }
  450.             }
  451.  
  452.             neighborCont = 0;
  453.         }
  454.  
  455.         private void numChangeSize_ValueChanged(object sender, EventArgs e)
  456.         {
  457.             for (j = 0; j < size; j++)
  458.             {
  459.                 for (i = 0; i < size; i++)
  460.                 {
  461.                     LED[i, j].BackColor = Color.White;
  462.                 }
  463.             }
  464.             size = (int)numChangeSize.Value;
  465.             AtualizarSize();
  466.         }
  467.  
  468.         public void AtualizarSize()
  469.         {
  470.             for (j = 0; j < size; j++)
  471.             {
  472.                 for (i = 0; i < size; i++)
  473.                 {
  474.                     LED[i, j].Width = (int)((560 - size + 1) / size);
  475.                     LED[i, j].Height = (int)((560 - size + 1) / size);
  476.                     LED[i, j].Left = (int)(30 + i * ((560 - size + 1) / size + 1));
  477.                     LED[i, j].Top = (int)(50 + j * ((560 - size + 1) / size + 1));
  478.  
  479.                     LED[i, j].BackColor = Color.LightGray;//COR DEFAULT DOS LEDS
  480.  
  481.                     bloco[i, j] = false;
  482.                 }
  483.             }
  484.         }
  485.  
  486.         private void chkShowPath_CheckedChanged(object sender, EventArgs e)
  487.         {
  488.             for (j = 0; j < size; j++)
  489.             {
  490.                 for (i = 0; i < size; i++)
  491.                 {
  492.                     if (bloco[i, j] && blocoInicial != new Point(i, j) && blocoInicial != new Point(i, j) && blocoFinal != new Point(i, j) && blocoFinal != new Point(i, j))
  493.                     {
  494.                         if (chkShowPath.Checked)
  495.                         {
  496.                             LED[i, j].BackColor = Color.Red;
  497.                         }
  498.                         else
  499.                         {
  500.                             LED[i, j].BackColor = Color.LightGray;
  501.                         }
  502.                     }
  503.                 }
  504.             }
  505.         }
  506.  
  507.         private void frmMazeBot_KeyDown(object sender, KeyEventArgs e)
  508.         {
  509.             if (e.KeyCode == Keys.W)
  510.             {
  511.                 switch (direcao)
  512.                 {
  513.                     case "left":
  514.                         Spin(90);
  515.                         break;
  516.                     case "down":
  517.                         Spin(180);
  518.                         break;
  519.                     case "right":
  520.                         Spin(-90);
  521.                         break;
  522.                 }
  523.                 GoForward();
  524.             }
  525.  
  526.             if (e.KeyCode == Keys.A)
  527.             {
  528.                 switch (direcao)
  529.                 {
  530.                     case "down":
  531.                         Spin(90);
  532.                         break;
  533.                     case "right":
  534.                         Spin(180);
  535.                         break;
  536.                     case "up":
  537.                         Spin(-90);
  538.                         break;
  539.                 }
  540.                 GoForward();
  541.             }
  542.  
  543.             if (e.KeyCode == Keys.D)
  544.             {
  545.                 switch (direcao)
  546.                 {
  547.                     case "up":
  548.                         Spin(90);
  549.                         break;
  550.                     case "left":
  551.                         Spin(180);
  552.                         break;
  553.                     case "down":
  554.                         Spin(-90);
  555.                         break;
  556.                 }
  557.                 GoForward();
  558.             }
  559.  
  560.             if (e.KeyCode == Keys.S)
  561.             {
  562.                 switch (direcao)
  563.                 {
  564.                     case "right":
  565.                         Spin(90);
  566.                         break;
  567.                     case "up":
  568.                         Spin(180);
  569.                         break;
  570.                     case "left":
  571.                         Spin(-90);
  572.                         break;
  573.                 }
  574.                 GoForward();
  575.             }
  576.  
  577.         }
  578.         public void GoForward()
  579.         {
  580.             switch (direcao)
  581.             {
  582.                 case "up":
  583.                     Atual.Y--;
  584.                     break;
  585.                 case "down":
  586.                     Atual.Y++;
  587.                     break;
  588.                 case "left":
  589.                     Atual.X--;
  590.                     break;
  591.                 case "right":
  592.                     Atual.X++;
  593.                     break;
  594.             }
  595.  
  596.             try
  597.             {
  598.                 lblBot.Left = LED[Atual.X, Atual.Y].Left + (LED[Atual.X, Atual.Y].Width - lblBot.Width) / 2;
  599.                 lblBot.Top = LED[Atual.X, Atual.Y].Top + (LED[Atual.X, Atual.Y].Height - lblBot.Height) / 2;
  600.             }
  601.             catch (Exception)
  602.             {
  603.  
  604.             }
  605.  
  606.             if (LED[Atual.X, Atual.Y].BackColor == Color.DimGray)
  607.             {
  608.                 GameOverTetris();
  609.             }
  610.             else if (Atual == blocoFinal)
  611.             {
  612.                 YouWin();
  613.             }
  614.         }
  615.  
  616.         public void Spin(int graus)
  617.         {
  618.             if ((direcao == "up" && graus == -90) ||
  619.                 (direcao == "right" && graus == 180) ||
  620.                 (direcao == "down" && graus == 90))//left
  621.             {
  622.                 lblBot.Text = "<";
  623.                 direcao = "left";
  624.             }
  625.             else if ((direcao == "up" && graus == 90) ||
  626.                 (direcao == "left" && graus == 180) ||
  627.                 (direcao == "down" && graus == -90))//right
  628.             {
  629.                 lblBot.Text = ">";
  630.                 direcao = "right";
  631.             }
  632.             else if ((direcao == "right" && graus == -90) ||
  633.                 (direcao == "down" && graus == 180) ||
  634.                 (direcao == "left" && graus == 90))//up
  635.             {
  636.                 lblBot.Text = "^";
  637.                 direcao = "up";
  638.             }
  639.             else if ((direcao == "left" && graus == -90) ||
  640.                 (direcao == "up" && graus == 180) ||
  641.                 (direcao == "right" && graus == 90))//down
  642.             {
  643.                 lblBot.Text = "v";
  644.                 direcao = "down";
  645.             }
  646.         }
  647.  
  648.         public void GameOverTetris()
  649.         {
  650.             Tocar("LA", 100);
  651.             Tocar("FA", 100);
  652.             Tocar("SOL", 100);
  653.             Tocar("RE#", 100);
  654.             Tocar("FA", 100);
  655.             Tocar("RE", 100);
  656.             Tocar("MI", 100);
  657.             Tocar("DO#", 100);
  658.             Tocar("RE#", 100);
  659.  
  660.             for (int j = size - 1; j >= 0; j--)
  661.             {
  662.                 for (int i = 0; i < size; i++)
  663.                 {
  664.                     int cor = rnd.Next(size - 1);
  665.                     switch (cor)
  666.                     {
  667.                         case 0:
  668.                             LED[i, j].BackColor = Color.Blue;
  669.                             break;
  670.                         case 1:
  671.                             LED[i, j].BackColor = Color.Green;
  672.                             break;
  673.                         case 2:
  674.                             LED[i, j].BackColor = Color.Red;
  675.                             break;
  676.                         case 3:
  677.                             LED[i, j].BackColor = Color.Orange;
  678.                             break;
  679.                         case 4:
  680.                             LED[i, j].BackColor = Color.Yellow;
  681.                             break;
  682.                         case 5:
  683.                             LED[i, j].BackColor = Color.Purple;
  684.                             break;
  685.                         case 6:
  686.                             LED[i, j].BackColor = Color.LightBlue;
  687.                             break;
  688.                     }
  689.                 }
  690.             }
  691.         }
  692.  
  693.         public void YouWin()
  694.         {
  695.             Tocar("RE#", 100);
  696.             Tocar("SOL#", 100);
  697.             Tocar("DO2", 100);
  698.             Tocar("SOL#", 100);
  699.             Tocar("DO2", 100);
  700.             Tocar("RE#2", 100);
  701.         }
  702.  
  703.         public void Tocar(string nota, int tempo)
  704.         {
  705.             switch (nota)
  706.             {
  707.                 case "DO":
  708.                     Console.Beep(1046, tempo);
  709.                     break;
  710.                 case "DO#":
  711.                     Console.Beep(1108, tempo);
  712.                     break;
  713.                 case "RE":
  714.                     Console.Beep(1174, tempo);
  715.                     break;
  716.                 case "RE#":
  717.                     Console.Beep(1244, tempo);
  718.                     break;
  719.                 case "MI":
  720.                     Console.Beep(1318, tempo);
  721.                     break;
  722.                 case "FA":
  723.                     Console.Beep(1396, tempo);
  724.                     break;
  725.                 case "FA#":
  726.                     Console.Beep(1479, tempo);
  727.                     break;
  728.                 case "SOL":
  729.                     Console.Beep(1567, tempo);
  730.                     break;
  731.                 case "SOL#":
  732.                     Console.Beep(1661, tempo);
  733.                     break;
  734.                 case "LA":
  735.                     Console.Beep(1760, tempo);
  736.                     break;
  737.                 case "LA#":
  738.                     Console.Beep(1864, tempo);
  739.                     break;
  740.                 case "SI":
  741.                     Console.Beep(1975, tempo);
  742.                     break;
  743.                 case "DO2":
  744.                     Console.Beep(2093, tempo);
  745.                     break;
  746.                 case "DO#2":
  747.                     Console.Beep(2217, tempo);
  748.                     break;
  749.                 case "RE2":
  750.                     Console.Beep(2349, tempo);
  751.                     break;
  752.                 case "RE#2":
  753.                     Console.Beep(2489, tempo);
  754.                     break;
  755.             }
  756.         }
  757.  
  758.         private void btnGo_Click(object sender, EventArgs e)
  759.         {
  760.             movimento = txtMovimentos.Text.ToUpper();
  761.             timer1.Start();
  762.  
  763.         }
  764.  
  765.         private void timer1_Tick(object sender, EventArgs e)
  766.         {
  767.             switch (movimento[k])
  768.             {
  769.                 case 'U':
  770.                     switch (direcao)
  771.                     {
  772.                         case "left":
  773.                             Spin(90);
  774.                             break;
  775.                         case "down":
  776.                             Spin(180);
  777.                             break;
  778.                         case "right":
  779.                             Spin(-90);
  780.                             break;
  781.                     }
  782.                     GoForward();
  783.                     break;
  784.                 case 'J':
  785.                     switch (direcao)
  786.                     {
  787.                         case "right":
  788.                             Spin(90);
  789.                             break;
  790.                         case "up":
  791.                             Spin(180);
  792.                             break;
  793.                         case "left":
  794.                             Spin(-90);
  795.                             break;
  796.                     }
  797.                     GoForward();
  798.                     break;
  799.                 case 'H':
  800.                     switch (direcao)
  801.                     {
  802.                         case "down":
  803.                             Spin(90);
  804.                             break;
  805.                         case "right":
  806.                             Spin(180);
  807.                             break;
  808.                         case "up":
  809.                             Spin(-90);
  810.                             break;
  811.                     }
  812.                     GoForward();
  813.                     break;
  814.                 case 'K':
  815.                     switch (direcao)
  816.                     {
  817.                         case "up":
  818.                             Spin(90);
  819.                             break;
  820.                         case "left":
  821.                             Spin(180);
  822.                             break;
  823.                         case "down":
  824.                             Spin(-90);
  825.                             break;
  826.                     }
  827.                     GoForward();
  828.                     break;
  829.             }
  830.  
  831.             k++;
  832.  
  833.             if (Atual == blocoFinal)
  834.             {
  835.                 timer1.Stop();
  836.             }
  837.         }
  838.     }
  839. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement