`
xiaoyao1052
  • 浏览: 2139 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

简单的扫雷统计的程序

阅读更多
/**
 * 	玩过扫雷游的朋友都知道,该游戏的目标是找出一个n*m矩阵内的所有的地雷
 * ,在本题中,你需要为每一个单元格统计出它周围地雷的个数,每个单元格最多有8个相邻单元格,如下图,4*4 的格子里,
 * 用“*”表示雷,用“^” 表示没有雷。
* ^ ^ ^ * ^ ^ ^
* ^ * * * * ^ ^
^ * ^ ^ * * ^ ^
^ ^ * * ^ * * ^
^ * ^ ^ * * ^ ^
* ^ ^ ^ * ^ ^ ^
^ ^ * * ^ * * ^
^ * ^ ^ * * ^ ^
 计算后的输出结果为:
* 3 2 4 * 3 1 0 
* 4 * * * * 2 0 
2 * 5 6 * * 4 1 
2 3 * * 6 * * 1 
2 * 3 4 * * 3 1 
* 3 3 4 * 5 3 1 
2 3 * * 5 * * 1 
1 * 3 3 * * 3 1 
 * @author user
 *
 */
import java.util.*;

class Point {
	private int x;

	private int y;

	private int value = 0;

	private String symbol;

	public String getSymbol() {
		return symbol;
	}

	public void setSymbol(String symbol) {
		this.symbol = symbol;
	}

	public Point() {
	}

	public Point(int x, int y) {
		setX(x);
		setY(y);
	}

	public Point(int x, int y, int value) {
		this(x, y);
		setValue(value);
	}

	public Point(int x, int y, String symbol) {
		this(x, y);
		setSymbol(symbol);
	}

	public int getValue() {
		return value;
	}

	public void setValue(int value) {
		this.value = value;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}

	/**
	 * 判断该点左侧是否有雷
	 * @param ps
	 * @return
	 */
	public int leftRow(Point[][] ps) {
		int value = 0;
		if (this.getX()>0) {	//如果该点内容不是“*”并且不在该行的第一个位置,则判断左侧点的内容
			if (ps[this.getY()][this.getX() - 1].getSymbol().equals("*")) {
				value++;		//如果左侧点内容为“*”,则计数器加1
			} else {
				return value;
			}
		}
		else
		{
			return value;		//如果该点的x值为0,则直接返回计数器为0;
		}
		return value;
	}
	/**
	 * 判断该点右侧是否有雷
	 * @param ps
	 * @return
	 */
	public int rightRow(Point[][] ps) {
		int value = 0;
		if (this.getX()<ps[this.getY()].length-1) {
			if (ps[this.getY()][this.getX() + 1].getSymbol().equals("*")) {
				value++;
			} else {
				return value;
			}
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点上方是否有雷
	 * @param ps
	 * @return
	 */
	public int upCol(Point[][] ps) {
		int value = 0;
		if (this.getY()>0) {
			if (ps[this.getY()-1][this.getX()].getSymbol().equals("*")) {
				value++;
			} else {
				return value;
			}
			
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点下方是否有雷
	 * @param ps
	 * @return
	 */
	public int downCol(Point[][] ps) {
		int value = 0;
		if (this.getY()<ps.length-1) {
			if (ps[this.getY()+1][this.getX()].getSymbol().equals("*")) {
				value++;
			} else {
				return value;
			}
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点左上方是否有雷
	 * @param ps
	 * @return
	 */
	public int upLeftRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()>0) {
			value= ps[this.getY()-1][this.getX()].leftRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点右上方是否有雷
	 * @param ps
	 * @return
	 */
	public int upRightRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()>0) {
			value= ps[this.getY()-1][this.getX()].rightRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点左下方是否有雷
	 * @param ps
	 * @return
	 */
	public int downLeftRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()<ps.length-1) {
			value= ps[this.getY()+1][this.getX()].leftRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
	/**
	 * 判断该点右下方是否有雷
	 * @param ps
	 * @return
	 */
	public int downRightRow(Point[][] ps)
	{
		int value = 0;
		if (this.getY()<ps.length-1) {
			value= ps[this.getY()+1][this.getX()].rightRow(ps);
		}
		else
		{
			return value;
		}
		return value;
	}
}

public class Test03 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sca = new Scanner(System.in);
		System.out.println("请输入扫雷游戏的行数和列数:");
		int row = sca.nextInt();
		int col = sca.nextInt();
		System.out.println("请输入雷区:雷用'*'表示,非雷用'^'表示,中间用空格隔开:");
		Point[][] p = new Point[row][];
		for (int i = 0; i < p.length; i++) {
			p[i] = new Point[col];
			for (int j = 0; j < p[i].length; j++) {
				p[i][j] = new Point(j, i, sca.next());
			}
		}
		System.out.println("您输入的扫雷游戏判定结果如下:");
		for (int i = 0; i < p.length; i++) {
			for (int j = 0; j < p[i].length; j++) {
			
				if(p[i][j].getSymbol().equals("*"))
				{
					System.out.print(p[i][j].getSymbol()+" ");
					continue;
				}
				else
				{
					System.out.print(p[i][j].leftRow(p)+p[i][j].rightRow(p)+p[i][j].upCol(p)+p[i][j].downCol(p)+p[i][j].upLeftRow(p)+p[i][j].upRightRow(p)+p[i][j].downLeftRow(p)+p[i][j].downRightRow(p)+" ");
				}
			}
			System.out.println();
		}

	}

}
分享到:
评论

相关推荐

    在vc6.0下编写的扫雷程序

    扫雷,这款经典的小游戏,以其简单易懂的规则和挑战性深受广大用户的喜爱。本文将深入探讨如何使用C++编程语言,在Microsoft Visual C++ 6.0(简称VC6.0)集成开发环境中,基于MFC(Microsoft Foundation Classes)...

    js实现扫雷小程序的示例代码

    【扫雷小程序实现详解】 扫雷小程序是一种基于JavaScript编程语言实现的经典小游戏,它遵循Windows操作系统中的扫雷规则。本文将详细介绍如何使用JavaScript实现一个扫雷小程序,并解析其中的关键技术和算法。 **...

    商业编程-源码-仿 Windows 自带扫雷的小程序.zip

    《仿Windows自带扫雷小程序的源码解析》 在计算机编程的世界里,Windows操作系统自带的扫雷游戏无疑是一款经典的小程序。它不仅简单易玩,更蕴含了丰富的算法设计和用户体验考虑。本压缩包文件“商业编程-源码-仿 ...

    C#编写的扫雷游戏的源程序

    8. **多线程**:如果扫雷游戏有后台进程(如统计玩家数据、保存游戏进度),则可能涉及多线程编程,C#的System.Threading命名空间提供了线程管理和同步的相关类。 9. **状态机设计**:扫雷游戏的逻辑可以看作一个...

    简易扫雷游戏的java实现

    总的来说,实现简易扫雷游戏的Java版本是一个涉及GUI设计、事件处理、算法应用、游戏逻辑等多个方面的综合性编程任务。通过这个项目,开发者不仅可以巩固Java基础知识,还能提升对游戏开发的理解和实践能力。

    Windows原版扫雷源码

    Windows操作系统中的扫雷游戏,作为一个经典的小程序,深受用户喜爱。它的简洁界面、策略性玩法以及隐藏在数字背后的逻辑,使其成为编程学习者的理想研究对象。本文将从Windows原版扫雷源码的角度出发,详细探讨其...

    VC++ 扫雷游戏 源码

    这样的设计使得在程序中判断某个格子是否为雷变得简单直接。 在游戏逻辑上,开发者创建了自定义的视图类,这些类包含了游戏的各个关键功能,如点击格子、标记雷、计算周围雷数等。视图类的设计是面向对象编程思想的...

    Java扫雷设计报告

    Java扫雷是一款深受各年龄层用户喜欢的经典益智游戏,它在简单的规则下蕴含着丰富的策略挑战。本设计报告将详细阐述如何使用Java语言实现扫雷游戏。 ### 1. 需求分析 1.1 设计背景 扫雷游戏因其易于上手和独特的...

    扫雷小游戏源代码和exe文件

    在执行过程中,程序会根据用户选择的难度(简单、中等、困难)设置不同数量的雷。这通常通过设置雷区大小和雷的数量来实现。游戏的结束条件是玩家标记出所有雷或者踩到一颗雷,此时会显示游戏结束界面,并计算完成...

    c#扫雷代码(简装版)

    6. **控件交互**:在扫雷游戏中,按钮代表雷区的格子,点击按钮后,程序需要更新按钮的文本和外观,以显示其状态(数字、标记或空格)。这涉及到了对控件状态的修改和同步。 7. **错误处理**:为了提高用户体验,...

    VC++6.0小游戏--扫雷源代码

    扫雷是一款经典的益智游戏,它起源于早期的计算机时代,由于其简单易上手,但又具有很高的挑战性,深受广大用户的喜爱。在微软的Windows操作系统中,扫雷游戏作为内置游戏之一,陪伴了无数用户度过闲暇时光。 **...

    扫雷(鼠标键盘均可操作、TC)

    扫雷,一款经典的益智游戏,以其简单易学却又充满挑战性的特点深受用户喜爱。本项目是基于TC(Turbo C)编译器实现的一个扫雷版本,支持鼠标和键盘双重操作,与Windows系统自带的扫雷游戏在功能上基本保持一致。下面...

    项目-扫雷游戏及文档

    4. **数据库设计图**:尽管扫雷游戏可能并不需要复杂的数据库存储,但设计一个简单的数据库用于记录游戏历史或用户成就也是可能的。数据库设计图将展示数据表结构、字段和它们之间的关系。 5. **程序类设计图**:这...

    C++控制台扫雷源码

    在本文中,我们将深入探讨如何使用C++编程语言实现一个简单的控制台版扫雷游戏。这个项目对于初学者来说是一个很好的实践,因为它涉及到C++的基本语法、数组的应用以及逻辑控制。我们将关注以下几个关键知识点: 1....

    Windows 经典游戏-扫雷 源码

    在扫雷游戏中,可能包含玩家的统计数据,如完成时间、胜利次数等。 3. `Mine.cpp`:这个名字暗示了这可能是核心逻辑的实现,包括雷区生成、雷的位置计算、点击格子后的判断逻辑等。这部分代码是游戏的核心,决定了...

    扫雷的源代码

    根据提供的源代码,我们可以分析出这是一段用C语言编写的扫雷游戏程序。下面将对这段代码的关键知识点进行详细解读。 ### 1. 宏定义与数据结构 #### 宏定义 - `#include&lt;graphics.h&gt;`:包含了用于图形处理的头文件...

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

    在本篇介绍中,我们将探讨如何使用C语言实现一个简单的扫雷小游戏。扫雷游戏是一种经典的游戏,旨在训练玩家的空间推理和逻辑能力。通过提供的代码片段,我们可以看到以下几个关键知识点: 1. **游戏菜单**: 游戏...

    自制仿windows扫雷

    扫雷游戏虽然规则简单,但其背后的编程实现涉及了多个关键知识点,包括事件处理、图形用户界面(GUI)设计、随机数生成以及算法应用等。 首先,C++是这个项目的基础,它是一种静态类型、编译式的通用编程语言,支持...

    扫雷小游戏蛮好的哦很详细呢

    扫雷小游戏是一款经典且普及的游戏,它以简单的规则和丰富的策略性吸引了众多玩家。这款小游戏在编程领域中常被用作教学示例,因为它能够帮助初学者理解基础的逻辑编程、事件处理以及游戏循环等概念。本文将深入探讨...

    《Visual Basic 2008应用程序开发实例精讲》全书所有实例程序源代码

    第15章 简易绘图工具的设计312 15.1 实例功能说明312 15.2 设计思路与相关技术313 15.2.1 主要设计思路313 15.2.2 相关技术点拨313 15.3 程序实现与代码319 15.4 实例总结324 第16章 制作自己的看图工具325 16.1 ...

Global site tag (gtag.js) - Google Analytics