当前位置: 首页 > news >正文

网站建设怎么好2021个人网站盈利模式

网站建设怎么好,2021个人网站盈利模式,上海专业制作网页,经营范围 网站建设前言 弹球消砖块游戏想必大家都玩过,很简单的小游戏,通过移动挡板反弹下落的小球,然后撞击砖块将其消除。本文使用QML来简单实现这个小游戏。 效果图: 正文 代码目录结构如下: 首先是小球部分,逻辑比较麻…

前言

弹球消砖块游戏想必大家都玩过,很简单的小游戏,通过移动挡板反弹下落的小球,然后撞击砖块将其消除。本文使用QML来简单实现这个小游戏。
效果图:

在这里插入图片描述
在这里插入图片描述

正文

代码目录结构如下:
在这里插入图片描述
首先是小球部分,逻辑比较麻烦一点,需要检查与砖块的碰撞以及与挡板的碰撞,还要更新小球的轨迹位置,代码如下:
Ball.qml

import QtQuick 2.12Rectangle {id: ballwidth: 15height: 15radius: width / 2color: "#FFFFFF"border.color: "#DDDDDD"border.width: 1// 引用游戏区域和挡板property var gameAreaproperty var paddle// 球的速度和方向property real speedX: 0property real speedY: 0property real baseSpeed: 3// 信号:球丢失signal ballLost()// 重置球的位置和状态function reset() {x = gameArea.width / 2 - width / 2;y = gameArea.height / 2;speedX = 0;speedY = 0;}// 开始移动球function start() {if (speedX === 0 && speedY === 0) {// 随机初始方向,但确保向下var angle = (Math.random() * Math.PI / 2) + Math.PI / 4; // 45-135度之间speedX = Math.cos(angle) * baseSpeed;speedY = Math.sin(angle) * baseSpeed;}}// 检查与砖块的碰撞function checkBrickCollision() {for (var i = 0; i < gameArea.bricksRepeater.count; i++) {var brick = gameArea.bricksRepeater.itemAt(i);if (brick && !brick.destroyed) {var brickPos = brick.mapToItem(gameArea, 0, 0);if (x + width > brickPos.x && x < brickPos.x + brick.width &&y + height > brickPos.y && y < brickPos.y + brick.height) {// 确定碰撞方向并反弹var centerX = x + width / 2;var centerY = y + height / 2;var brickCenterX = brickPos.x + brick.width / 2;var brickCenterY = brickPos.y + brick.height / 2;var dx = centerX - brickCenterX;var dy = centerY - brickCenterY;if (Math.abs(dx / brick.width) > Math.abs(dy / brick.height)) {// 水平碰撞speedX = -speedX;} else {// 垂直碰撞speedY = -speedY;}// 击中砖块,立即消除当前碰撞的砖块brick.hit();return true;}}}return false;}// 检查与挡板的碰撞function checkPaddleCollision() {if (y + height >= paddle.y && y <= paddle.y + paddle.height &&x + width >= paddle.x && x <= paddle.x + paddle.width) {// 根据击中挡板的位置调整反弹角度var paddleCenter = paddle.x + paddle.width / 2;var ballCenter = x + width / 2;var relativePosition = (ballCenter - paddleCenter) / (paddle.width / 2);// 计算新的速度向量var angle = relativePosition * (Math.PI / 3); // 最大±60度var speed = Math.sqrt(speedX * speedX + speedY * speedY);speedX = Math.sin(angle) * speed;speedY = -Math.abs(Math.cos(angle) * speed); // 确保向上反弹// 稍微增加速度speedX *= 1.05;speedY *= 1.05;return true;}return false;}// 更新球的位置Timer {interval: 16 // 约60fpsrunning: gameArea.gameRunningrepeat: trueonTriggered: {// 移动球x += speedX;y += speedY;// 检查墙壁碰撞if (x <= 0 || x + width >= gameArea.width) {speedX = -speedX;x = Math.max(0, Math.min(x, gameArea.width - width));}if (y <= 0) {speedY = -speedY;y = 0;}// 检查是否掉落if (y + height >= gameArea.height - 20 && !checkPaddleCollision()) {ballLost();return;}// 检查砖块碰撞checkBrickCollision();// 检查挡板碰撞checkPaddleCollision();}}
}

其次是砖块 Brick.qml

import QtQuick 2.12Rectangle {id: brickradius: 3// 砖块状态property bool destroyed: falseproperty int colorIndex: 0// 砖块颜色数组readonly property var colors: ["#FF5252", // 红色"#FFAB40", // 橙色"#FFEB3B", // 黄色"#66BB6A", // 绿色"#42A5F5"  // 蓝色]// 砖块被销毁的信号signal brickDestroyed()// 设置砖块颜色color: colors[colorIndex % colors.length]border.color: Qt.darker(color, 1.2)border.width: 1visible: !destroyed// 砖块被击中function hit() {if (!destroyed) {destroyed = true;visible = false;brickDestroyed();}}
}

砖块击中后要销毁。

接着是挡板 Paddle.qml, 挡板可以通过键盘左右键进行移动,也可以直接使用鼠标进行左右拖动,代码如下:

import QtQuick 2.12Rectangle {id: paddlewidth: 120height: 20radius: 10color: "#2196F3"border.color: "#1976D2"border.width: 1Component.onCompleted: {// 初始化时设置挡板居中x = (gameArea.width - width) / 2}// 引用游戏区域property var gameArea// 移动速度property int speed: 15property bool movingLeft: falseproperty bool movingRight: false// 处理键盘按下事件function handleKeyPress(key) {if (key === Qt.Key_Left) {movingLeft = true;} else if (key === Qt.Key_Right) {movingRight = true;}}// 处理键盘释放事件function handleKeyRelease(key) {if (key === Qt.Key_Left) {movingLeft = false;} else if (key === Qt.Key_Right) {movingRight = false;}}// 鼠标控制MouseArea {anchors.fill: parentdrag.target: parentdrag.axis: Drag.XAxisdrag.minimumX: 0drag.maximumX: gameArea.width - parent.width}// 定时器更新挡板位置Timer {interval: 16 // 约60fpsrunning: (movingLeft || movingRight) && gameArea.gameRunningrepeat: trueonTriggered: {if (movingLeft) {paddle.x = Math.max(0, paddle.x - speed);}if (movingRight) {paddle.x = Math.min(gameArea.width - paddle.width, paddle.x + speed);}}}
}

以上是核心控件的完整代码。


本文Demo下载

http://www.dtcms.com/a/498421.html

相关文章:

  • 新手建站详细步骤wordpress 内链设置
  • wordpress仿站标签wordpress安装包文件夹
  • 网站有利于seo的细节潍坊网站建设熊掌号
  • 腾讯云做视频网站做网站先建立模型
  • 如何防止网站被镜像一个人免费视频在线观看高清
  • 东莞单位网站建设网页设计样图
  • 湘潭做网站 z磐石网络网站建设公司前十名
  • 东莞企业网站哪家好服装定制合同范本
  • 深圳东门希尔顿欢朋酒店洛阳seo
  • 做贸易的都有什么网站推广宣传方式有哪些
  • 关于微网站策划ppt怎么做电子商务网站建设考试重点
  • 建筑网页设计广州seo招聘网
  • 做网站和微信小程序hishop多用户商城源码
  • wordpress文章目录树汕头seo托管
  • 顺企网属于什么网站移动互联网站开发与维护
  • 湖南建设监理协会网站如何查网站的百度快照
  • 重庆品牌营销型网站建设宁夏网站开发
  • 少儿图书销售网站开发背景建筑网站大全玻璃
  • 2015网站排名镇海区住房建设网站怎么查
  • 国家建设工程注册管理中心网站建设部网站电子政务
  • 杭州学校网站建设粤信签微信小程序是什么
  • 丰县住房与城乡建设部网站wordpress旧版本下载
  • 临沧网站建设c3sales石家庄网站建设浩森宇特
  • 潍坊外贸网站建设深圳外贸10强公司
  • 学校网站首页设计php中英文网站源码
  • 哔哩哔哩黄页网站长沙在线注册公司
  • 网站怎么做分站unix做网站常用的数据库
  • 正规网站建设的公司网站建设公司 成都
  • 网站建设落地页wordpress qq微信
  • 网站制作熊猫建站知名网站建设推荐