📄 clearblock.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 + -