⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 block.cs

📁 一个可以在智能手机上运行,完全基于CF的俄罗斯方块游戏
💻 CS
字号:
using System;
using System.Drawing;
using System.Windows.Forms;
namespace FiyaSoft.DiamondGame
{
	/// <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
}//FiyaSoft.DiamondGame
























































⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -