java控制台扫雷_java实现扫雷游戏控制台版

本文实例为大家分享了java实现扫雷游戏控制台版,供大家参考,具体内容如下

扫雷游戏

a、游戏的分析

在游戏中需要存在对象包含哪些。

格子对象(grid):

属性:内容(content)、状态(type)

b、工程架构

设计工程包结构

bean:存放实体类

core:游戏核心类(游戏操作)

test:扫雷玩的测试类

c、编写类

grid(属性:content、type)

core类–游戏核心类(雷区创建、显示雷区、布雷、踩雷)

test类–测试类

d、核心类设计

1、格子对象创建方法定义

2、显示雷区方法定义

3、布雷方法定义

随机数工具:

random r=new random();

//获得整数类型的随机数

int x=r.nextint(参数);参数表示随机值范围–>9

4、八个方向对象的方法定义

point类:java中提供的坐标对象类 x,y

5、设置雷数的方法

通过遍历所有格子对象获取雷数的添加

6、踩雷

递归调用:在一个类的方法中实现当前方法调用自己的操作方式

1)、通过传入一个坐标获取当前坐标位置的格子对象内容,判断内容的类型完成游戏操作

1)、内容为雷 -->游戏结束

2)、内容位数字 -->显示当前格子内容

3)、内容为空白 -->通过当前位置实现空白的辐射操作(递归调用)

7、游戏胜利

1)、方法的返回类型

2)、test类中循环的结构(break)

扫雷实体类

package minersgame.bean;

/**

* 格子实体类

* @author 木叶

*拥有格子的内容和状态属性

*/

public class grid {

//定义格子的私有属性

private char content;

private boolean type;

public char getcontent() {

return content;

}

public void setcontent(char content) {

this.content = content;

}

public boolean istype() {

return type;

}

public void settype(boolean type) {

this.type = type;

}

}

核心代码

package minersgame.core;

import java.awt.point;

import java.util.random;

import minersgame.bean.grid;

/**

* 游戏核心类

* @author 木叶

*包含游戏核心的功能:雷区制定、布雷实现、踩雷操作、显示雷区、获取方向、设置雷数、踩雷、显示胜利

*/

public class core {

//定义一个存放格子对象的二维数组完成雷区的保存

grid[][] grid=new grid[9][9];

//定义雷数的属性

int count=10;

int count2 = count;

//定义一个属性获取当前状态

public boolean state=true;

//定义一个创建格子对象的方法,完成雷区中所有格子对象的创建

public void creategrid() {

//通过二维数组实现每个下标中添加格子对象

for(int i=0;i

for(int j=0;j

//创建格子对象完成二维数组下标数据存放

grid[i][j]=new grid();

//设置格子对象中的属性内容

grid[i][j].setcontent(' ');

grid[i][j].settype(false);

}

}

}

//定义一个布雷的方法

public void setmines() {

//定义随机数工具

random r=new random();

//通过随机方式获取随机坐标

do {

//获得x坐标

int x=r.nextint(9);

//获得y坐标

int y=r.nextint(9);

//判断当前随机位置的格子对象内容是否为雷,如果是雷就进入下次循环

if(grid[x][y].getcontent()!='*') {

//通过x和y获得当前位置的格子对象

grid[x][y].setcontent('*');

//实现数量自减

count--;

}

}while(count>0) ;

}

//定义显示雷区的方法

public void show() {

//通过遍历二维数组获得所有的格子个数

system.out.println("xy 0 1 2 3 4 5 6 7 8");

for(int i=0;i

system.out.print(i+" ");

for(int j=0;j

//

if(grid[i][j].istype() ){

system.out.print(grid[i][j].getcontent()+" ");

}else {

system.out.print("■ ");

}

}

system.out.println();

}

}

//定义坐标获取的方法 --获得8个方向的坐标对象方法

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 setminesnumber() {

//通过循环获得所有的格子对象

for(int i=0;i

for(int j=0;j

//定义一个统计类属的变量

int sum=0;

//判断当前格子对象内容是否为雷,如果是雷就进入下次获取,否则完成雷数统计

if(grid[i][j].getcontent()!='*') {

//通过当前的坐标获取八个方向坐标对象

point[] p=this.getpoint(i, j);

//通过坐标对象数组获取对应下标格子对象

for(int k=0;k

//获得每个坐标对象

point point=p[k];

//通过判断过去的8个方向位置是否越界

if(point.x>=0&&point.x<9&&point.y>=0&&point.y<9) {

//通过当前方向坐标获取位置上的格子对象

if( grid[point.x][point.y].getcontent()=='*') {

sum++;//雷数自增

}

}

}

//通过雷数统计变量确定是否有雷存在,如果有就将当前

//雷数添加到当前位置的格子对象中

if(sum>0) {

//在当前格子对象中添加雷数

grid[i][j].setcontent((char)(48+sum));

}

}

}

}

}

//定义一个踩雷踩雷

public void stampmine(int x,int y) {

//开启当前格子状态为打开

grid[x][y].settype(true);

//判断当前坐标位置的格子内容是否为雷,如果是雷就结束否则就继续

if(grid[x][y].getcontent()!='*') {

//判断当前格子对象是否为数字,如果为数字就不操作

if(grid[x][y].getcontent()==' ') {

//获得当前格子周围8个方向的坐标对象

point[] p=this.getpoint(x, y);

//循环遍历8个方向获得对应的格子对象

for(int k=0;k

//分别获得的方向对象

point point=p[k];

//判断是否越界

if(point.x>=0&&point.x<9&&point.y>=0&&point.y<9) {

/**

* 判断当前坐标对象对应的格子对象内容是否为空格,

* 如果是空格实现递归调用,如果是数字就开启当前格子

*/

if(grid[point.x][point.y].getcontent()==' '&&grid[point.x][point.y].istype()==false) {

//当前格子为空格的情况

this.stampmine(point.x, point.y);

}else {

//当前格子为数字的情况

grid[point.x][point.y].settype(true);

}

}

}

}

}else {

system.out.println("踩雷了,游戏结束!!!");

//修改游戏状态

state=false;

//显示出所有格子

for(int i=0;i

for(int j=0;j

grid[i][j].settype(true);

}

}

}

}

//定义一个游戏胜利的方法

public boolean getvictory(){

//为打开格子数

int number=0;

//使用循环得出格子总数

//使用循环得出打开格子总数

for(int i=0;i

for(int j=0;j

if(!grid[i][j].istype()) {

number++;

}

}

}

//判断未打开鸽子数师傅等于雷数,是则预习成功,不是进入下次

if(number==count2) {

for(int i=0;i

for(int j=0;j

grid[i][j].settype(true);

}

}

system.out.println("游戏胜利!!!扫雷成功!!!");

return false;

}else {

return true;

}

}

}

测试类

package minersgame.test;

import java.util.scanner;

import minersgame.core.core;

public class test {

public static void main(string[] args) {

/*

* 实现游戏核心

*/

//获得游戏核心类对象

core c=new core();

c.creategrid();

c.setmines();

//显示

c.show();

//添加雷数

c.setminesnumber();

scanner scan=new scanner(system.in);

while(c.state){

system.out.println("请输入x坐标:");

int x=scan.nextint();

system.out.println("请输入y坐标:");

int y=scan.nextint();

//调用踩雷方法

c.stampmine(x, y);

//显示雷区方法

c.show();

//判断是否游戏胜利

if(c.getvictory()) {

}else {

c.show();

break;

}

}

}

}

更多精彩游戏,请参考专题《java经典小游戏》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持萬仟网。

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值