Java练习(模拟扫雷游戏)

Posted roadlandscape

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java练习(模拟扫雷游戏)相关的知识,希望对你有一定的参考价值。

        要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示。如某位置为地雷,则该位置用数字-1表示,
如该位置不是地雷,则暂时用数字0表示。
编写程序完成在该二维数组中随机布雷的操作,程序读入3个参数:布雷面板的行数(r),列数(c),布置的地雷个数(n),
且要满足0<n<r*c*0.75(即布置地雷的最大密度为75%),程序运行后将n个地雷随机地布置在r*c的二维数组,布置完成后进行扫雷游戏。

import java.util.*;

public class Minesweeper {
    public static void main(String[] args) {
        Scanner scn = new Scanner(System.in);
        //输入行和列
        int r = Integer.parseInt(scn.nextLine());
        int c = Integer.parseInt(scn.nextLine());
        if(r<2 || c<2)
        {
            System.out.println("输入的行列无效。");
            return;
        }
        //定义一个二维数组来布雷
        int[][] a = new int[r][c];
        Random rnd = new Random();
        //随机给出雷的个数
        int n = rnd.nextInt((int)(r*c*0.75));
        System.out.println("雷的个数:"+n);
        while(n>0)
        {
            //随机的布雷,随机产生雷所在行和列
            int rr = rnd.nextInt(r);
            int cc = rnd.nextInt(c);
            if(a[rr][cc]!=-1)
            {
                a[rr][cc]=-1;
                n--;
            }
        }
        //扫雷
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                int lei=0;
                if(a[i][j] == 0)
                {
                    if(i-1>=0 && j-1>=0 && a[i-1][j-1]==-1)
                        lei++;
                    if(i-1>=0 && a[i-1][j]==-1)
                        lei++;
                    if(j<c-1)
                    {
                        if(i-1>=0 && a[i-1][j+1]==-1)
                            lei++;
                        if(a[i][j+1]==-1)
                            lei++;
                    }
                    if(j-1>=0 && a[i][j-1]==-1)
                        lei++;
                    if(i<r-1)
                    {
                        if(j-1>=0 && a[i+1][j-1]==-1)
                            lei++;
                        if(a[i+1][j]==-1)
                            lei++;
                    }
                    if(i<r-1 && j<c-1)
                    {
                        if(i+1>=1 && j+1>=1 && a[i+1][j+1]==-1)
                            lei++;
                    }
                    a[i][j]=lei;
                }
            }
        }
        //输出
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                System.out.print(a[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

 




以上是关于Java练习(模拟扫雷游戏)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5965 扫雷 模拟 (中国大学生程序设计竞赛(合肥))

模拟扫雷游戏

数组小练习——扫雷

JavaScript扫雷游戏mineClearance

JavaScript扫雷游戏mineClearance

JavaScript扫雷游戏mineClearance