繁體
|
簡體
Sclub交友聊天~加入聊天室當版主
(檢舉)
分享
新浪微博
QQ空间
人人网
腾讯微博
Facebook
Google+
Plurk
Twitter
Line
標題:
小貓貓俄羅斯方塊 ver0.7
[打印本頁]
作者:
Smallcat
時間:
2019-5-12 15:20
標題:
小貓貓俄羅斯方塊 ver0.7
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 = "向下";
}
}
}
複製代碼
歡迎光臨 小貓貓大聯盟!幻與想的境界\(0w0)/ (http://smallcat.utmall.com/)
Powered by Discuz! 7.2