public int[][] getMap(){ return map; } public int[][] getResetMap(){//获取再次打乱后的地图信息 ArrayList<Integer> list = new ArrayList<Integer>();//list用来存储原先的地图信息 for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ list.add(map[i][j]); map[i][j]=-1; } } //将原先地图上剩余的图片打乱 while(!list.isEmpty()){ int index = (int) (Math.random()*list.size());///从list中随机取一个图片ID,并将其添加到数组中,再从list中删除掉它 boolean flag = false; while(!flag){ int i = (int) (Math.random()*n);//获取随机的地图行列 int j = (int) (Math.random()*n); if(map[i][j]==-1){//如果该位置无图片 map[i][j] = list.get(index); list.remove(index); flag = true; } } } 详细解释一下这段代码
时间: 2024-01-27 10:06:14 浏览: 79
这段代码是MapUtil类中的两个方法之一,用于获取再次打乱后的地图信息。具体实现的步骤如下:
1. 创建一个ArrayList对象list,用来存储原先的地图信息。
2. 通过两个for循环遍历二维数组map中的每个元素,将其添加到list中,并将map中的元素重置为-1,表示该位置没有图片。
3. 使用while循环,从list中随机取出一个图片ID,将其添加到map中。如果该位置已经有图片,则需要重新随机选择一个位置,直到找到一个空位置为止。每次将一个图片ID添加到map中后,都需要将其从list中删除。
4. 循环执行步骤3,直到list中的所有图片ID都被添加到map中。
5. 返回打乱后的地图信息,即二维数组map。
通过这个方法,可以实现对地图布局的再次打乱,增加游戏的难度和趣味性。需要注意的是,在实际开发中,还需要实现其他功能,如点击消除、判断是否可以消除等等。
相关问题
getMap(lnglat) { console.log(lnglat) let _this = this; let a=''; if (lnglat!=null){ a=lnglat.split(","); } //创建地图 //marker点 if(lnglat===''){ map = new AMap.Map("map", { // mapStyle: 'amap://styles/grey', resizeEnable: true, zoom: 16, center: [120.577387,30.059971], }); }else { map = new AMap.Map("map", { // mapStyle: 'amap://styles/grey', resizeEnable: true, zoom: 16, center: [a[0], a[1]], }); } map.on("click", showInfoClick); function showInfoClick(e) { map.clearMap();//清理地图 let lng = e.lnglat.getLng(); //获取经度 let lat = e.lnglat.getLat(); //获取纬度 //marker点 let marker = new AMap.Marker({ position: [lng, lat], offset: new AMap.Pixel(0, 0) }); _this.lnglat = lng + "," + lat;//将经纬度绑定至input输入框 map.add(marker); //加载点 map.setFitView(); //缩放至地图 } },
这段代码是一个 JavaScript 函数,名为 `getMap`。这个函数接受一个参数 `lnglat`,它的作用是创建一个高德地图,根据用户传入的经纬度信息设置地图的中心点和缩放级别,并在地图上添加一个标记点。具体来说,函数首先通过 `split` 方法将 `lnglat` 这个字符串以逗号为分隔符分成两个部分,分别代表经度和纬度。然后,如果 `lnglat` 为空字符串,就创建一个默认的地图,中心点坐标为 [120.577387,30.059971];否则,就使用用户传入的经纬度信息创建地图。接下来,函数绑定了地图的 `click` 事件,当用户在地图上点击时,会触发一个名为 `showInfoClick` 的函数。这个函数会在用户点击的位置上添加一个标记点,并将经纬度信息绑定在输入框中。最后,函数调用了 `map.setFitView()` 方法,使地图缩放到最佳级别,以便用户能够看到标记点。
请为以下Android代码创建一个适用的XML格式界面文件:Activity.java import android.app.Activity; import android.os.Bundle; import android.widget.FrameLayout; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapFragment; import android.widget.ListView; import java.util.ArrayList;public class Activity extends Activity {// 定义map和list private GoogleMap map; private ListView list;// 定义地址数组 private ArrayList<String> address;@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);// 加载布局 setContentView(R.layout.activity_main);// 初始化地图 map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();// 初始化列表 list = (ListView) findViewById(R.id.list);// 设置地址数组 address = new ArrayList<String>(); address.add("北京市"); address.add("上海市"); address.add("广州市");// 设置列表数据 ListAdapter adapter = new ListAdapter(this, address); list.setAdapter(adapter); } }
以下是一个简单的XML格式的界面文件,适用于上面提到的代码:
```
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<fragment
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />
</FrameLayout>
```
该界面包含了一个包含地图和列表视图的帧布局,地图是一个Google地图碎片,而列表视图是一个简单的ListView。碎片和列表都设置了ID属性,以便在Java代码中引用它们。
阅读全文