- public partial class Form1 : Form
- {
- int[,] pos;
- Label[,] loc;
- int type1;
- public struct poi
- {
- public int x;
- public int y;
- public poi(int a,int b)
- {
- x = a;
- y = b;
- }
- };
- poi[] mov = new poi[4];
- public Form1()
- {
- InitializeComponent();
- pos = new int[10, 20];
- loc = new Label[10, 20];
- for (int i = 0; i < 9; i++)
- {
- for (int j = 0; j < 19; j++)
- {
- loc[i, j] = new Label();
- loc[i, j].Width = 30;
- loc[i, j].Height = 30;
- loc[i, j].Left = 30*i;
- loc[i, j].Top = 30*j;
- loc[i, j].BorderStyle = BorderStyle.FixedSingle;
- this.Controls.Add(loc[i, j]);
- }
- }
- this.WindowState = FormWindowState.Maximized;
- }
- void re()
- {
- for (int i = 0; i < 9; i++) //全圖重新繪製
- {
- for (int j = 0; j < 19; j++)
- {
- if (pos[i, j] == 1)
- {
- loc[i, j].BackColor = Color.Black;
- }
- else
- {
- loc[i, j].BackColor = Color.White;
- }
- }
- }
- }
- private Label cell(int x,int y)
- {
- Label p = new Label();
-
- return p;
- }
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- private void timer1_Tick(object sender, EventArgs e)
- {
- bool leg = true;
- switch (type1)
- {
- //欲往下移動之位置為最底或已有物
- //停止動作並呼喚新掉落物
- case 0:
- for (int i = 0; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 1:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 2:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 3:
- for (int i = 2; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 4:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 5:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 6:
- for (int i = 0; i < 4; i++)
- {
- if (i != 1)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- }
- break;
- }
- for (int i = 0; i < 4; i++) //隨時間自動下降
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 0;
- mov[i].y = mov[i].y + 1;
- }
- }
- for(int i = 0; i < 4; i++)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 1;
- }
- }
- re();//重新繪製
- }
- private void timer2_Tick(object sender, EventArgs e) //製造新方塊
- {
- Random type = new Random();
- type1 = type.Next(0, 7);
- switch (type1)
- {
- case 0: //四格一排
- for(int i = 0; i < 4; i++)
- {
- mov[i].x = 4 + i;
- mov[i].y = 0;
- pos[mov[i].x, mov[i].y] = 1;
- }
- break;
- case 1: //上左ㄧ下三
- mov[0].x = 3;
- mov[0].y = 0;
- pos[3, 0] = 1;
- for(int i = 1; i < 4; i++)
- {
- mov[i].x = 2 + i;
- mov[i].y = 1;
- pos[mov[i].x, mov[i].y] = 1;
- }
- break;
- case 2: //上右一下三
- mov[0].x = 5;
- mov[0].y = 0;
- pos[5, 0] = 1;
- for (int i = 1; i < 4; i++)
- {
- mov[i].x = 2 + i;
- mov[i].y = 1;
- pos[mov[i].x, mov[i].y] = 1;
- }
- break;
- case 3: //2x2
- for (int i = 0; i < 2; i++) //12
- { //34
- for(int j = 0; j < 2; j++)
- {
- mov[i*2 + j].x = 4 + j;
- mov[i*2 + j].y = i;
- pos[mov[i*2 + j].x, mov[i*2 + j].y] = 1;
- }
- }
- break;
- case 4: //上右二下左二
- for (int i = 0; i < 2; i++) // 12
- { //34
- for (int j = 0; j < 2; j++)
- {
- mov[i*2 + j].x = 4 - i + j;
- mov[i*2 + j].y = i;
- pos[mov[i*2 + j].x, mov[i*2 + j].y] = 1;
- }
- }
- break;
- case 5: //上中一下三
- mov[0].x = 4; // 1
- mov[0].y = 0; //234
- pos[3, 0] = 1;
- for (int i = 1; i < 4; i++)
- {
- mov[i].x = 3 + i;
- mov[i].y = 1;
- pos[mov[i].x, mov[i].y] = 1;
- }
- break;
- case 6: //上左二下右二
- for (int i = 0; i < 2; i++) //12
- { // 34
- for (int j = 0; j < 2; j++)
- {
- mov[i*2 + j].x = 4 + i + j;
- mov[i*2 + j].y = i;
- pos[mov[i*2 + j].x, mov[i*2 + j].y] = 1;
- }
- }
- break;
- default:
- break;
- }
- timer2.Enabled = false;
- }
- private void Form1_KeyDown(object sender, KeyEventArgs e)
- {
- bool leg = true;
- if (e.KeyCode == Keys.A) //往左
- {
- switch (type1) //欲往左移動之位置為邊界或已有物
- {
- case 0:
- if (mov[0].x == 0 || pos[mov[0].x - 1, mov[0].y] == 1)
- {
- leg = false;
- }
- break;
- case 1:
- 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)
- {
- leg = false;
- }
- break;
- case 2:
- 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)
- {
- leg = false;
- }
- break;
- case 3:
- 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)
- {
- leg = false;
- }
- break;
- case 4:
- 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)
- {
- leg = false;
- }
- break;
- case 5:
- 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)
- {
- leg = false;
- }
- break;
- case 6:
- 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)
- {
- leg = false;
- }
- break;
- default:
- break;
- }
- for (int i = 0; i < 4; i++)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 0;
- mov[i].x = mov[i].x - 1;
- }
- }
- for(int i = 0; i < 4; i++)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 1;
- }
- }
- re();
- label1.Text = "向左"; }
- if (e.KeyCode == Keys.D) //向右
- {
- switch (type1) //欲往右移動之位置為邊界或已有物
- {
- case 0:
- if (mov[3].x == 8 || pos[mov[3].x + 1, mov[3].y] == 1)
- {
- leg = false;
- }
- break;
- case 1:
- 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)
- {
- leg = false;
- }
- break;
- case 2:
- 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)
- {
- leg = false;
- }
- break;
- case 3:
- 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)
- {
- leg = false;
- }
- break;
- case 4:
- 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)
- {
- leg = false;
- }
- break;
- case 5:
- 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)
- {
- leg = false;
- }
- break;
- case 6:
- 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)
- {
- leg = false;
- }
- break;
- default:
- break;
- }
- for (int i = 3; i >= 0; i--)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 0;
- mov[i].x = mov[i].x + 1;
- }
- }
- for (int i = 3; i >= 0; i--)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 1;
- }
- }
- re();
- label1.Text = "向右";
- }
- if (e.KeyCode == Keys.S)
- {
- switch (type1)
- {
- //欲往下移動之位置為最底或已有物
- case 0:
- for (int i = 0; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 1:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 2:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 3:
- for (int i = 2; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 4:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 5:
- for (int i = 1; i < 4; i++)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- break;
- case 6:
- for (int i = 0; i < 4; i++)
- {
- if (i != 1)
- {
- if (mov[i].y == 18 || pos[mov[i].x, mov[i].y + 1] == 1)
- {
- timer2.Enabled = true;
- leg = false;
- break;
- }
- }
- }
- break;
- }
- for (int i = 0; i < 4; i++)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 0;
- mov[i].y = mov[i].y + 1;
- }
- }
- for(int i = 0; i < 4; i++)
- {
- if (leg)
- {
- pos[mov[i].x, mov[i].y] = 1;
- }
- }
- re();
- label1.Text = "向下";
- }
- }
- }
複製代碼 |