关于贪吃蛇的学习
今天我主要是学习了qt的基本应用和对网上贪吃蛇资源代码中蛇移动和吃食物部分的大致学习
网上资源里面的贪吃蛇是由链表进行实现的
基本思想就是分为三种情况,一种是蛇撞墙,蛇吃自己,和蛇吃食物,以及除了以上两种情况。
首先蛇在每次开始时都要获得一个方块(有矩阵表示)
无事发生则要把该方块当成自己新的蛇头,然后把蛇尾方块删除
吃食物则不用删去尾部
蛇撞墙则游戏结束
其他两种情况就是让这个方块的属性type和墙的type和蛇的type
以下注释均为我对代码的理解
void Board::moveStep(){
getHeadTail();//获取蛇头和蛇尾指针
Node n = matrix[head->x + dx][head->y + dy];
n->label->show();
//n是即将变成蛇头的那个label
if(n->type == BORDER_LABEL || n->type == SNAKE_LABEL){ //倘若吃到自己或者撞墙
qDebug() << “Game over@!!!”;
timer.stop();
QMessageBox::information(this, “提示”, "** game over ***", QMessageBox::Ok);
}else{
if(n->type == FOOD_LABEL){//倘若蛇已经吃到食物了
n->type = SNAKE_LABEL;
snake.append(n); //在链表尾部添加一个,即在蛇头添加一个
//不移除尾巴
generateFood();//生成下一个食物
}else{
n->type = SNAKE_LABEL;给链表的type附上蛇的标签
snake.append(n);//在链表尾部添加
tail->label->hide(); //把后面的蛇尾给隐藏掉
tail->type = NORMAL_LABEL;
snake.removeFirst();//从链表中删除第一个元素即蛇尾
}
}
}