用二维数组画出地图

在超级玛丽或坦克大战中,有许多的障碍物,如果一个个描述,代码量十分巨大,故可以采取使用二维数组画出地图的方法。
在这里插入图片描述
用二维数组画地图的实质是利用数组下标来表示窗体中的某些点,如上图一个 4*4的方格就代表你的窗体,假设小方格为 长宽皆为 50 像素的正方形。
如果你想以黄色五角星为标准画出一个砖块,该怎样画。
观察方格图可得黄色五角星下标为 (2,2)
假设先创建一二维数组表示窗口,空白地的下标对应内容为 0 ,而下标(2,2)因为要画出砖块,所以内容写为 1

 int[]arry ={
    [0,0,0,0],
    [0,0,0,0],
    [0,0,1,0],
    [0,0,0,0]
 }
 //两次for遍历二维数组
 for(int i=0;i<arry.length;i++){
     for(int j=0;j<arry[0].length;j++){
        //判断如果遍历到你需要画出图片的下标,在此处利用下标画出图片
        if(arry[i][j]==1){
          g.drawImage(img,j*50,i*50,50,50,null);
        }
     }
 }

后续游戏编写过程中的碰撞检测问题,也可以用双重for循环来遍历检测人物或子弹是否与墙的碰撞等,减少大量代码量。
如果不理解可先参考杨辉三角。

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
好的,下面是具体的代码实现过程。 首先,在Qt的widget界面中创建一个QuickWidget控件,用于显示QML界面: ```cpp // 创建 QuickWidget 控件 QQuickWidget *quickWidget = new QQuickWidget(this); // 加载 QML 界面 quickWidget->setSource(QUrl("qrc:/qml/main.qml")); ``` 接着,在主函数中使用 QVariantList 生成一系列二维数组,并将其传递至QML界面: ```cpp // 创建 QVariantList 对象 QVariantList list; // 向 QVariantList 中添加二维数组 QVariantList array1; array1 << QVariantList{10, 10} << QVariantList{20, 20} << QVariantList{30, 30}; list << QVariant::fromValue(array1); QVariantList array2; array2 << QVariantList{40, 40} << QVariantList{50, 50} << QVariantList{60, 60}; list << QVariant::fromValue(array2); // 向 QML 界面发送 QVariantList 对象 QObject *rootObject = quickWidget->rootObject(); QMetaObject::invokeMethod(rootObject, "setData", Q_ARG(QVariant, QVariant::fromValue(list))); ``` 最后,在QML界面中,使用MapCircle元素绘制这些数据点: ```qml import QtQuick 2.12 import QtQuick.Controls 2.12 import QtLocation 5.12 Item { id: root width: 800 height: 600 // 接收从 C++ 代码传递过来的数据 function setData(data) { for (var i = 0; i < data.length; i++) { var array = data[i]; for (var j = 0; j < array.length; j++) { var point = array[j]; // 创建 MapCircle 元素 var circle = Qt.createQmlObject("import QtLocation 5.12; MapCircle {}", root); circle.center = QtPositioning.coordinate(point[0], point[1]); circle.radius = 100; circle.color = "red"; circle.border.width = 2; circle.border.color = "white"; } } } // 创建地图控件 Map { id: map anchors.fill: parent plugin: Plugin { name: "osm" } zoomLevel: 14 } } ``` 在setData()函数中,遍历C++代码传递过来的二维数组,创建MapCircle元素,并设置其位置、颜色等属性。最后,在QML界面中创建地图控件,用于显示这些数据点。 这样,我们就使用Qt和QML实现了将二维数组传递至QML界面,并用MapCircle元素在地图上绘制这些数据点的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值