一、概述
学习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