📄 block.cs
字号:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace BLOCK_HB
{
/// <summary>
///
/// </summary>
public class Block
{
private Point[] cakes=new Point[4];
private int shape;
private int rotateTimes;
public enum Direction{UP=1,DOWN,LEFT,RIGHT};
public void SetBlock(Point[] p)
{
for(int i=0;i<4;i++)
{
cakes[i]=p[i];
}
}
public int Shape
{
get{return shape;}
set
{
if(value<6)
shape=value;
else
throw new Exception();
}
}
public Point[] GetCakes()
{
return cakes;
}
//移动
public void Move(Block.Direction dir)
{
if(CanMove(dir))
{
int i=0;
switch(dir)
{
case Block.Direction.UP:
for(i=0;i<4;i++)
cakes[i].Y--;
break;
case Block.Direction.DOWN:
for(i=0;i<4;i++)
cakes[i].Y++;
break;
case Block.Direction.LEFT:
for(i=0;i<4;i++)
cakes[i].X--;
break;
case Block.Direction.RIGHT:
for(i=0;i<4;i++)
cakes[i].X++;
break;
}
}
}
//旋转
public void Rotate(Point[] cakes)
{
//if(CanRotate())
{
switch(shape)
{
case 0:
break;
case 1:
if(rotateTimes%2==0)
{
cakes[2].X-=2;
cakes[3].Y-=2;
}
if(rotateTimes%2==1)
{
cakes[2].X+=2;
cakes[3].Y+=2;
}
rotateTimes++;
break;
case 2:
if(rotateTimes%2==0)
{
cakes[3].X+=2;
cakes[3].Y-=1;
cakes[1].Y-=1;
}
if(rotateTimes%2==1)
{
cakes[3].X-=2;
cakes[3].Y+=1;
cakes[1].Y+=1;
}
rotateTimes++;
// return cakes;
break;
case 3:
if(rotateTimes%4==0)
{
cakes[1].Y+=2;
cakes[0].X+=2;
cakes[0].Y+=2;
}
if(rotateTimes%4==1)
{
cakes[0].X-=2;
cakes[0].Y+=2;
cakes[3].X-=2;
}
if(rotateTimes%4==2)
{
cakes[1].Y-=2;
cakes[0].X-=2;
cakes[0].Y-=2;
}
if(rotateTimes%4==3)
{
cakes[0].X+=2;
cakes[0].Y-=2;
cakes[3].X+=2;
}
rotateTimes++;
// return cakes;
break;
case 4:
if(rotateTimes%4==0)
{
cakes[2].X+=2;
cakes[0].X+=2;
cakes[0].Y+=2;
}
if(rotateTimes%4==1)
{
cakes[0].X-=2;
cakes[1].Y+=2;
cakes[0].Y+=2;
}
if(rotateTimes%4==2)
{
cakes[2].X-=2;
cakes[0].X-=2;
cakes[0].Y-=2;
}
if(rotateTimes%4==3)
{
cakes[1].Y-=2;
cakes[0].Y-=2;
cakes[0].X+=2;
}
rotateTimes++;
// return cakes;
break;
case 5:
if(rotateTimes%2==0)
{
cakes[0].X-=1;
cakes[0].Y+=1;
cakes[2].X+=1;
cakes[2].Y-=1;
cakes[3].X+=2;
cakes[3].Y-=2;
}
if(rotateTimes%2==1)
{
cakes[0].X+=1;
cakes[0].Y-=1;
cakes[2].X-=1;
cakes[2].Y+=1;
cakes[3].X-=2;
cakes[3].Y+=2;
}
rotateTimes++;
// return cakes;
break;
}
}
}
//测试可否移动
public bool CanMove(Direction dir)
{
Point p;
switch(dir)
{
case Direction.DOWN:
for(int i=0;i<4;i++)
{
p=cakes[i];
if(!Form1.wall.Cakes[p.X,++p.Y])
return false;
}
return true;
//break;
case Direction.LEFT:
for(int i=0;i<4;i++)
{
p=cakes[i];
if(!Form1.wall.Cakes[--p.X,p.Y])
return false;
}
return true;
// break;
case Direction.RIGHT:
for(int i=0;i<4;i++)
{
p=cakes[i];
if(!Form1.wall.Cakes[++p.X,p.Y])
return false;
}
return true;
// break;
}
return false;
}
//测试可否旋转
public bool CanRotate()
{
int i=0;
Point[] q=new Point[4];
for( i=0;i<4;i++)
q[i]=cakes[i];
Rotate(q);
for(i=0;i<4;i++)
{
//此处可能出现越界错误,因为有时旋转会把两个方块旋转出"屏幕"所以加了try
try
{
if(!Form1.wall.Cakes[q[i].X,q[i].Y])
{
rotateTimes--;
return false;
}
}
catch(Exception)
{
rotateTimes--;
return false;
}
}
rotateTimes--;
return true;
}
public Block()
{
System.Random random=new System.Random();
shape=random.Next(6);
rotateTimes=0;
switch(shape)
{
case 0:
cakes[0]=new Point(6,1);
cakes[1]=new Point (7,1);
cakes[2]=new Point(6,2);
cakes[3]=new Point(7,2);
break;
case 1:
cakes[0]=new Point(6,1);
cakes[1]=new Point (6,2);
cakes[2]=new Point(7,2);
cakes[3]=new Point(7,3);
break;
case 2:
cakes[0]=new Point(7,1);
cakes[1]=new Point (6,2);
cakes[2]=new Point(7,2);
cakes[3]=new Point(6,3);
break;
case 3:
cakes[0]=new Point(6,1);
cakes[1]=new Point (6,2);
cakes[2]=new Point(6,3);
cakes[3]=new Point(7,3);
break;
case 4:
cakes[0]=new Point(7,1);
cakes[1]=new Point (7,2);
cakes[2]=new Point(6,3);
cakes[3]=new Point(7,3);
break;
case 5:
cakes[0]=new Point(6,1);
cakes[1]=new Point (6,2);
cakes[2]=new Point(6,3);
cakes[3]=new Point(6,4);
break;
}
}
}//CLASS Block
}//BLOCK_HB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -