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

📄 runningstate.cs

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

namespace DiamondPet.LogicLayer.GameStateRunLogic
{
	/// <summary>
	/// RunningState 的摘要说明。
	/// 游戏状态
	/// </summary>
	public class RunningState
	{
		/// <summary>
		/// 状态管理器的引用
		/// </summary>
		public RunStateManager runStateManager;
 
		/// <summary>
		/// 算法类
		/// </summary>
		public GameStrategy gameStrategy;

		/// <summary>
		/// 命令队列
		/// </summary>
		public GameQueue runCommandQueue;

	
		public RunningState()
		{}

		public RunningState(RunStateManager r)
		{
			runStateManager = r;

			//算法类实例
			gameStrategy = new GameStrategy(runStateManager.gameDate);

			//定义命令队列的长度为100
			runCommandQueue = new GameQueue(100);
		}
		


		/// 加入命令

		public virtual void AddKeyCommand(Keys key,bool isdown)
		{}

		public virtual void RunStateLogic()
		{}


		/// <summary>
		/// 每个类所必须的初始化工作,主要作用在状态转化时
		/// </summary>
		public virtual void Initialize(){}

		#region 画界面
		protected virtual void DrawAll()
		{
			
		}

		
		/// <summary>
		/// 画主界面
		/// </summary>
		public void DrawMainBg()
		{
			Draw.DrawTempImage(Pictures.picturesImage[GameConstResource.mainbg],GameConstResource.mainbgX,GameConstResource.mainbgY);
//			Draw.DrawImage(Pictures.picturesImage[GameConstResource.mainbg],
//				GameConstResource.mainbgX + runStateManager.gameDate.curGameItems.CurGameItemsPos.Y * GameConstResource.BlockWidth,
//				GameConstResource.minorbgY,
//				GameConstResource.BlockWidth,
//				220,
//				GameConstResource.mainbgX + runStateManager.gameDate.curGameItems.CurGameItemsPos.Y * GameConstResource.BlockWidth,
//				0,
//				GameConstResource.BlockWidth,
//				220);
		}


     
		/// <summary>
		/// 画次界面
		/// </summary>
		public void DrawMinorBg()
		{
			Draw.DrawTempImage(Pictures.picturesImage[GameConstResource.minorbg],GameConstResource.minorbgX,GameConstResource.minorbgY);
		}

		/// <summary>
		/// 绘制信息汇总
		/// </summary>
		public void DrawSelfInfor()
		{
			Draw.DrawImage(Pictures.picturesImage[2],GameConstResource.inforX,GameConstResource.inforY);
		}

		/// <summary>
		/// 画动的方块
		/// </summary>
		public void DrawMoveBlock()
		{
			int i,j;
			i = this.runStateManager.gameDate.curGameItems.CurGameItemsPos.X;
			j = this.runStateManager.gameDate.curGameItems.CurGameItemsPos.Y;
			
			for(int t = 0; t < this.runStateManager.gameDate.curGameItems.ItemLen; ++t)
			{
				//modified by hearmin on 2005.3.5
				if(this.runStateManager.gameDate.curGameItems[t] == null)
					break;
				Draw.DrawImage(
					Pictures.picturesImage[this.runStateManager.gameDate.curGameItems[t].ObjectId],
					GameConstResource.gameFrameX + j * GameConstResource.BlockWidth, 
					GameConstResource.gameFrameY + i * GameConstResource.BlockHeight,
					GameConstResource.BlockWidth,
					GameConstResource.BlockHeight,
					0,0,GameConstResource.BlockWidth,GameConstResource.BlockHeight
					);
				if ( this.runStateManager.gameDate.curGameItems[t].IsProperty() == true)
				{
					Draw.DrawImage(
						Pictures.picturesImage[this.runStateManager.gameDate.curGameItems[t].BackColorId],
						GameConstResource.gameFrameX + j * GameConstResource.BlockWidth + (GameConstResource.BlockWidth - GameConstResource.PropertyNormalWidth)/2, 
						GameConstResource.gameFrameY + i * GameConstResource.BlockHeight + (GameConstResource.BlockHeight - GameConstResource.PropertyNormalHeight)/2,
						GameConstResource.PropertyNormalWidth,
						GameConstResource.PropertyNormalHeight,
						0,0,
						GameConstResource.BlockWidth,GameConstResource.BlockHeight
						);
				}				
				i--;
			}
		}

		//建议加个最高点的坐标,如果过了最高点就退出,用于简化操作,因为每次都空循环了很多
		public void DrawMainBlock()
		{
			for (int i = 0; i < GameConstResource.BlockFrameHeight; i++)
			{
				for (int j = 0; j < GameConstResource.BlockFrameWidth; j++)
				{
					if ( this.runStateManager.gameDate.gFrame.gameFrame[i,j] != null)
					{ 
						Draw.DrawTempImage(
							Pictures.picturesImage[this.runStateManager.gameDate.gFrame.gameFrame[i,j].ObjectId],
							GameConstResource.gameFrameX + j * GameConstResource.BlockWidth, 
							GameConstResource.gameFrameY + i * GameConstResource.BlockHeight,
							GameConstResource.BlockWidth,
							GameConstResource.BlockHeight,
							0,0,GameConstResource.BlockWidth,GameConstResource.BlockHeight
							);
						if ( this.runStateManager.gameDate.gFrame.gameFrame[i,j].IsProperty() &&
							this.runStateManager.gameDate.gFrame.gameFrame[i,j].curObjectState != GameObject.ObjectState.Cleared)
						{
							Draw.DrawTempImage(
								Pictures.picturesImage[this.runStateManager.gameDate.gFrame.gameFrame[i,j].BackColorId],
								GameConstResource.gameFrameX + j * GameConstResource.BlockWidth + (GameConstResource.BlockWidth - GameConstResource.PropertyNormalWidth)/2, 
								GameConstResource.gameFrameY + i * GameConstResource.BlockHeight + (GameConstResource.BlockHeight - GameConstResource.PropertyNormalHeight)/2,
								GameConstResource.PropertyNormalWidth,
								GameConstResource.PropertyNormalHeight,
								0,0,GameConstResource.BlockWidth,GameConstResource.BlockHeight
								);
						}
						
					}
				}
			}
		}

		/// <summary>
		/// 画分数
		/// </summary>
		public void DrawScore()
		{
			string score;

			score = this.runStateManager.gameDate.gameScore.Score.ToString();

			for(int i = 0;i < score.Length;++i)
			{
				Draw.DrawImage(Pictures.picturesImage[GameConstResource.scorePic]      
				,GameConstResource.scorePosX + i * GameConstResource.eachNumberWidth
                ,GameConstResource.scorePosY
                ,GameConstResource.eachNumberWidth
                ,GameConstResource.eachNumberHeight
				,(Convert.ToInt32(score[i]) + 1) % 10 * GameConstResource.eachNumberWidth
				,0
				,GameConstResource.eachNumberWidth
				,GameConstResource.eachNumberHeight
					);
			}
		}

		public void DrawPropetyBar()
		{
			ArrayList arr = this.runStateManager.gameDate.propertyQueue.Queue;
			LogicLayer.PropertyObject tp = this.runStateManager.gameDate.propertyQueue.CurQueueObject as PropertyObject;
			if ( this.runStateManager.gameDate.propertyQueue.IsEmpty == false)
			{
				//选中的道具,特大显示
				Draw.DrawImage(Pictures.picturesImage[tp.BackColorId],
						GameConstResource.PropertyBarX,
						GameConstResource.PropertyBarY ,
						GameConstResource.PropertyBigWidth,
						GameConstResource.PropertyBigHeight,
						0,0,
						GameConstResource.PropertyBigWidth,
						GameConstResource.PropertyBigHeight
					);
				int idx = runStateManager.gameDate.propertyQueue.StartIndex; 
				if ( idx > 0 && arr[ idx - 1] != null )
				{
					tp = arr[idx - 1] as PropertyObject;
					Draw.DrawImage(Pictures.picturesImage[tp.BackColorId],
						GameConstResource.PropertyEchoLeftLeft,
						GameConstResource.PropertyEchoTop,
						GameConstResource.PropertyNormalWidth,
						GameConstResource.PropertyNormalHeight,
						0,0,
						GameConstResource.PropertyBigWidth,
						GameConstResource.PropertyBigHeight
						);
				}
				if ( idx + 1 < runStateManager.gameDate.propertyQueue.QueueSize && arr[ idx + 1] != null)
				{
					tp = arr[idx + 1] as PropertyObject;
					Draw.DrawImage(Pictures.picturesImage[tp.BackColorId],						
						GameConstResource.PropertyEchoLeftRight,
						GameConstResource.PropertyEchoTop,
						GameConstResource.PropertyNormalWidth,
						GameConstResource.PropertyNormalHeight,
						0,0,
						GameConstResource.PropertyBigWidth,
						GameConstResource.PropertyBigHeight
						);
				}

			}
		}

		public void DrawLevel()
		{
			Draw.DrawString(this.runStateManager.gameDate.updateOrWL.CurrentLevel.ToString(),
				            Color.Red,
				            GameConstResource.drawLevelPosX,
				            GameConstResource.drawLevelPosY);


			GameObject[] tempObject = (GameObject[])this.runStateManager.gameDate.nextItemsQueue.Top();
			//画下一块
			int startPoxY = GameConstResource.startY + (GameConstResource.endY - GameConstResource.startY - GameConstResource.BlockWidth * tempObject.Length) / 2;
			for(int i = tempObject.Length - 1;i >=0 ;--i)
			{

				Draw.DrawImage(Pictures.picturesImage[tempObject[i].ObjectId],
					GameConstResource.posX,startPoxY + (tempObject.Length - i - 1) * GameConstResource.BlockWidth,GameConstResource.BlockWidth,GameConstResource.BlockHeight,0,0,GameConstResource.BlockWidth,GameConstResource.BlockHeight);

				if(tempObject[i].IsProperty())
				{
					Draw.DrawImage(Pictures.picturesImage[tempObject[i].BackColorId],
						GameConstResource.posX,startPoxY + (tempObject.Length - i - 1) * GameConstResource.BlockWidth,GameConstResource.BlockWidth,GameConstResource.BlockHeight,0,0,GameConstResource.BlockWidth,GameConstResource.BlockHeight);
				}
			}

			//是否是时间模式
			if(this.runStateManager.gameDate.timeControl.GameTime >= 0)
			{
				//画剩下多少时间
				Draw.DrawString(this.runStateManager.gameDate.timeControl.ReturnMiniter().ToString()+":",Color.Blue,119,195);

				Draw.DrawString(this.runStateManager.gameDate.timeControl.ReturnSecond().ToString(),Color.Blue,137,195);
			}
			else
			{
				Draw.DrawString("不限时",Color.Blue,114,195);

			}

			//画要到多少分升级
			if(this.runStateManager.gameDate.updateOrWL.CurrentLevel < 7)
			{
				Draw.DrawString(this.runStateManager.gameDate.updateOrWL.NextLevelScore().ToString(),Color.Yellow,51,3);
			}
			else
			{
				Draw.DrawString("恭喜你已通版",Color.Yellow,51,3);
			}

		}
		#endregion

		#region 合并块
		/// <summary>
		/// 合并移动块和静止块
		/// </summary>
		protected void CombineBlock()
		{
			this.runStateManager.gameDate.curGameItems.PutItems();
		}

		protected bool CheckClearBlock()
		{
			bool bret = false;
			for ( int i = 0; i < GameConstResource.BlockFrameWidth; i++)
			{
				for ( int j = runStateManager.gameDate.gFrame.highestBlock[i]; j < GameConstResource.BlockFrameHeight; j++)
				{
					if ( gameStrategy.CheckValid(j,i,runStateManager.gameDate.gFrame) == true)
					{
						if ( runStateManager.gameDate.gFrame.gameFrame[j,i].IsProperty() == true)
						{
							//被消去的是闪电
							if ( runStateManager.gameDate.gFrame.gameFrame[j,i].BackColorId == GameConstResource.LightenBlockIndex)
							{
								((PropertyObject)runStateManager.gameDate.gFrame.gameFrame[j,i]).UseProperty(this);
							}
							else 
							{
								runStateManager.gameDate.propertyQueue.AddElement(
									PropertyObject.PropertyFactory(
									runStateManager.gameDate.gFrame.gameFrame[j,i].BackColorId,
									runStateManager.gameDate.gFrame.gameFrame[j,i].ObjectId)
									);
							}
						}
						//将被消方块的坐标加入队列
						if ( runStateManager.gameDate.gFrame.gameFrame[j,i].curObjectState != 
							GameObject.ObjectState.Cleared)
						{
							this.runStateManager.gameDate.ClearBlockList.Add(new System.Drawing.Point(j,i));
							runStateManager.gameDate.gFrame.gameFrame[j,i].curObjectState = 
								GameObject.ObjectState.Cleared;
						}

						bret = true;
					}
				}
			}
			return bret;
		}
		#endregion

		#region 检查命令
		/// <summary>
		/// 检查命令
		/// </summary>
		protected void CheckCommand()
		{
			while( !runCommandQueue.IsEmpty)
			{
				((Command)runCommandQueue.GetElement()).ExecuteCommand();
			}
		}
		#endregion

		#region 判断生死
		public bool IsDie()
		{
			for(int i = 0;i < GameConstResource.BlockFrameWidth;++i)
			{
				if(this.runStateManager.gameDate.gFrame.GetRowIndex(i)
					<= GameConstResource.dieX)
				{
					return true;
				}
			}
			return false;
		}

		/// <summary>
		/// 判断时间是否已经到了
		/// </summary>
		public void JudgeTimeOver()
		{
			if(this.runStateManager.gameDate.timeControl.IsTimeOver())
			{
				//时间到了以后转入结束状态
				this.runStateManager.ChangeState(RunStateManager.LOSTORWIN);
			}

		}
		#endregion

		#region 下落速度判断
		protected void CheckSlowSpeed()
		{
			if (runStateManager.gameDate.useSlowSpeed == true && 
				runStateManager.gameDate.curSlowTime - runStateManager.gameDate.timeControl.GameTime > GameConstResource.SlowDownTimeContinued)
			{
				runStateManager.gameDate.useSlowSpeed = false;
				GameConstResource.currentSpeed = runStateManager.gameDate.savedSpeed;
			}
		}
		#endregion 
  	}
}

⌨️ 快捷键说明

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