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

📄 clearblock.cs

📁 嵌入式程序
💻 CS
字号:
using System;
using DiamondPet.UserLayer;
using System.Collections;
using System.Drawing;
using System.Windows.Forms;

namespace DiamondPet.LogicLayer.GameStateRunLogic
{
	/// <summary>
	/// ClearBlock 的摘要说明。
	/// 消状态
	/// </summary>
	public class ClearBlock : RunningState
	{
		/// <summary>
		/// 上一次的时间
		/// </summary>
		private int lastTick;

		/// <summary>
		/// 选择哪个图
		/// </summary>
		private int whileIndex;

		/// <summary>
		/// 闪动次数
		/// </summary>
		private int goNumber;

		private ClearBlockCommand.PauseClearCommand pauseClearCommand;

		public ClearBlock()
		{
			//
			// TODO: 在此处添加构造函数逻辑
			//
		}
		public ClearBlock(RunStateManager r) : base(r)
		{
			this.whileIndex = 1;

			this.goNumber = GameConstResource.goNumber;

			IntiCommand();
		}

		private void IntiCommand()
		{
			pauseClearCommand = new ClearBlockCommand.PauseClearCommand(this);
		}

		#region 画图
		
		protected override void DrawAll()
		{
			this.DrawMainBg();
			this.DrawMainBlock();
			Draw.DrawTempToImage();
			this.DrawScore(); 
			this.DrawPropetyBar();
			this.DrawLevel();
		}
		#endregion

		#region 主循环处理逻辑
		/// <summary>
		/// 游戏逻辑
		/// </summary>
		public override void RunStateLogic()
		{
			//时间更新
			this.runStateManager.gameDate.timeControl.RenewTime(System.Environment.TickCount);

			//DrawMoveBlock();
			DrawAll();
			CheckCommand();

			//跟换图片
			if(Environment.TickCount - this.lastTick
				>= GameConstResource.timeSpace)
			{
				this.lastTick = Environment.TickCount;

				for(int i = 0;i < this.runStateManager.gameDate.ClearBlockList.Count;++i)
				{
					this.runStateManager.gameDate.gFrame.gameFrame[((Point)this.runStateManager.gameDate.ClearBlockList[i]).X,((Point)this.runStateManager.gameDate.ClearBlockList[i]).Y].ObjectId
						= GameConstResource.Star[this.whileIndex % 2];
				}

				this.whileIndex++;
				//闪动次数已到
				if(--this.goNumber == 0)
				{
					this.goNumber = GameConstResource.goNumber;
					
					//对界面调整,去除消掉的方块
					AdjustFrame();

					//计算这次能够的几分
					this.runStateManager.gameDate.gameScore.CalSumScore(this.runStateManager.gameDate.ClearBlockList.Count);

					this.runStateManager.gameDate.ClearBlockList.Clear();

					this.ChangeToNextState();
				}
			}

			//判断时间是否已经到了
			base.JudgeTimeOver();
		}

		#endregion

		#region 按键处理

		public override void AddKeyCommand(System.Windows.Forms.Keys key, bool isdown)
		{
			if (isdown)
			{
				switch(key)
				{
					case Keys.NumPad5:
						this.runCommandQueue.AddElement(pauseClearCommand);
						break;
					case Keys.Enter:
						this.runCommandQueue.AddElement(pauseClearCommand);
						break;
				}
			}
		}

		#endregion

		#region 模式跳转
		/// <summary>
		/// 转到下个模式
		/// </summary>
		private void ChangeToNextState()
		{	
			//如果不消,就转到selectblock
			this.runStateManager.ChangeState(RunStateManager.JUDGESTATECHANGE);

		}
		#endregion

		#region 换成闪动时的图片
		/// <summary>
		///  修改图片
		/// </summary>
		/// <param name="i">行</param>
		/// <param name="j">列</param>
		/// <param name="j">图片在队列中的索引</param>
		private void ChangePicture(int i,int j,int picIndex)
		{
			this.runStateManager.gameDate.gFrame.gameFrame[i,j].CurFrameIndex = 
				picIndex;
		}

		#endregion

		#region 消去之后的界面调整
		/// <summary>
		/// 对整个frame进行调整
		/// </summary>
		private void AdjustFrame()
		{
			for(int i = 0;i < GameConstResource.BlockFrameWidth;++i)
			{
				AdjustRow(i);
			}
		}

		/// <summary>
		/// 调整一列
		/// </summary>
		/// <param name="columnIndex">行号</param>
		private void AdjustRow(int columnIndex)
		{
			int desPoint = GameConstResource.BlockFrameHeight - 1;
			int sourPoint = GameConstResource.BlockFrameHeight - 1;
			int highest;
			highest = this.runStateManager.gameDate.gFrame.GetRowIndex(columnIndex);

			while(true)
			{
				run(ref desPoint,ref sourPoint,highest,columnIndex);
				if(desPoint < highest || sourPoint < highest)
					break;
				else
				{
					Exchange(desPoint,sourPoint,columnIndex);
				}
			}

			while(highest < GameConstResource.BlockFrameHeight)
			{
				if(this.runStateManager.gameDate.gFrame.gameFrame[highest,columnIndex].curObjectState == GameObject.ObjectState.Cleared)
				{
					this.runStateManager.gameDate.gFrame.gameFrame[highest,columnIndex] = null;
					highest++;
				}
				else
				{
					break;
				}
			}

			this.runStateManager.gameDate.gFrame.SetRowIndex(columnIndex,highest);

		}

		private void run(ref int desPoint,ref int sourPoint,int highest,int columnIndex)
		{
			while(desPoint >= highest)
			{
				if(this.runStateManager.gameDate.gFrame.gameFrame[desPoint,columnIndex] .curObjectState == GameObject.ObjectState.Cleared)
				{
					break;
				}
				else
					desPoint--;
			}

			sourPoint = desPoint;

			while(sourPoint >= highest)
			{
				if(this.runStateManager.gameDate.gFrame.gameFrame[sourPoint,columnIndex] .curObjectState == GameObject.ObjectState.Idle)
				{
					break;
				}
				else
					sourPoint--;
			}
		}

		/// <summary>
		/// 交换元素
		/// </summary>
		/// <param name="desPoint"></param>
		/// <param name="sourPoint"></param>
		private void Exchange(int desPoint,int sourPoint,int columnIndex)
		{
			GameObject tempObject;

			tempObject = this.runStateManager.gameDate.gFrame.gameFrame[desPoint,columnIndex];

			this.runStateManager.gameDate.gFrame.gameFrame[desPoint,columnIndex]
				= this.runStateManager.gameDate.gFrame.gameFrame[sourPoint,columnIndex];

			this.runStateManager.gameDate.gFrame.gameFrame[sourPoint,columnIndex] = tempObject;
		}
		#endregion
	}
}

⌨️ 快捷键说明

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