/**
* 玩过扫雷游的朋友都知道,该游戏的目标是找出一个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();
}
}
}
分享到:
相关推荐
扫雷,这款经典的小游戏,以其简单易懂的规则和挑战性深受广大用户的喜爱。本文将深入探讨如何使用C++编程语言,在Microsoft Visual C++ 6.0(简称VC6.0)集成开发环境中,基于MFC(Microsoft Foundation Classes)...
【扫雷小程序实现详解】 扫雷小程序是一种基于JavaScript编程语言实现的经典小游戏,它遵循Windows操作系统中的扫雷规则。本文将详细介绍如何使用JavaScript实现一个扫雷小程序,并解析其中的关键技术和算法。 **...
《仿Windows自带扫雷小程序的源码解析》 在计算机编程的世界里,Windows操作系统自带的扫雷游戏无疑是一款经典的小程序。它不仅简单易玩,更蕴含了丰富的算法设计和用户体验考虑。本压缩包文件“商业编程-源码-仿 ...
8. **多线程**:如果扫雷游戏有后台进程(如统计玩家数据、保存游戏进度),则可能涉及多线程编程,C#的System.Threading命名空间提供了线程管理和同步的相关类。 9. **状态机设计**:扫雷游戏的逻辑可以看作一个...
总的来说,实现简易扫雷游戏的Java版本是一个涉及GUI设计、事件处理、算法应用、游戏逻辑等多个方面的综合性编程任务。通过这个项目,开发者不仅可以巩固Java基础知识,还能提升对游戏开发的理解和实践能力。
Windows操作系统中的扫雷游戏,作为一个经典的小程序,深受用户喜爱。它的简洁界面、策略性玩法以及隐藏在数字背后的逻辑,使其成为编程学习者的理想研究对象。本文将从Windows原版扫雷源码的角度出发,详细探讨其...
这样的设计使得在程序中判断某个格子是否为雷变得简单直接。 在游戏逻辑上,开发者创建了自定义的视图类,这些类包含了游戏的各个关键功能,如点击格子、标记雷、计算周围雷数等。视图类的设计是面向对象编程思想的...
Java扫雷是一款深受各年龄层用户喜欢的经典益智游戏,它在简单的规则下蕴含着丰富的策略挑战。本设计报告将详细阐述如何使用Java语言实现扫雷游戏。 ### 1. 需求分析 1.1 设计背景 扫雷游戏因其易于上手和独特的...
在执行过程中,程序会根据用户选择的难度(简单、中等、困难)设置不同数量的雷。这通常通过设置雷区大小和雷的数量来实现。游戏的结束条件是玩家标记出所有雷或者踩到一颗雷,此时会显示游戏结束界面,并计算完成...
6. **控件交互**:在扫雷游戏中,按钮代表雷区的格子,点击按钮后,程序需要更新按钮的文本和外观,以显示其状态(数字、标记或空格)。这涉及到了对控件状态的修改和同步。 7. **错误处理**:为了提高用户体验,...
扫雷是一款经典的益智游戏,它起源于早期的计算机时代,由于其简单易上手,但又具有很高的挑战性,深受广大用户的喜爱。在微软的Windows操作系统中,扫雷游戏作为内置游戏之一,陪伴了无数用户度过闲暇时光。 **...
扫雷,一款经典的益智游戏,以其简单易学却又充满挑战性的特点深受用户喜爱。本项目是基于TC(Turbo C)编译器实现的一个扫雷版本,支持鼠标和键盘双重操作,与Windows系统自带的扫雷游戏在功能上基本保持一致。下面...
4. **数据库设计图**:尽管扫雷游戏可能并不需要复杂的数据库存储,但设计一个简单的数据库用于记录游戏历史或用户成就也是可能的。数据库设计图将展示数据表结构、字段和它们之间的关系。 5. **程序类设计图**:这...
在本文中,我们将深入探讨如何使用C++编程语言实现一个简单的控制台版扫雷游戏。这个项目对于初学者来说是一个很好的实践,因为它涉及到C++的基本语法、数组的应用以及逻辑控制。我们将关注以下几个关键知识点: 1....
在扫雷游戏中,可能包含玩家的统计数据,如完成时间、胜利次数等。 3. `Mine.cpp`:这个名字暗示了这可能是核心逻辑的实现,包括雷区生成、雷的位置计算、点击格子后的判断逻辑等。这部分代码是游戏的核心,决定了...
根据提供的源代码,我们可以分析出这是一段用C语言编写的扫雷游戏程序。下面将对这段代码的关键知识点进行详细解读。 ### 1. 宏定义与数据结构 #### 宏定义 - `#include<graphics.h>`:包含了用于图形处理的头文件...
在本篇介绍中,我们将探讨如何使用C语言实现一个简单的扫雷小游戏。扫雷游戏是一种经典的游戏,旨在训练玩家的空间推理和逻辑能力。通过提供的代码片段,我们可以看到以下几个关键知识点: 1. **游戏菜单**: 游戏...
扫雷游戏虽然规则简单,但其背后的编程实现涉及了多个关键知识点,包括事件处理、图形用户界面(GUI)设计、随机数生成以及算法应用等。 首先,C++是这个项目的基础,它是一种静态类型、编译式的通用编程语言,支持...
扫雷小游戏是一款经典且普及的游戏,它以简单的规则和丰富的策略性吸引了众多玩家。这款小游戏在编程领域中常被用作教学示例,因为它能够帮助初学者理解基础的逻辑编程、事件处理以及游戏循环等概念。本文将深入探讨...
第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 ...