java版扫雷
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版扫雷的更多相关文章
- wpf版扫雷游戏
近来觉得wpf做出来的界面很拉风,自己也很喜欢搞些小游戏,感觉这做出来的会很炫,很装逼,(满足自己的一点小小的虚荣心)于是就去自学,发现感觉很不错,可是属性N多,太多了,而且质料也少,很多不会用,只会 ...
- js版扫雷(可直接运行试玩)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- ArcGIS Server 10 Java 版的Rest服务手动配置方法
Java版的Manager中发布的服务默认只发布了该服务的SOAP接口,而REST接口需要用户在信息服务器,如Tomcat. Apache.WebLogic等中手工配置.由于在Java版的Server ...
- PetaPojo —— JAVA版的PetaPoco
背景 由于工作的一些原因,需要从C#转成JAVA.之前PetaPoco用得真是非常舒服,在学习JAVA的过程中熟悉了一下JAVA的数据组件: MyBatis 非常流行,代码生成也很成熟,性能也很好.但 ...
- C+命令行+方向键=简易版扫雷
前言: 想起来做这个是因为那时候某天知道了原来黑框框里面的光标是可以控制的,而且又经常听人说起这个,就锻炼一下好了. 之前就完成了那1.0的版本,现在想放上来分享却发现有蛮多问题的,而且最重要的是没什 ...
- 【转载】java版打字练习软件
网上找到一个java版的打字的游戏 import java.applet.Applet; import java.applet.AudioClip; import java.awt.Dimension ...
- 微博地址url(id)与mid的相互转换 Java版
原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分 ...
- JCEF3——谷歌浏览器内核Java版实现(一):使用jawt获取窗体句柄
前言 最近一段时间研究谷歌浏览器内核.谷歌浏览器内核一直开源,并维护更新,它的开源项目中内核更新速度和Chrome浏览器版本更新进度一样!而且它不同于WebKit(值得一题的是谷歌浏览器已不使用Web ...
- Selenium关键字驱动测试框架Demo(Java版)
Selenium关键字驱动测试框架Demo(Java版)http://www.docin.com/p-803493675.html
随机推荐
- 抽象abstract
1):一个类如果有抽象方法,这个类一定是抽象类.抽象类不一定有抽象方法.抽象方法是以分号结束.不是以{}. 抽象方法也不提供实现代码. 2):任何拓展抽象类的类都必须实现超类的所有抽象方法.除非子类也 ...
- Yii2 kineditor
用 kineditor实现异步 <table cellspadding=5 width=400> <tr height='150'> <td valign="t ...
- Python3解leetcode Count Primes
问题描述: Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Outpu ...
- TCP/IP协议 和 如何实现 互联网上点对点的通信
1.参考:https://www.cnblogs.com/onepixel/p/7092302.html TCP/IP 协议采用4层结构,分别是应用层.传输层.网络层 和 链路层 http 属 ...
- 基础复习之HTML (meta标签、块级元素与行内元素)
一.meta标签 SEO 如何在不使用JS的情况下刷新页面(http-equiv="refresh" , content="time") 设置页面缓存 移动端设 ...
- 20141211--C# 构造函数
namespace fengzhuang { class Class2 { private string _Name; private string _Code; public string _Sex ...
- 用 Flask 来写个轻博客 (18) — 使用工厂模式来生成应用对象
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 工厂模式 使用工厂方法 Factory Method 创建 app 对 ...
- delphi在64位系统下写注册表注意事项
HKEY_LOCAL_MACHINE写这个主键下的项,在64位系统下可能会重定向,所以构造时要加KEY_WOW64_64KEY reg := TRegistry.Create(KEY_WRITE or ...
- DomainObjectUtility
using System; using System.Collections; using System.Collections.Generic; using System.Collections.S ...
- 详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警
概述 应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作.服务监控.应用状态统计.日常服务状态巡检.突发故障处理.服务日常变更调整.集群管理.服务性能评估优化.数据库管理优化.随着应用 ...