package com.titian.bean;

import java.awt.CardLayout;
import java.awt.Point; public class Grid {
char content;
boolean state;
Point point;
public char getContent() {
return content;
}
public void setContent(char content) {
this.content = content;
}
public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}
package com.titian.core;

import java.awt.Point;
import java.util.Random; import com.titian.bean.Grid; public class Game {
Grid[][] grid = new Grid[9][9];
int count = 10;
Random r = new Random();
public void addGrid() {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
grid[i][j] = new Grid();
grid[i][j].setContent(' ');
grid[i][j].setState(false);
grid[i][j].setPoint(new Point(i,j));
}
}
} public void paint() {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
if(grid[i][j].isState()) {
System.out.print(grid[i][j].getContent() + " ");
}else {
System.out.print("■ ");
}
}
System.out.println();
}
}
public void setMine() {
int i = 0;
do {
int x = r.nextInt(9);
int y = r.nextInt(9);
if(grid[x][y].getContent() != '*') {
grid[x][y].setContent('*');
i++;
}
}while(i < count);
} public Point[] getPoint(int x, int y) {
Point[] point = new Point[8];
point[0] = new Point(x - 1, y);
point[1] = new Point(x - 1, y - 1);
point[2] = new Point(x, y - 1);
point[3] = new Point(x + 1, y - 1);
point[4] = new Point(x + 1, y);
point[5] = new Point(x + 1, y + 1);
point[6] = new Point(x, y + 1);
point[7] = new Point(x - 1, y + 1);
return point;
} public void setNumber() {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
int sum = 0;
if(grid[i][j].getContent() == '*') {
continue;
}else {
Point[] point = getPoint(i, j);
for (int k = 0; k < point.length; k++) {
Point p = point[k];
if(p.x >=0 && p.y >= 0 && p.x < 9 && p.y < 9) {
if(grid[p.x][p.y].getContent() == '*') {
sum++;
}
}
}
}
if(sum > 0) {
grid[i][j].setContent((char)(48 + sum));
}
}
}
} public void stamp(int x, int y) {
if(grid[x][y].getContent() == '*') {
System.out.println("game over");
}else {
grid[x][y].setState(true);
if(grid[x][y].getContent() == ' ') {
Point[] point = getPoint(x, y);
for (int k = 0; k < point.length; k++) {
Point p = point[k];
if(p.x >=0 && p.y >= 0 && p.x < 9 && p.y < 9) {
if(grid[p.x][p.y].getContent() == ' ' && grid[p.x][p.y].isState() == false) {
stamp(p.x,p.y);
}else if(grid[p.x][p.y].getContent() != ' ') {
grid[p.x][p.y].setState(true);
}
}
}
}
}
} }
package com.titian.test;

import java.util.Scanner;

import com.titian.core.Game;

public class Test1 {
public static void main(String[] args) {
Game g = new Game();
g.addGrid();
g.setMine();
g.setNumber(); Scanner s = new Scanner(System.in);
g.paint();
while(true) {
System.out.println("x坐标");
int x = s.nextInt();
System.out.println("y坐标");
int y = s.nextInt();
g.stamp(x, y);
g.paint();
}
}
}

java版扫雷的更多相关文章

  1. wpf版扫雷游戏

    近来觉得wpf做出来的界面很拉风,自己也很喜欢搞些小游戏,感觉这做出来的会很炫,很装逼,(满足自己的一点小小的虚荣心)于是就去自学,发现感觉很不错,可是属性N多,太多了,而且质料也少,很多不会用,只会 ...

  2. js版扫雷(可直接运行试玩)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. ArcGIS Server 10 Java 版的Rest服务手动配置方法

    Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...

  4. PetaPojo —— JAVA版的PetaPoco

    背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...

  5. C+命令行+方向键=简易版扫雷

    前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什 ...

  6. 【转载】java版打字练习软件

    网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...

  7. 微博地址url(id)与mid的相互转换 Java版

    原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...

  8. JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄

    前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...

  9. Selenium关键字驱动测试框架Demo(Java版)

    Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html

随机推荐

  1. 【8.0.0_r4】AMS分析(十七)(ActivityManagerService.java下)

    代码位于frameworks/base/services/core/java/com/android/server/am/,一共有七十个文件. Java源码位于package com.android. ...

  2. [USACO10FEB] 吃巧克力Chocolate Eating (二分答案)

    题目链接 Solution 先直接二分答案,然后贪心判断,一旦少于答案就吃一块. 思路很简单,有一点细节. 一天内可以不吃巧克力. 注意处理最后时没吃完的全部在最后一天吃完. Code #includ ...

  3. java高并发解决思路

    一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站 ...

  4. Python学习笔记二--函数

    1.使用global语句定义全局变量 2.默认参数 默认参数值应该是不可变的.注意: 只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的 ...

  5. thinkphp5 redis使用

    参数参考位置:thinkphp\library\think\cache\driver class Redis extends Driver { protected $options = [ 'host ...

  6. 【Jmeter基础】 Linux上运行Jmeter

    Jmeter 是一个强大的并发压测工具,常用于性能测试,压力测试,接口测试等领域.本文将介绍如下内容: 1. Jmeter 执行阶梯式压测 2. Jmeter 如何压测网站的js,css 等资源 3. ...

  7. javascript标签放置位置

    首先:放置位置哪里都能放 但是js代码很有可能不起作用:例如:往id为span的标签中定时插入数字 var time=document.getElementById("span") ...

  8. 《单词的减法》state1~state17(第三遍学习记录)

    2016.05.24 state 8 curse/curve dedication 多用于奉献和献身 disastrous disruptive distract state 9 domestic/d ...

  9. Html5 学习笔记 --》html基础 css 基础

    HTML5 功能 HTML5特点 <!DOCTYPE html> <html lang="zh-cn"> <head> <meta cha ...

  10. jsbridge 原理

    https://juejin.im/post/5abca877f265da238155b6bc