// 将被删除行的以上行依次向下移动
for (int i = y; i > 0; i--)
{
for (int x = 0; x < _columns; x++)
{
Container[i, x].Color = Container[i - 1, x].Color;
}
}
}
}
// 加分,计算方法: 2 的 removeRowCount 次幂 乘以 10
if (removeRowCount > 0)
Score += 10 * (int)Math.Pow(2, removeRowCount);// 更新总的已消行数
RemoveRowCount += removeRowCount;
// 根据已消行数计算级别,依据丁学的建议,计算方法: 已消行数/5 的平方根 取整
Level = (int)Math.Sqrt(RemoveRowCount / 5);
// 根据级别计算速率,计算方法: 初始速率 减 (每多一个级别所需增加的速率 乘以 当前级别)
_timer.Interval = TimeSpan.FromMilliseconds(_initSpeed - _levelSpeed * Level > _levelSpeed ? _initSpeed - _levelSpeed * Level : _levelSpeed);
}
private int _score = 0;
/**//// <summary>
/// 得分
/// </summary>
public int Score
{
get { return _score; }
set
{
_score = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Score"));
}
}
}
private int _removeRowCount = 0;
/**//// <summary>
/// 总共被消除的行数
/// </summary>
public int RemoveRowCount
{
get { return _removeRowCount; }
set
{
_removeRowCount = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("RemoveRowCount"));
}
}
}
private int _level = 0;
/**//// <summary>
/// 级别(游戏难度)
/// </summary>
public int Level
{
get { return _level; }
set
{
_level = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Level"));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
/**//// <summary>
/// 游戏结束的事件委托
/// </summary>
public event EventHandler GameOver;
/**//// <summary>
/// 游戏结束后所调用的方法,并触发游戏结束事件
/// </summary>
/// <param name="e"></param>
private void OnGameOver(EventArgs e)
{
GameStatus = GameStatus.Over;
_timer.Interval = TimeSpan.FromMilliseconds(_initSpeed);
_timer.Stop();
EventHandler handler = GameOver;
if (handler != null)
handler(this, e);
}
}
}
上一页 [1] [2] [3] [4] [5] [6] [7]
责任编辑:小草