Qt极简贪吃蛇实现

持续修正更新该项目
环境:Qt 4.8 (Qt5环境也可使用)
全部文件传送门

部分重要模块代码

#include "snakegame.h"
#include "ui_snakegame.h"


SnakeGame::SnakeGame(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SnakeGame)
{
    ui->setupUi(this);
    head = new Body(rand()%18+1,rand()%10+1,40,this);
    snake.push_back(head);
    food = new Apple(rand()%20,rand()%12,40,this);

    setDirection(rand()%4);

    timer = new QTimer;
    speed = 500;     //半秒
    timer->setInterval(speed);//间隔
    connect(timer,SIGNAL(timeout()),this,SLOT(snake_move_slot()));
    timer->start();

    qDebug("%d %d %d %d",Qt::Key_Up,Qt::Key_Down,Qt::Key_Left,Qt::Key_Right);


}

void SnakeGame::snake_move_slot(void)
{
    for(int i=snake.size()-1;i>0;i--)
    {
        snake[i]->move(snake[i-1]->x(),snake[i-1]->y());
    }
    switch(direction)
    {
    case Up:head->move(head->x(),head->y()-40);
        break;
    case Down:head->move(head->x(),head->y()+40);
        break;
    case Left:head->move(head->x()-40,head->y());
        break;
    case Right:head->move(head->x()+40,head->y());
        break;
    }
    if(food->x()==head->x() && food->y() == head->y())
    {
        snake.push_back(food);
        food = new Apple(rand()%20,rand()%12,40,this);
    }
}

void SnakeGame::keyReleaseEvent(QKeyEvent *event)
{
    switch(event->key())
    {
    case Qt::Key_Up: setDirection(Up);
        break;
    case Qt::Key_Down: setDirection(Down);
        break;
    case Qt::Key_Left: setDirection(Left);
        break;
    case Qt::Key_Right: setDirection(Right);
        break;
    }
}

void SnakeGame::setDirection(int direction)
{
    QString headImage = "border-image: url(:/snake_image/";
    switch(direction)
    {
    case Up:
        headImage += "head_up.png);";
        break;
    case Down:headImage += "head_down.png);";
        break;
    case Left:headImage += "head_left.png);";
        break;
    case Right:headImage += "head_right.png);";
        break;
    }
    head->setStyleSheet(headImage);
    this->direction=direction;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值