Android 小项目练手——扫雷

    xiaoxiao2026-09-15  0

    这两天 闲的没事想起来写一个 小游戏练练手,也为了巩固 基础知识吧 ,这段时间我会定期的 写一些小项目。  今天第一篇: 扫雷——Android 版

    第一: 新建项目

      1: 布局文件:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:id="@+id/root"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="match_parent" >        <LinearLayout            android:layout_centerInParent="true"         android:id="@+id/linear_map"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:orientation="vertical" >     </LinearLayout> </RelativeLayout>

    2 MainActivity

    package com.farsight.test0816; import java.util.Random; import android.os.Bundle; import android.app.Activity; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.Toast; public class MainActivity extends Activity { private LinearLayout linearMap; private final int wight = 10; private final int hight = 10; private int boomNumber = 20; private Boom[][] map = new Boom[wight][hight]; private ImageView imageView; private ImageView im; // 内部类中的 imageview private int ID = 0; private int imageX; private int imageY; private int boomCount = 0; private int[] countID = new int[] { R.drawable.s1, R.drawable.s2, R.drawable.s3, R.drawable.s4, R.drawable.s5, R.drawable.s6, R.drawable.s7, R.drawable.s8, }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); linearMap = (LinearLayout) findViewById(R.id.linear_map); initMap(); initUiMap(); addBoom(); printMap(); } /** * 初始化地图 */ private void initUiMap() { // 设置 布局属性 LayoutParams lp = new LayoutParams(60, 60); for (int i = 0; i < hight; i++) { // 创建 横向 布局 final LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.HORIZONTAL); for (int j = 0; j < wight; j++) { imageView = new ImageView(this); imageView.setImageResource(R.drawable.s); imageView.setId(ID); // 把图片加入到布局中 同时把属性作为 imageview 的属性加入 layout.addView(imageView, lp); map[i][j].setID(ID); ID++; // 图片设置监听 imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { im = (ImageView) v; int id = im.getId(); changeLocation(id); if (selectBoom(imageX, imageY)) { im.setImageResource(R.drawable.bomb); Toast.makeText(MainActivity.this, "完蛋了!!", Toast.LENGTH_SHORT).show(); } else { // im.setImageResource(R.drawable.flag); manyBoom(imageX, imageY); if (boomCount > 0) { // 当周围雷的个数大于0 时显示雷个数 changeIcon(boomCount); boomCount = 0; } else { showNoBoom(); } } } }); } // 把布局 加入到xml 中的布局中 linearMap.addView(layout); } } // 初始化二维数组 public void initMap() { for (int i = 0; i < hight; i++) { for (int j = 0; j < wight; j++) { map[i][j] = new Boom(); } } } // 加入地雷 public void addBoom() { int x; int y; Random random = new Random(); for (int i = 1; i <= boomNumber; i++) { do { x = random.nextInt(10); y = random.nextInt(10); } while (map[y][x].getBoom()); map[x][y].setBoom(true); } } // 查询某个位置是否有雷 public boolean selectBoom(int x, int y) { if (map[x][y].getBoom()) { return true; } else { return false; } } // 把 ID 转为 x Y值 public void changeLocation(int im) { switch (im / 10) { case 0: imageX = 0; imageY = im; break; case 1: imageX = 1; imageY = im % 10; break; case 2: imageX = 2; imageY = im % 20; break; case 3: imageX = 3; imageY = im % 30; break; case 4: imageX = 4; imageY = im % 40; break; case 5: imageX = 5; imageY = im % 50; break; case 6: imageX = 6; imageY = im % 60; break; case 7: imageX = 7; imageY = im % 70; break; case 8: imageX = 8; imageY = im % 80; break; case 9: imageX = 9; imageY = im % 90; break; case 10: imageX = hight - 1; imageY = wight - 1; break; } } // 打印地图 private void printMap() { for (Boom[] item : map) { for (Boom boom : item) { System.out.print(boom.getBoom() ? 1 : 0); } System.out.println(); } } // 遍历 某个点 对应周围的地雷数 private int manyBoom(int x, int y) { for (int i = (x == 0 ? x : x - 1); (x == hight - 1 ? i <= x : i <= x + 1); i++) { // 横向循环 y坐标在外面 for (int j = (y == 0 ? y : y - 1); (y == wight - 1 ? j <= y : j <= y + 1); j++) { if (selectBoom(i, j)) { boomCount++; } } } return boomCount; } // 显示周围雷的个数 private void changeIcon(int bcount) { im.setImageResource(countID[bcount - 1]); } // 显示没有雷的 private void showNoBoom() { im.setImageResource(R.drawable.s0); } }

    转载请注明原文地址: https://ju.6miu.com/read-1312068.html
    最新回复(0)