Qt实现贪吃蛇(四)
上一篇把主角蛇这个类说完了。接下来说说第二个类CSnakeGame,也就是在第二篇中提到的f_game的类,它控制着游戏的逻辑。具有以下成员变量:
int f_AreaRows; //区域行数 int f_AreaCols; //区域列数 int f_foodRow; //食物坐标 int f_foodCol; //食物坐标 CSnake* f_pSnake; //蛇 bool f_isOver; //是否结束
可以看出包括游戏区域、食物、蛇以及结束标志(如果需要扩展的话游戏区域和食物也可以封装成类)。针对这些成员提供相应的方法:
CSnake* getSnake(); //获取蛇对象 bool goAhead(); //前进一步 int getAreaRows(); //获取游戏区域行数 int getAreaCols(); //获取游戏区域列数 bool outOfRange(int bx, int by); //是否超出范围 void randFood(); //随机食物 int getFoodRow(); //获取食物行 int getFoodCol(); //获取食物列 void setIsOver(bool bOver); //设置是否结束 bool isOver(); //是否结束
这些方法都很容易理解,除此之外还提供了一个start方法初始化游戏信息:
void CSnakeGame::start() { if(f_pSnake != NULL){ delete f_pSnake; f_pSnake = NULL; } f_AreaRows = 20; f_AreaCols = 18; f_pSnake = new CSnake(this,10,10); f_foodRow = -1; f_foodCol = -1; f_isOver = false; srand((unsigned)time(NULL)); }
由于要实现的规则非常简单,因此这个类也没有什么内容。如需要更丰富的玩法,可以扩展该类。