灵通163百科在线-实用的手机,证券免费资源网站

您现在的位置:首页 > K-JAVA资源 > JAVA游戏 >

JAVA小游戏之扫雷的源代码

教程来源:www.lt163.com     点击数:     更新时间:2018-01-13 20:36

老师讲的扫雷小游戏,因为基础还不扎实,所以还写不出扫雷游戏,大家可以看看尝试去写写。

————————————————————————————————————//测试类package com.titan.test;import java.util.Scanner;import com.titan.core.Game;public class Test1 { public static void main(String[] args) { //获得游戏核心类的对象 Game g=new Game(); //调用添加格子对象的方法3 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(); } }}————————————————————————————————————//游戏核心类package com.titan.core;import java.awt.Point;import java.util.Random;import com.titan.bean.Grid;/** * 游戏核心类 * @author Administrator * 雷区(游戏界面) */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; //通过循环的方式来获得10个格子对象 do{ //获得一个随机的行坐标 int x=r.nextInt(9); //获得一个随机的列坐标 int y=r.nextInt(9); //判断当前随机位置的格子内容是否是雷,如果不是就布雷 if(grid[x][y].getContent()!='*'){ //获得当前坐标位置的格子对象 grid[x][y].setContent('*'); i++; } }while(i<count); } //获得当前坐标位置的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 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{ //进入当前位置的8个方向的扫描 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("游戏结束"); }else{ //将当前的格子内容状态改成已打开 grid[x][y].setState(true); //判断当前的格子内容必须是空格的时候才执行辐射 if(grid[x][y].getContent()==' '){ //获得当前格子的8个方向坐标对象 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.titan.bean;import java.awt.Point;/** * 格子类 * @author Administrator * 格子的内容、格子的状态、格子的坐标 */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; } }

没有相关教程
UC浏览器 最先进实用的手机端浏览器,最大限度节省页面浏览流量,点击下载
老虎地图 绿色纯免费GPS定位省流量的最佳手机地图,点击下载
网秦手机安全系列 手机杀毒防盗,防火墙,构建手机安全,点击进入
塞班精品游戏 最流行最给力的塞班S60免签名名精品游戏合集,点击进入
阿里通 手机上轻松拨打网络电话和收发短信,高音质超省话费,资费标准
爱科手机电话 国内最好的手机网络电话领先品牌,价格低廉,点击查看
愤怒的小鸟2 全民挑战超流行休闲游戏力推新作-愤怒的小鸟2,点击查看
魔力旺旺 淘宝卖家首选的交易工具

资源下载排行
文章阅读排行