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

企业概况的模板范文昆明官网seo诊断

企业概况的模板范文,昆明官网seo诊断,自媒体创业计划书word,网站设置为信任站点最近刷抖音经常看到别人使用类似chatGPT的al工具实现这个贪吃蛇游戏#xff0c;正好我之前也写过#xff0c;那么今天看看怎么去实现这个简单的游戏 我这边使用的是C的QT框架#xff0c;当然用哪些框架都可以#xff0c;主要是逻辑思路 1.生成画布#xff0c;开始是一些…最近刷抖音经常看到别人使用类似chatGPT的al工具实现这个贪吃蛇游戏正好我之前也写过那么今天看看怎么去实现这个简单的游戏 我这边使用的是C的QT框架当然用哪些框架都可以主要是逻辑思路 1.生成画布开始是一些框的配置 // 构造函数初始化 Widget 类 Widget::Widget(QWidget *parent): QWidget(parent) // 调用 QWidget 的构造函数来初始化父类, ui(new Ui::Widget) // 创建 Widget 类的私有成员 ui用于用户界面 {// 在用户界面上设置布局ui-setupUi(this);// 创建一个 qiu 对象并将其赋给 yuan 指针this-yuan new qiu(this);// 创建一个定时器对象并设置其间隔为 100 毫秒time-setInterval(100);// 设置窗口大小为 600x368 像素this-setFixedSize(QSize(600, 368));// 设置窗口标题为 贪吃蛇this-setWindowTitle(贪吃蛇); }还需要画这个框的背景代码如下 QPainter huajia(this); // 创建一个 QPainter 对象 huajia并将其绑定到当前窗口或绘图设备 QPixmap p1 QPixmap(:/C:/Users/Administrator/Pictures/tp2.png); // 创建一个 QPixmap 对象 p1加载指定路径下的图片// 使用 QPainter 绘制图片到指定区域 // 参数解释: (0, 0) 是绘制的起始位置this-width() 是绘制的宽度this-height() 是绘制的高度p1 是要绘制的图片 huajia.drawPixmap(0, 0, this-width(), this-height(), p1);可能不是那么美观主要是实现功能之后的话都可以改良 2.贪吃蛇主要还是蛇蛇的话我是使用一个QRectF链表来表示蛇 为什么使用链表呢因为我的蛇移动是删除最后一个元素新增为第一个元素而链表本身比较适合元素的移动可以插入第一个删除最后一个元素当我删除一个元素后后面的元素会扑上来实现动态的蛇的移动 QWidget头文件如下 #ifndef WIDGET_H #define WIDGET_H#include QWidget #include QTimer #include QRect #include qiu.hQT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECT// 声明一个枚举类型用于表示蛇的移动方向enum fangxiang { shang, xia, zuo, you, ting, kai };public:// 构造函数可以接受一个父窗口对象作为参数Widget(QWidget *parent nullptr);// 析构函数~Widget();// 更新蛇的位置void gengxin();// 保存蛇的各个部分的矩形区域QListQRectF she;// 当前蛇的移动方向fangxiang zhujue shang;// 指向 qiu 对象的指针qiu* yuan;// 键盘事件处理函数用于捕捉键盘输入void keyPressEvent(QKeyEvent *event);// 绘制事件处理函数用于绘制蛇和其他图形void paintEvent(QPaintEvent *event);// 向上移动蛇的头部void addshang();// 向下移动蛇的头部void addxia();// 向左移动蛇的头部void addzuo();// 向右移动蛇的头部void addyou();// 停止蛇的移动void tingzhi();// 开始蛇的移动void kaishi();// 保存小球的矩形区域QRect xiaoqiu;public slots: private:Ui::Widget *ui; };#endif // WIDGET_H如上所示蛇的移动是一个定时器使用定时器进行绘画蛇这个数组定时器每次到对应的时间会首先增加一个新元素到蛇前面将最后一个元素上升如图 使用绘画室事件画蛇画蛇的话只需要在这个框内蛇的坐标要么是左上角加上宽高或者左上角坐标右下角坐标等 应为我这边使用的蛇的身躯是一些小正方形组成的所以可以直接使用左上角坐标加上宽高为20 //使用画家对象绘画蛇的方块 huajia.drawPixmap(yuan-x,yuan-y,20,20,yuan-p); 3.定时器定时器主要的作用是控制蛇的移动主要方式为蛇的数组进行删除最后一个元素新增一个元素到首部只要定时循环那么就会呈现蛇的移动 新增槽函数 // 使用 Qt 的信号与槽机制在定时器时间间隔内触发 gengxin 函数 connect(time, QTimer::timeout, this, []() {this-gengxin(); });槽函数内部为蛇的枚举我这边上下左右等  void Widget::gengxin() {// 根据当前的蛇的移动方向执行相应的移动函数switch (zhujue) {case shang:addshang();break;case xia:addxia();break;case zuo:addzuo();break;case you:addyou();break;case ting:// 如果蛇的状态是 ting则不进行移动break;case kai:// 如果蛇的状态是 kai则不进行移动break;}// 请求重新绘制界面以更新蛇的位置update();// 移除蛇的尾部相当于模拟蛇在前进时的效果she.removeLast(); }4.设置键盘事件我这边使用的是键盘右边的那四个方向代码如下 void Widget::keyPressEvent(QKeyEvent *event) {// 响应用户的键盘按键事件switch (event-key()) {case Qt::Key_Up:// 如果用户按下向上箭头键且当前蛇的方向不是向下则将蛇的方向设置为向上if (zhujue ! xia) {zhujue shang;}break;case Qt::Key_Down:// 如果用户按下向下箭头键且当前蛇的方向不是向上则将蛇的方向设置为向下if (zhujue ! shang) {zhujue xia;}break;case Qt::Key_Left:// 如果用户按下向左箭头键且当前蛇的方向不是向右则将蛇的方向设置为向左if (zhujue ! you) {zhujue zuo;}break;case Qt::Key_Right:// 如果用户按下向右箭头键且当前蛇的方向不是向左则将蛇的方向设置为向右if (zhujue ! zuo) {zhujue you;}break;case Qt::Key_Space:// 如果用户按下空格键切换蛇的状态为 ting停止或 kai开始if (zhujue ting) {zhujue kai;time-start(); // 启动定时器继续游戏}else {time-stop(); // 停止定时器暂停游戏zhujue ting; // 将蛇的状态设置为 ting停止}break;default:break;} } 这样的话比如我点一下上zhujue这个值就会一直会朝向对于的方向如下 移动一下  停是应为我在键盘事件中设置了如果为空格那么  case Qt::Key_Space:// 如果用户按下空格键切换蛇的状态为 ting停止或 kai开始if (zhujue ting) {zhujue kai;time-start(); // 启动定时器继续游戏}else {time-stop(); // 停止定时器暂停游戏zhujue ting; // 将蛇的状态设置为 ting停止}break; 反之本来就是停止就会继续 5.最后是怎么根据我现在的方向移动蛇呢 比如我现在zhujue上方那么会一直执行 void Widget::gengxin(){switch (zhujue) {// 按下上键那么会一直执行case shang:addshang();break; } 就会一直执行addshang()这个函数那么 void Widget::addshang() {// 定义两个 QPointF 类型的变量用于存储矩形的左上角和右下角坐标QPointF zuoshang; // 左上角坐标QPointF youxia; // 右下角坐标// 检查蛇头是否超出窗口上边界if (she[0].y() - 20 0) {// 如果蛇头超出上边界将左上角坐标设置为当前位置的 x 坐标和窗口的高度 - 20zuoshang QPointF(she[0].x(), this-height() - 20);// 右下角坐标设置为左上角坐标的 x 坐标 20 和窗口的高度youxia QPointF(she[0].x() 20, this-height());}else {// 如果蛇头未超出上边界将左上角坐标设置为当前位置的 x 和 y 坐标但 y 坐标减去 20zuoshang QPointF(she[0].x(), she[0].y() - 20);// 右下角坐标设置为蛇头矩形的右上角坐标youxia QPointF(she[0].topRight());}// 在蛇的头部插入一个新的矩形使用左上角和右下角坐标创建矩形she.insert(0, QRectF(zuoshang, youxia)); } 这段代码是当向上移动时那么对于蛇的每一个元素会将坐上坐标的x减去20实现蛇的移动如果出现she[0].y()的距离快到边框时那么会重置到下面详细代码如下 void Widget::addshang() {// 定义左上角和右下角的 QPointF 类型变量用于表示新矩形的坐标QPointF zuoshang; // 左上角坐标QPointF youxia; // 右下角坐标// 检查蛇头是否超出窗口的上边界if (she[0].y() - 20 0) {// 如果蛇头超出上边界将左上角坐标设置为蛇头的 x 坐标和窗口高度减去 20zuoshang QPointF(she[0].x(), this-height() - 20);// 右下角坐标设置为左上角坐标的 x 坐标加上 20 和窗口的高度youxia QPointF(she[0].x() 20, this-height());} else {// 如果蛇头未超出上边界将左上角坐标设置为蛇头的 x 坐标和 y 坐标减去 20zuoshang QPointF(she[0].x(), she[0].y() - 20);// 右下角坐标设置为蛇头矩形的右上角坐标youxia QPointF(she[0].topRight());}// 在蛇的头部插入一个新的矩形使用左上角和右下角坐标创建矩形she.insert(0, QRectF(zuoshang, youxia)); }void Widget::addxia() {// 定义左上角和右下角的 QPointF 类型变量用于表示新矩形的坐标QPointF zuoshang; // 左上角坐标QPointF youxia; // 右下角坐标// 检查蛇头是否超出窗口的下边界if (she[0].y() 40 this-height()) {// 如果蛇头超出下边界将左上角坐标设置为蛇头的 x 坐标和 0zuoshang QPointF(she[0].x(), 0);} else {// 如果蛇头未超出下边界将左上角坐标设置为蛇头底部左侧的坐标zuoshang she[0].bottomLeft();}// 右下角坐标设置为左上角坐标加上 (20, 20) 的偏移youxia zuoshang QPointF(20, 20);// 在蛇的头部插入一个新的矩形使用左上角和右下角坐标创建矩形she.insert(0, QRectF(zuoshang, youxia)); }void Widget::addzuo() {// 定义左上角和右下角的 QPointF 类型变量用于表示新矩形的坐标QPointF zuoshang; // 左上角坐标QPointF youxia; // 右下角坐标// 检查蛇头是否超出窗口的左边界if (she[0].x() - 20 0) {// 如果蛇头超出左边界将左上角坐标设置为窗口宽度减去 20 和蛇头的 y 坐标zuoshang QPointF(this-width() - 20, she[0].y());} else {// 如果蛇头未超出左边界将左上角坐标设置为蛇头左上角坐标减去 (20, 0)zuoshang she[0].topLeft() - QPointF(20, 0);}// 右下角坐标设置为左上角坐标加上 (20, 20) 的偏移youxia zuoshang QPointF(20, 20);// 在蛇的头部插入一个新的矩形使用左上角和右下角坐标创建矩形she.insert(0, QRectF(zuoshang, youxia)); }void Widget::addyou() {// 定义左上角和右下角的 QPointF 类型变量用于表示新矩形的坐标QPointF zuoshang; // 左上角坐标QPointF youxia; // 右下角坐标// 检查蛇头是否超出窗口的右边界if (she[0].x() 20 this-width()) {// 如果蛇头超出右边界将左上角坐标设置为 0 和蛇头的 y 坐标zuoshang QPointF(0, she[0].y());} else {// 如果蛇头未超出右边界将左上角坐标设置为蛇头右上角坐标zuoshang QPointF(she[0].topRight());}// 右下角坐标设置为左上角坐标加上 (20, 20) 的偏移youxia zuoshang QPointF(20, 20);// 在蛇的头部插入一个新的矩形使用左上角和右下角坐标创建矩形she.insert(0, QRectF(zuoshang, youxia)); } 这样的话就实现了蛇的移动但是蛇需要加分所以需要小球 6.创建小球类如下 头文件如下 #ifndef QIU_H // 防止头文件重复包含的预处理指令 #define QIU_H#includeQPixmap // 包含 QPixmap 类的头文件用于处理图片 #include QObject // 包含 QObject 类的头文件用于定义对象 #includeQRect // 包含 QRect 类的头文件用于定义矩形区域class qiu : public QObject // 定义一个名为 qiu 的类继承自 QObject {Q_OBJECT // 使用 Qt 的宏标记这个类为 Qt 对象public:explicit qiu(QObject *parent nullptr); // 构造函数可以接受一个父对象指针QPixmap p; // 用于存储蛇的图片int x; // 蛇的 x 坐标int y; // 蛇的 y 坐标QRect kuang; // 蛇的判定框用于碰撞检测void gengxin(); // 用于更新蛇的移动和坐标位置的函数signals: // Qt 信号声明部分};#endif // QIU_H // 结束头文件的条件编译指令源文件cpp为 #include qiu.h // 包含自定义头文件 qiu.h #include ctime // 包含时间头文件用于获取随机种子qiu::qiu(QObject *parent) : QObject(parent) {p.load(:/C:/Users/Administrator/Pictures/tp4.png); // 加载图片文件srand((unsigned int)time(NULL)); // 使用当前时间作为随机数种子this-x rand() % (600 - 20); // 生成 x 坐标的随机值this-y rand() % (368 - 20); // 生成 y 坐标的随机值this-kuang.setWidth(20); // 设置矩形宽度为 20this-kuang.setHeight(20); // 设置矩形高度为 20kuang.moveTo(x, y); // 移动矩形到指定的 (x, y) 坐标 }void qiu::gengxin() {this-x rand() % (600 - 20); // 生成新的 x 坐标的随机值this-y rand() % (368 - 20); // 生成新的 y 坐标的随机值kuang.moveTo(x, y); // 移动矩形到新的 (x, y) 坐标 }球的属性为x坐标y坐标判定框背景图片 球的行为为瞬移在被蛇吃掉时瞬移 7.最后是判定如下在定时检查遍历蛇链表是否和小球的判定框相撞 if(she[0].intersects(yuan-kuang)){//判断蛇头元素是否和小球的框碰撞碰撞执行gengxin()函数yuan-gengxin(); } 碰撞之后执行函数 void qiu::gengxin() {this-xrand()%(600-20); //随机框内x点this-yrand()%(368-20); //随机框内y点kuang.moveTo(x,y); //随机移动 } 随机刷新到一个地方 这样就简单的实现了这个贪吃蛇的游戏
http://www.hkea.cn/news/14277275/

相关文章:

  • 网站建设业务员主要工作wordpress 搜索结果分页
  • 山西古建筑网站wordpress主页导航
  • 紫云网站建设网站策划方案范文
  • 花瓣按照哪个网站做的中国工商信息查询网
  • discuz网站编码曲靖建设局网站
  • 淘宝店铺网站建立十大软件排行榜下载
  • 如何做正规的采集网站东莞外贸网站
  • 如何增加网站的外链做公司网站的费用
  • 网站开发平台有哪些wordpress性能优化工具吗
  • 哪里有网站建设哪家好ceo是什么意思是什么职位
  • 网站建费用友链目录网
  • win10使用dw做网站小说网站80电子书怎么做
  • 网站开发技术 包括公司推广策划
  • 网站开发拒绝通知书网站诸多
  • 网站建设 全包免费网站引导页
  • 万网建设网站教程京挑客如何做网站推广
  • 只用django做网站西山区城市建设局网站
  • 莱州环球网站建设苏州搜索引擎排名优化商家
  • 手表排名哪个网站好网站开发逻辑
  • ie兼容性 网站正规男科医院收费标准
  • 手机版网站开发公司宜昌微网站建设
  • 做网站的视频教学网络技术就业方向
  • 合肥建设局网站领导专门装修的网都有什么网网站
  • 静态网站网站链接dw怎么做
  • 网页设计与网站建设有区别吗南京手机网站设计
  • 区块链交易网站开发wordpress ios 源码
  • 青海省交通建设工程质量监督站网站通过ip访问网站需要怎么做
  • 网站建设怎么样网站托管运营所需资料
  • 网站搭建后台中国政务网站建设绩效评估
  • 网站群建设公司排行榜6网站开发软件科技公司