免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 發帖

小貓貓俄羅斯方塊 ver0.7

  1. public partial class Form1 : Form
  2.     {
  3.         int[,] pos;
  4.         Label[,] loc;
  5.         int type1;

  6.         public struct poi
  7.         {
  8.             public int x;
  9.             public int y;

  10.             public poi(int a,int b)
  11.             {
  12.                 x = a;
  13.                 y = b;
  14.             }
  15.         };

  16.         poi[] mov = new poi[4];

  17.         public Form1()
  18.         {
  19.             InitializeComponent();
  20.             pos = new int[10, 20];
  21.             loc = new Label[10, 20];
  22.             for (int i = 0; i < 9; i++)
  23.             {
  24.                 for (int j = 0; j < 19; j++)
  25.                 {
  26.                     loc[i, j] = new Label();
  27.                     loc[i, j].Width = 30;
  28.                     loc[i, j].Height = 30;
  29.                     loc[i, j].Left = 30*i;
  30.                     loc[i, j].Top = 30*j;
  31.                     loc[i, j].BorderStyle = BorderStyle.FixedSingle;
  32.                     this.Controls.Add(loc[i, j]);
  33.                 }
  34.             }
  35.             this.WindowState = FormWindowState.Maximized;
  36.         }

  37.         void re()
  38.         {
  39.             for (int i = 0; i < 9; i++)   //全圖重新繪製
  40.             {
  41.                 for (int j = 0; j < 19; j++)
  42.                 {
  43.                     if (pos[i, j] == 1)
  44.                     {
  45.                         loc[i, j].BackColor = Color.Black;
  46.                     }
  47.                     else
  48.                     {
  49.                         loc[i, j].BackColor = Color.White;
  50.                     }
  51.                 }
  52.             }
  53.         }

  54.         private Label cell(int x,int y)
  55.         {
  56.             Label p = new Label();

  57.             
  58.             return p;
  59.         }


  60.         private void Form1_Load(object sender, EventArgs e)
  61.         {

  62.         }

  63.         private void timer1_Tick(object sender, EventArgs e)   
  64.         {
  65.             bool leg = true;
  66.             switch (type1)
  67.             {
  68.                 //欲往下移動之位置為最底或已有物
  69.                 //停止動作並呼喚新掉落物
  70.                 case 0:
  71.                     for (int i = 0; i < 4; i++)
  72.                     {
  73.                         if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  74.                         {
  75.                             timer2.Enabled = true;
  76.                             leg = false;

  77.                             break;
  78.                         }
  79.                     }
  80.                     break;
  81.                 case 1:
  82.                     for (int i = 1; i < 4; i++)
  83.                     {
  84.                         if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  85.                         {
  86.                             timer2.Enabled = true;
  87.                             leg = false;

  88.                             break;
  89.                         }
  90.                     }
  91.                     break;
  92.                 case 2:
  93.                     for (int i = 1; i < 4; i++)
  94.                     {
  95.                         if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  96.                         {
  97.                             timer2.Enabled = true;
  98.                             leg = false;

  99.                             break;
  100.                         }
  101.                     }
  102.                     break;
  103.                 case 3:
  104.                     for (int i = 2; i < 4; i++)
  105.                     {
  106.                         if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  107.                         {
  108.                             timer2.Enabled = true;
  109.                             leg = false;

  110.                             break;
  111.                         }
  112.                     }
  113.                     break;
  114.                 case 4:
  115.                     for (int i = 1; i < 4; i++)
  116.                     {
  117.                         if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  118.                         {
  119.                             timer2.Enabled = true;
  120.                             leg = false;

  121.                             break;
  122.                         }
  123.                     }
  124.                     break;
  125.                 case 5:
  126.                     for (int i = 1; i < 4; i++)
  127.                     {
  128.                         if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  129.                         {
  130.                             timer2.Enabled = true;
  131.                             leg = false;

  132.                             break;
  133.                         }
  134.                     }
  135.                     break;
  136.                 case 6:
  137.                     for (int i = 0; i < 4; i++)
  138.                     {
  139.                         if (i != 1)
  140.                         {
  141.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  142.                             {
  143.                                 timer2.Enabled = true;
  144.                                 leg = false;

  145.                                 break;
  146.                             }
  147.                         }
  148.                     }
  149.                     break;
  150.             }

  151.             for (int i = 0; i < 4; i++)     //隨時間自動下降
  152.             {
  153.                 if (leg)
  154.                 {
  155.                     pos[mov[i].x, mov[i].y] = 0;
  156.                     mov[i].y = mov[i].y + 1;
  157.                 }
  158.             }

  159.             for(int i = 0; i < 4; i++)
  160.             {
  161.                 if (leg)
  162.                 {
  163.                     pos[mov[i].x, mov[i].y] = 1;
  164.                 }
  165.             }

  166.             re();//重新繪製
  167.         }

  168.         private void timer2_Tick(object sender, EventArgs e)   //製造新方塊
  169.         {
  170.             Random type = new Random();
  171.             type1 = type.Next(0, 7);

  172.             switch (type1)
  173.             {
  174.                 case 0:  //四格一排
  175.                     for(int i = 0; i < 4; i++)
  176.                     {
  177.                         mov[i].x = 4 + i;
  178.                         mov[i].y = 0;
  179.                         pos[mov[i].x, mov[i].y] = 1;
  180.                     }
  181.                     break;
  182.                 case 1:  //上左ㄧ下三
  183.                     mov[0].x = 3;
  184.                     mov[0].y = 0;
  185.                     pos[3, 0] = 1;
  186.                     for(int i = 1; i < 4; i++)
  187.                     {
  188.                         mov[i].x = 2 + i;
  189.                         mov[i].y = 1;
  190.                         pos[mov[i].x, mov[i].y] = 1;
  191.                     }
  192.                     break;
  193.                 case 2:  //上右一下三
  194.                     mov[0].x = 5;
  195.                     mov[0].y = 0;
  196.                     pos[5, 0] = 1;
  197.                     for (int i = 1; i < 4; i++)
  198.                     {
  199.                         mov[i].x = 2 + i;
  200.                         mov[i].y = 1;
  201.                         pos[mov[i].x, mov[i].y] = 1;
  202.                     }
  203.                     break;
  204.                 case 3:  //2x2
  205.                     for (int i = 0; i < 2; i++)            //12
  206.                     {                                      //34
  207.                         for(int j = 0; j < 2; j++)
  208.                         {
  209.                             mov[i*2 + j].x = 4 + j;
  210.                             mov[i*2 + j].y = i;
  211.                             pos[mov[i*2 + j].x, mov[i*2 + j].y] = 1;
  212.                         }
  213.                     }
  214.                     break;
  215.                 case 4:  //上右二下左二
  216.                     for (int i = 0; i < 2; i++)            // 12
  217.                     {                                      //34
  218.                         for (int j = 0; j < 2; j++)
  219.                         {
  220.                             mov[i*2 + j].x = 4 - i + j;
  221.                             mov[i*2 + j].y = i;
  222.                             pos[mov[i*2 + j].x, mov[i*2 + j].y] = 1;
  223.                         }
  224.                     }
  225.                     break;
  226.                 case 5:  //上中一下三
  227.                     mov[0].x = 4;                          // 1
  228.                     mov[0].y = 0;                          //234
  229.                     pos[3, 0] = 1;
  230.                     for (int i = 1; i < 4; i++)
  231.                     {
  232.                         mov[i].x = 3 + i;
  233.                         mov[i].y = 1;
  234.                         pos[mov[i].x, mov[i].y] = 1;
  235.                     }
  236.                     break;
  237.                 case 6:  //上左二下右二
  238.                     for (int i = 0; i < 2; i++)            //12
  239.                     {                                      // 34
  240.                         for (int j = 0; j < 2; j++)
  241.                         {
  242.                             mov[i*2 + j].x = 4 + i + j;
  243.                             mov[i*2 + j].y = i;
  244.                             pos[mov[i*2 + j].x, mov[i*2 + j].y] = 1;
  245.                         }
  246.                     }
  247.                     break;
  248.                 default:
  249.                     break;
  250.             }

  251.             timer2.Enabled = false;
  252.         }

  253.         private void Form1_KeyDown(object sender, KeyEventArgs e)
  254.         {
  255.             bool leg = true;
  256.             if (e.KeyCode == Keys.A)   //往左
  257.             {
  258.                 switch (type1)         //欲往左移動之位置為邊界或已有物
  259.                 {
  260.                     case 0:
  261.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1)
  262.                         {
  263.                             leg = false;
  264.                         }
  265.                         break;
  266.                     case 1:
  267.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1 || mov[1].x == 0 || pos[mov[1].x - 1,mov[1].y] == 1)
  268.                         {
  269.                             leg = false;
  270.                         }
  271.                         break;
  272.                     case 2:
  273.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1 || mov[1].x == 0 || pos[mov[1].x - 1, mov[1].y] == 1)
  274.                         {
  275.                             leg = false;
  276.                         }
  277.                         break;
  278.                     case 3:
  279.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1 || mov[2].x == 0 || pos[mov[2].x - 1, mov[2].y] == 1)
  280.                         {
  281.                             leg = false;
  282.                         }
  283.                         break;
  284.                     case 4:
  285.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1 || mov[2].x == 0 || pos[mov[2].x - 1, mov[2].y] == 1)
  286.                         {
  287.                             leg = false;
  288.                         }
  289.                         break;
  290.                     case 5:
  291.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1 || mov[1].x == 0 || pos[mov[1].x - 1, mov[1].y] == 1)
  292.                         {
  293.                             leg = false;
  294.                         }
  295.                         break;
  296.                     case 6:
  297.                         if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1 || mov[2].x == 0 || pos[mov[2].x - 1, mov[2].y] == 1)
  298.                         {
  299.                             leg = false;
  300.                         }
  301.                         break;
  302.                     default:
  303.                         break;
  304.                 }
  305.                 for (int i = 0; i < 4; i++)
  306.                 {
  307.                     if (leg)
  308.                     {
  309.                         pos[mov[i].x, mov[i].y] = 0;
  310.                         mov[i].x = mov[i].x - 1;
  311.                     }
  312.                 }
  313.                 for(int i = 0; i < 4; i++)
  314.                 {
  315.                     if (leg)
  316.                     {
  317.                         pos[mov[i].x, mov[i].y] = 1;
  318.                     }
  319.                 }
  320.                 re();
  321.                 label1.Text = "向左";         }
  322.             if (e.KeyCode == Keys.D)   //向右
  323.             {
  324.                 switch (type1)         //欲往右移動之位置為邊界或已有物
  325.                 {
  326.                     case 0:
  327.                         if (mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  328.                         {
  329.                             leg = false;
  330.                         }
  331.                         break;
  332.                     case 1:
  333.                         if (mov[0].x == 8 || pos[mov[0].x + 1, mov[0].y] == 1 || mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  334.                         {
  335.                             leg = false;
  336.                         }
  337.                         break;
  338.                     case 2:
  339.                         if (mov[0].x == 8 || pos[mov[0].x + 1, mov[0].y] == 1 || mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  340.                         {
  341.                             leg = false;
  342.                         }
  343.                         break;
  344.                     case 3:
  345.                         if (mov[1].x == 8 || pos[mov[1].x + 1, mov[1].y] == 1 || mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  346.                         {
  347.                             leg = false;
  348.                         }
  349.                         break;
  350.                     case 4:
  351.                         if (mov[1].x == 8 || pos[mov[1].x + 1, mov[1].y] == 1 || mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  352.                         {
  353.                             leg = false;
  354.                         }
  355.                         break;
  356.                     case 5:
  357.                         if (mov[0].x == 8 || pos[mov[0].x + 1, mov[0].y] == 1 || mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  358.                         {
  359.                             leg = false;
  360.                         }
  361.                         break;
  362.                     case 6:
  363.                         if (mov[1].x == 8 || pos[mov[1].x + 1, mov[1].y] == 1 || mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
  364.                         {
  365.                             leg = false;
  366.                         }
  367.                         break;
  368.                     default:
  369.                         break;
  370.                 }
  371.                 for (int i = 3; i >= 0; i--)
  372.                 {
  373.                     if (leg)
  374.                     {
  375.                         pos[mov[i].x, mov[i].y] = 0;
  376.                         mov[i].x = mov[i].x + 1;
  377.                     }
  378.                 }
  379.                 for (int i = 3; i >= 0; i--)
  380.                 {
  381.                     if (leg)
  382.                     {
  383.                         pos[mov[i].x, mov[i].y] = 1;
  384.                     }
  385.                 }
  386.                 re();
  387.                 label1.Text = "向右";
  388.             }
  389.             if (e.KeyCode == Keys.S)
  390.             {
  391.                 switch (type1)
  392.                 {
  393.                     //欲往下移動之位置為最底或已有物
  394.                     case 0:
  395.                         for (int i = 0; i < 4; i++)
  396.                         {
  397.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  398.                             {
  399.                                 timer2.Enabled = true;
  400.                                 leg = false;

  401.                                 break;
  402.                             }
  403.                         }
  404.                         break;
  405.                     case 1:
  406.                         for (int i = 1; i < 4; i++)
  407.                         {
  408.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  409.                             {
  410.                                 timer2.Enabled = true;
  411.                                 leg = false;

  412.                                 break;
  413.                             }
  414.                         }
  415.                         break;
  416.                     case 2:
  417.                         for (int i = 1; i < 4; i++)
  418.                         {
  419.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  420.                             {
  421.                                 timer2.Enabled = true;
  422.                                 leg = false;

  423.                                 break;
  424.                             }
  425.                         }
  426.                         break;
  427.                     case 3:
  428.                         for (int i = 2; i < 4; i++)
  429.                         {
  430.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  431.                             {
  432.                                 timer2.Enabled = true;
  433.                                 leg = false;

  434.                                 break;
  435.                             }
  436.                         }
  437.                         break;
  438.                     case 4:
  439.                         for (int i = 1; i < 4; i++)
  440.                         {
  441.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  442.                             {
  443.                                 timer2.Enabled = true;
  444.                                 leg = false;

  445.                                 break;
  446.                             }
  447.                         }
  448.                         break;
  449.                     case 5:
  450.                         for (int i = 1; i < 4; i++)
  451.                         {
  452.                             if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  453.                             {
  454.                                 timer2.Enabled = true;
  455.                                 leg = false;

  456.                                 break;
  457.                             }
  458.                         }
  459.                         break;
  460.                     case 6:
  461.                         for (int i = 0; i < 4; i++)
  462.                         {
  463.                             if (i != 1)
  464.                             {
  465.                                 if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
  466.                                 {
  467.                                     timer2.Enabled = true;
  468.                                     leg = false;

  469.                                     break;
  470.                                 }
  471.                             }
  472.                         }
  473.                         break;
  474.                 }
  475.                 for (int i = 0; i < 4; i++)
  476.                 {
  477.                     if (leg)
  478.                     {
  479.                         pos[mov[i].x, mov[i].y] = 0;
  480.                         mov[i].y = mov[i].y + 1;
  481.                     }
  482.                 }

  483.                 for(int i = 0; i < 4; i++)
  484.                 {
  485.                     if (leg)
  486.                     {
  487.                         pos[mov[i].x, mov[i].y] = 1;
  488.                     }
  489.                 }
  490.                 re();
  491.                 label1.Text = "向下";
  492.             }
  493.         }
  494.     }
複製代碼
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

小貓貓2017了喔!
(點一下康娜醬傳送到小貓貓2017大事記)

返回列表