140 lines
3.6 KiB
C#
140 lines
3.6 KiB
C#
using System;
|
|
|
|
namespace AibisDream
|
|
{
|
|
/// <summary>
|
|
/// 游戏状态
|
|
/// </summary>
|
|
public enum GameState
|
|
{
|
|
NotStarted, // 未开始
|
|
Playing, // 游戏中
|
|
Paused, // 暂停
|
|
GameOver // 游戏结束
|
|
}
|
|
|
|
/// <summary>
|
|
/// 游戏逻辑接口
|
|
/// 负责管理游戏的整体流程和状态
|
|
/// </summary>
|
|
public interface IBlockPuzzleGameLogic
|
|
{
|
|
/// <summary>
|
|
/// 当前游戏状态
|
|
/// </summary>
|
|
GameState CurrentState { get; }
|
|
|
|
/// <summary>
|
|
/// 当前分数(已放置的格子数量)
|
|
/// </summary>
|
|
int Score { get; }
|
|
|
|
/// <summary>
|
|
/// 当前选中的形状
|
|
/// </summary>
|
|
IBlockShape CurrentShape { get; }
|
|
|
|
/// <summary>
|
|
/// 网格系统
|
|
/// </summary>
|
|
IBlockPuzzleGrid Grid { get; }
|
|
|
|
/// <summary>
|
|
/// 放置验证器
|
|
/// </summary>
|
|
IPlacementValidator Validator { get; }
|
|
|
|
/// <summary>
|
|
/// 游戏开始事件
|
|
/// </summary>
|
|
event Action OnGameStart;
|
|
|
|
/// <summary>
|
|
/// 游戏结束事件
|
|
/// </summary>
|
|
event Action OnGameOver;
|
|
|
|
/// <summary>
|
|
/// 形状放置成功事件
|
|
/// </summary>
|
|
event Action<IBlockShape, int, int> OnShapePlaced;
|
|
|
|
/// <summary>
|
|
/// 形状放置失败事件
|
|
/// </summary>
|
|
event Action<IBlockShape, PlacementResult> OnShapePlaceFailed;
|
|
|
|
/// <summary>
|
|
/// 分数变化事件
|
|
/// </summary>
|
|
event Action<int> OnScoreChanged;
|
|
|
|
/// <summary>
|
|
/// 初始化游戏
|
|
/// </summary>
|
|
/// <param name="gridWidth">网格宽度</param>
|
|
/// <param name="gridHeight">网格高度</param>
|
|
void InitializeGame(int gridWidth, int gridHeight);
|
|
|
|
/// <summary>
|
|
/// 开始游戏
|
|
/// </summary>
|
|
void StartGame();
|
|
|
|
/// <summary>
|
|
/// 暂停游戏
|
|
/// </summary>
|
|
void PauseGame();
|
|
|
|
/// <summary>
|
|
/// 继续游戏
|
|
/// </summary>
|
|
void ResumeGame();
|
|
|
|
/// <summary>
|
|
/// 结束游戏
|
|
/// </summary>
|
|
void EndGame();
|
|
|
|
/// <summary>
|
|
/// 重置游戏
|
|
/// </summary>
|
|
void ResetGame();
|
|
|
|
/// <summary>
|
|
/// 选择形状
|
|
/// </summary>
|
|
/// <param name="shape">要选择的形状</param>
|
|
void SelectShape(IBlockShape shape);
|
|
|
|
/// <summary>
|
|
/// 尝试放置当前选中的形状到指定位置
|
|
/// </summary>
|
|
/// <param name="gridX">网格X坐标</param>
|
|
/// <param name="gridY">网格Y坐标</param>
|
|
/// <returns>是否放置成功</returns>
|
|
bool TryPlaceShape(int gridX, int gridY);
|
|
|
|
/// <summary>
|
|
/// 旋转当前选中的形状
|
|
/// </summary>
|
|
/// <param name="angle">旋转角度</param>
|
|
void RotateCurrentShape(RotationAngle angle);
|
|
|
|
/// <summary>
|
|
/// 检查是否还有可放置的形状
|
|
/// </summary>
|
|
/// <param name="availableShapes">可用的形状列表</param>
|
|
/// <returns>是否还有可放置的形状</returns>
|
|
bool HasPlaceableShapes(IBlockShape[] availableShapes);
|
|
|
|
/// <summary>
|
|
/// 获取下一个可用的形状
|
|
/// </summary>
|
|
/// <param name="shapePool">形状池</param>
|
|
/// <returns>下一个形状,如果没有则返回null</returns>
|
|
IBlockShape GetNextShape(IBlockShape[] shapePool);
|
|
}
|
|
}
|
|
|