Qt Quick之贪吃蛇

一、概述
学习Qt已久,但目前还是属于门外汉的级别,最近接了一单毕设,准备用Qt写,之后了解了一下QML,遂写贪吃蛇练手,以备此毕设用之。
完整实现了贪吃蛇的基础功能(胜利、失败、吃小鸡增加长度等),根据吃小鸡的数量自动增加移动速度
二、介绍
贪吃蛇程序完整功能:
1.上下左右即开始游戏,小蛇移动
2.吃到小鸡即增加蛇身长度,以及小蛇移动速度
3.小蛇碰撞检测,撞墙和撞到自己则会死亡(本例用for循环实现,大家也可以自行使用Timer或别的来同步开辟一条线程进行检测)
4.吃一个小鸡记一分(大家也可以根据移动速度来换算计分公式)
界面比较简单,大家看看就好,当然基础功能也全都实现了,大家也可以自行修改小鸡或这小蛇样式为图片或或动画格式,只需要在代码中添加资源文件并引用即可,即可实现精美的贪吃蛇游戏
在这里插入图片描述三、功能实现部分代码
1.小鸡,很简单的矩形,大家自行查看代码即可

Rectangle {
        id: chick
        width: 20
        height: 20
        color: 'yellow'
        opacity: 0.8
        z: 2
        x: 20+Math.round(Math.random()*29)*20
        y: 60+Math.round(Math.random()*19)*20
        Keys.onPressed: {
            if(event.key == Qt.Key_1) {
                snake.snakeDirection = 0
                snake.x = 300
                snake.y = 400
                score.scores = 0
                snake.focus = true
                tips.text = "Please press ↑↓←→ to start"
                for(snakeBodyLength ; snakeBodyLength >= 0 ;snakeBodyLength--){
                    snakeBody.pop().destroy()
                }
            }
        }
    }

2.小蛇移动

function move(){
        if(moveState == 1 && snake.snakeDirection == 2){
            snake.snakeDirection = moveState
        }
        if(moveState == 2 && snake.snakeDirection == 1){
            snake.snakeDirection = moveState
        }
        if(moveState == 3 && snake.snakeDirection == 4){
            snake.snakeDirection = moveState
        }
        if(moveState == 4 && snake.snakeDirection == 3){
            snake.snakeDirection = moveState
        }
        snakeBodyMove()
        if(snake.snakeDirection == 1){
            moveState = 1
            snake.x = snake.x - 20
        }
        if(snake.snakeDirection == 2){
            moveState = 2
            snake.x = snake.x + 20
        }
        if(snake.snakeDirection == 3){
            moveState = 3
            snake.y = snake.y - 20
        }
        if(snake.snakeDirection == 4){
            moveState = 4
            snake.y = snake.y + 20
        }
        eat()
    }

3.是否吃到小鸡检测,吃到即重新刷新小鸡位置(即改变x,y坐标)

if(snake.x == chick.x && snake.y == chick.y){
            score.scores++
            snakeBody.push(addBody());
            snakeBody[snakeBodyLength].x = snake.x
            snakeBody[snakeBodyLength].y = snake.y
            chick.x = 20+Math.round(Math.random()*29)*20
            chick.y = 60+Math.round(Math.random()*19)*20
            speed = speed-10

4.移动命令

Keys.onPressed: {
            if(event.key == Qt.Key_Left) {
                snakeDirection = 1
                if(timer.running == false){
                    timer.running = true
                }
            }
            if(event.key == Qt.Key_Right) {
                snakeDirection = 2
                if(timer.running == false){
                    timer.running = true
                }
            }
            if(event.key == Qt.Key_Up) {
                snakeDirection = 3
                if(timer.running == false){
                    timer.running = true
                }
            }
            if(event.key == Qt.Key_Down) {
                snakeDirection = 4
                if(timer.running == false){
                    timer.running = true
                }
            }
            if(event.key == Qt.Key_0) {
                snakeDirection = 0
                if(timer.running == true){
                    timer.running = false
                }
            }
        }

可在Windows10下运行,开发环境为Qt5.12.7,移植手机需自行修改坐标添加按钮控件等
本人水平有限,代码里有很多冗余,仅供参考
完整代码大家自行下载吧
如有疑问请随时联系我:QQ:99430489加好友请备注CSDN+相关代码信息
代码链接: download.csdn.net/download/qq_36980354/12259929

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值