java实现扫雷游戏控制台版
本文实例为大家分享了java实现扫雷游戏控制台版,供大家参考,具体内容如下
扫雷游戏
a、游戏的分析
在游戏中需要存在对象包含哪些。
格子对象(Grid):
属性:内容(content)、状态(type)
b、工程架构
设计工程包结构
bean:存放实体类
core:游戏核心类(游戏操作)
test:扫雷玩的测试类
c、编写类
Grid(属性:content、type)
Core类–游戏核心类(雷区创建、显示雷区、布雷、踩雷)
Test类–测试类
d、核心类设计
1、格子对象创建方法定义
2、显示雷区方法定义
3、布雷方法定义
随机数工具:
Randomr=newRandom();
//获得整数类型的随机数
intx=r.nextInt(参数);参数表示随机值范围–>9
4、八个方向对象的方法定义
Point类:java中提供的坐标对象类x,y
5、设置雷数的方法
通过遍历所有格子对象获取雷数的添加
6、踩雷
递归调用:在一个类的方法中实现当前方法调用自己的操作方式
1)、通过传入一个坐标获取当前坐标位置的格子对象内容,判断内容的类型完成游戏操作
1)、内容为雷-->游戏结束
2)、内容位数字-->显示当前格子内容
3)、内容为空白-->通过当前位置实现空白的辐射操作(递归调用)
7、游戏胜利
1)、方法的返回类型
2)、test类中循环的结构(break)
扫雷实体类
packageminersgame.bean; /** *格子实体类 *@author木叶 *拥有格子的内容和状态属性 */ publicclassGrid{ //定义格子的私有属性 privatecharcontent; privatebooleantype; publicchargetContent(){ returncontent; } publicvoidsetContent(charcontent){ this.content=content; } publicbooleanisType(){ returntype; } publicvoidsetType(booleantype){ this.type=type; } }
核心代码
packageminersgame.core; importjava.awt.Point; importjava.util.Random; importminersgame.bean.Grid; /** *游戏核心类 *@author木叶 *包含游戏核心的功能:雷区制定、布雷实现、踩雷操作、显示雷区、获取方向、设置雷数、踩雷、显示胜利 */ publicclassCore{ //定义一个存放格子对象的二维数组完成雷区的保存 Grid[][]grid=newGrid[9][9]; //定义雷数的属性 intcount=10; intcount2=count; //定义一个属性获取当前状态 publicbooleanstate=true; //定义一个创建格子对象的方法,完成雷区中所有格子对象的创建 publicvoidcreateGrid(){ //通过二维数组实现每个下标中添加格子对象 for(inti=0;i0); } //定义显示雷区的方法 publicvoidshow(){ //通过遍历二维数组获得所有的格子个数 System.out.println("xy012345678"); for(inti=0;i =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)); } } } } } //定义一个踩雷踩雷 publicvoidstampMine(intx,inty){ //开启当前格子状态为打开 grid[x][y].setType(true); //判断当前坐标位置的格子内容是否为雷,如果是雷就结束否则就继续 if(grid[x][y].getContent()!='*'){ //判断当前格子对象是否为数字,如果为数字就不操作 if(grid[x][y].getContent()==''){ //获得当前格子周围8个方向的坐标对象 Point[]p=this.getPoint(x,y); //循环遍历8个方向获得对应的格子对象 for(intk=0;k =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(inti=0;i 测试类
packageminersgame.test; importjava.util.Scanner; importminersgame.core.Core; publicclassTest{ publicstaticvoidmain(String[]args){ /* *实现游戏核心 */ //获得游戏核心类对象 Corec=newCore(); c.createGrid(); c.setMines(); //显示 c.show(); //添加雷数 c.setMinesNumber(); Scannerscan=newScanner(System.in); while(c.state){ System.out.println("请输入X坐标:"); intx=scan.nextInt(); System.out.println("请输入Y坐标:"); inty=scan.nextInt(); //调用踩雷方法 c.stampMine(x,y); //显示雷区方法 c.show(); //判断是否游戏胜利 if(c.getVictory()){ }else{ c.show(); break; } } } }更多精彩游戏,请参考专题《java经典小游戏》
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。