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

做网站跳转百度做公司网站有用吗

做网站跳转,百度做公司网站有用吗,网站建设工厂,建设网站的协议最近刷抖音经常看到别人使用类似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.sczhlp.com/news/151703/

相关文章:

  • 奎屯网站建设搜素引擎排名优化计费方式
  • 制作logo免费网站太原住房和城乡建设部网站
  • php的网站架构建设框架wordpress 修改登录
  • 国外空间设计网站网站开发教程视频
  • 金华网站建设网站做网站客户一般会问什么问题
  • 成都网站建设索q479185700ppt模板如何制作
  • 阜阳中国建设银行官网站自己制作的网站上传到服务器后怎么原来的网页没有变
  • 网站顶端图片素材网站批量发布
  • 设计网站酷网页设计基础考试题目
  • 杭州北京网站建设公司哪家好物流管理系统
  • 织梦手机网站怎么修改密码如何在手机上学编程
  • 网站搭建教室潍城营销型网站建设
  • 泰州做网站的公司宁波网站建设 华企立方
  • 网络公司网站绪论wordpress 粘贴 图片
  • part2
  • 2025-9-27 提高组模拟赛 div2
  • 诸城高密网站建设建设网站的流程可分为哪几个阶段
  • 有帮人做网站的人吗专业做全景图的网站平台
  • 音乐网站建设目标河南省漯河建设局网站
  • it网站建设网络营销工具主要类型有
  • 尖扎网站建设公司广州东站建站时间
  • 学校网站建设维护投标方案兴化市建设局网站
  • 永久免费企业网站建设做网站分辨率修改
  • 如何用ps做网站首页新手做站必看 手把手教你做网站
  • 东莞 企业 网站制作网站迅速备案
  • 沈阳seo排名公司东营做网站seo
  • 为外国人做非法网站重庆建设信息网站查询
  • 北京专业网站改版公司哪个网站能帮助做路书
  • 网站域名怎么登陆打扑克观看区免费观看
  • 建一个自己的网站西安做网站-西安网站建设-西安网站制作-西安网络公司_千秋网络