Android实现扫雷小游戏

本文实例为大家分享了Android实现扫雷小游戏的具体代码,供大家参考,具体内容如下

先看效果图:

初始游戏界面:

翻开块和标记块界面:

游戏结束界面:

菜单界面:

更换难度界面:

查看游戏记录界面:

代码分析

Block.java

这部分代码实现的是游戏界面的板块

设置四个变量来记录当前块是否被翻开,当前块是否是地雷,是否把当前快标记为地雷(也就是插旗子),当前块周围的地雷数量。

关键部分代码:

//设置翻开状态
public void setNumberOfSurroundingMines(int number) {
  this.setBackgroundResource(R.drawable.selected);//设置翻开背景图
  updateNumber(number);//设置周围雷数
}

//添加雷块标识
public void setMineIcon() {
  this.setBackgroundResource(R.drawable.dl);
}

//添加标记标识
public void setFlagIcon(boolean enabled) {

  if (!enabled) {
    this.setBackgroundResource(R.drawable.hq);
  } else {
    this.setTextColor(Color.BLACK);
  }
}

//清除所有标记
public void clearAllIcons() {
  this.setText("");
  this.setTextColor(R.drawable.unselected);
}

private void setBoldFont() {
  this.setTypeface(null, Typeface.BOLD);
}

//翻开方块
public void OpenBlock() {
  if (!isCovered) {
    return;
  }
  isCovered = false;
  //如果为雷设置地雷标识
  if (hasMine()) {
    setMineIcon();
  } else {
    setNumberOfSurroundingMines(numberOfMinesInSurrounding);//根据周围雷数设置翻开状态及显示数字
  }
}

LevelActivity

这部分把玩家选择的难度easy或hard传递给MenuActivity

package com.example.saolei;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class LevelActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_level);
  }

  /*根据不同难度返回相应参数*/
  public void Easy(View view) {
    Intent data = new Intent();
    data.putExtra("result", "easy");
    setResult(2, data);
    finish();
  }

  public void Hard(View view) {
    Intent data = new Intent();
    data.putExtra("result", "hard");
    setResult(2, data);
    finish();
  }

  public void Return(View view) {
    Intent data = new Intent();
    data.putExtra("result", "");
    setResult(2, data);
    finish();
  }
}

MenuActivity

这部分是菜单页面,包括难度选择和游戏记录的查看

这里接收难度选择界面传回的参数并将其传回主界面处理

package com.example.saolei;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;

public class MenuActivity extends AppCompatActivity {
  String t = "easy";
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);
  }

  @Override
  //接收难度界面传回的参数并将其传回主界面处理
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == 2) {
      Intent level = new Intent();
      t = data.getStringExtra("result");
      level.putExtra("result", t);
      setResult(1, data);
      finish();
    }
  }

  //点击新游戏按钮,将结果传回主界面
  public void NewGame(View view) {
    Intent data = new Intent();
    data.putExtra("result", "newgame");
    setResult(1, data);
    finish();
  }

  //点击改变难度按钮,启动难度选择界面
  public void ChangeLevel(View view) {
    Intent level = new Intent(MenuActivity.this, LevelActivity.class);
    startActivityForResult(level, 2);
  }

  //点击游戏记录按钮,显示记录
  public void Record(View view) {
    String filename = getExternalCacheDir().getAbsolutePath() + "/gamerecord.txt";//文件路径
    File file = new File(filename);
    Scanner inputStream = null;
    FileInputStream fis = null;
    BufferedReader br = null;
    String str;
    String message = "   " + "级别" + "    " + "胜负" + "     " + "时间\n";
    //若文件不存在,显示暂无记录
    if (!file.exists()) {
      new AlertDialog.Builder(this)
          .setMessage("暂无记录!")
          .setNegativeButton("确定", null)
          .create().show();
    }
    else {
      try {
        //读取文件记录并生成对话框显示
        inputStream = new Scanner(new FileInputStream(filename));
        int i = 1;
        fis = new FileInputStream(filename);
        br = new BufferedReader(new InputStreamReader(fis));
        while ((str = br.readLine()) != null) {
          message = message + (i + ". " + str + "\n");
          i++;
        }
        new AlertDialog.Builder(this)
            .setMessage(message)
            .setNegativeButton("确定", null)
            .create().show();
        fis.close();
        br.close();
      } catch (FileNotFoundException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      } finally {
        inputStream.close();
      }
    }
  }

  //点击返回按钮,回传结果到主界面
  public void Return1(View view) {
    Intent data = new Intent();
    data.putExtra("result", "start");
    setResult(1, data);
    finish();
  }
}

MainActivity

这部分是主体内容,包括游戏初始化,雷区的创建,游戏胜负的判定,游戏结果的存档等

这部分比较长,就不贴代码了

最后附上完整项目链接

更多有趣的经典小游戏实现专题,分享给大家:

C++经典小游戏汇总

python经典小游戏汇总

python俄罗斯方块游戏集合

JavaScript经典游戏 玩不停

java经典小游戏汇总

javascript经典小游戏汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android 实现扫雷小游戏实例代码

    Android 实现扫雷小游戏实例 最近学习Android 应用编程,抽空做个小应用,大家熟悉的扫雷应用,练手用, 以下是实现代码: MainActivity 类 public class MainActivity extends Activity implements OnClickListener, OnLongClickListener { // 最外层布局 LinearLayout textviews; LinearLayout buttons; int[][] map = new in

  • Android实现扫雷小游戏

    本文实例为大家分享了Android实现扫雷小游戏的具体代码,供大家参考,具体内容如下 先看效果图: 初始游戏界面: 翻开块和标记块界面: 游戏结束界面: 菜单界面: 更换难度界面: 查看游戏记录界面: 代码分析 Block.java 这部分代码实现的是游戏界面的板块 设置四个变量来记录当前块是否被翻开,当前块是否是地雷,是否把当前快标记为地雷(也就是插旗子),当前块周围的地雷数量. 关键部分代码: //设置翻开状态 public void setNumberOfSurroundingMines(

  • 分享自己用JS做的扫雷小游戏

    引用了jQuery,节省了很多鼠标点击上的判断.界面显然都是照搬Windows的扫雷啦,详细的内容注释里都有,我就不啰嗦啦~ 先上截图~ 引用了jQuery,节省了很多鼠标点击上的判断 界面显然都是照搬Windows的扫雷啦 详细的内容注释里都有,我就不啰嗦啦~ JS部分 var mineArray, //地雷数组 lastNum, //剩余雷数 countNum, //未被揭开的方块数 inGame = 0, //游戏状态,0为结束,1为进行中,2为初始化完毕但未开始 startTime; /

  • Android植物大战僵尸小游戏

    Android植物大战僵尸小游戏全部内容如下: 相关下载:Android植物大战僵尸小游戏 具体代码如下所示: package com.example.liu.mygame; import com.example.liu.mygame.global.Config; import com.example.liu.mygame.tools.DeviceTools; import com.example.liu.mygame.view.GameView; import android.os.Bundl

  • Android实现2048小游戏

    本文实例介绍了Android实现2048小游戏的相关代码,分享给大家供大家参考,具体内容如下 根据界面,主要实现4*4的格子方块比较麻烦,其他的都挺简单的.总体为实现4*4的格子,自定义GridLayout,并在其中添加触摸监听事件,进行一系列的操作,从而实现游戏的逻辑,最后再添加动画效果即可完成. 下面是设计思路: 一.GameView的设计 首先自定义一个类,继承GridLayout,添加两个构造方法 public class GameView extends GridLayout { //

  • Android实现拼图小游戏

    本文实例为大家分享了Android实现拼图小游戏的具体代码,供大家参考,具体内容如下 目标效果: 1.activity_main.xml页面: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schem

  • HTML+JavaScript实现扫雷小游戏

    本文实例为大家分享了JavaScript实现扫雷小游戏的具体代码,供大家参考,具体内容如下 工具:Sublime Text / Dreamweaver /Hbuilder <!doctype html> <html> <head> <meta charset="utf-8"> <title>SaoLei</title> <style type="text/css"> table {

  • C语言实现简单扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <time.h> /* 用 C 语言写一个简单的扫雷游戏 */ // 1.写一个游戏菜单 Menu() // 2.开始游戏 // 1.初始化二维数组 Init_Interface() // 2.打印游戏界面 Print_Interfa

  • java实现扫雷小游戏

    本文实例为大家分享了java实现扫雷小游戏的具体代码,供大家参考,具体内容如下 代码: package GUI; import java.util.Random; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.awt.BorderLayout; import java.awt.GridLayo

  • C语言代码实现扫雷小游戏

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 主页面: 游戏页面: 虽然页面比较low,但我已经尽力了 具体代码实现: #include<stdio.h> #include<windows.h> #include<conio.h> #include<stdlib.h> #include<time.h> int n;//记录已经探索的区域数 int x,y;//光标的横纵坐标 int T;//判断游戏是否失败,T=1

随机推荐