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. MySQL执行计划之EXPLAIN基本解释说明

    一.EXPLAIN使用潜规则 explain + sql语句 例如: EXPLAIN SELECT * FROM `t_user`; 二. 表头字段详解 (1) id-----> 表的读取顺序 ...

  2. RabbitMQ之交换机

    1. 交换机类型 rabbitmq常见有四种交换机类型: direct, topic, fanout, headers. 一般headers都不用,工作中用得较多的是fanout,它会将消息推送到所有 ...

  3. Equivalent Prefixes

    题目链接 题意:给你两个数组a,b,大小为n,让你寻找一个数p (1<= p <= n) ,使之在 1~p 任意一个区间中a,b数组的最小值下标相同. 思路:看到用线段树去写的我也是服了. ...

  4. [CSP-S模拟测试]:养花(分块)

    题目描述 小$C$在家种了$n$盆花,每盆花有一个艳丽度$a_i$.在接下来的$m$天中,每天早晨他会从一段编号连续的花中选择一盆摆放在客厅,并在晚上放回.同时每天有特定的光照强度$k_i$,如果这一 ...

  5. (转)df命令

    转:http://man.linuxde.net/df df命令用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法 d ...

  6. Python 进阶_OOP 面向对象编程_self 的实例绑定

    目录 目录 self 和绑定 调用非绑定的方法 self 和绑定 在 Python 中 self 变量是特殊的, 其用于在实例方法中引用该方法所绑定的实例, 换句话说就是 Python 在实例化对象时 ...

  7. 学会如何使用,pycharm,和gitlanb

    好好看,好好学.这才是正确的. 1  在pycharm 里面选择checkout as  切换分支 2    选择自己提交的,然后选择审核人.是强哥

  8. svn没有权限检出项目

    解决方法 鼠标右键,svn,setings

  9. spring boot 尚桂谷学习笔记09 数据访问

    springboot 与数据库访问 jdbc, mybatis, spring data jpa,  1.jdbc原生访问 新建项目 使用 springboot 快速构建工具 选中 web 组件 sq ...

  10. 学习php的步骤是什么?

    PHP应该学什么,如何学好PHP (注:原文来自传智播客) 一些共性问题,大致是: 1. 应该怎样学习PHP,学习的顺序是怎样的? 2. PHP学好后,可以做什么事情? 3. 听得懂课,但是一旦自己独 ...