java 简单的扫雷游戏

//扫雷游戏
package Bible001;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Mine extends MouseAdapter {

	private JFrame mainFrame;
	private int[][] data;
	private JButton[][] buttons;
	private JButton startJB;
	private Label l;
	private int row;
	private int col;
	private int mineNumber;
	private int mineCount;
	private boolean isOver;
	public Mine(){
		row=15;
		col=15;
		mainFrame=new JFrame("扫雷v1.0");
		data=new int[row][col];
		buttons=new JButton[row][col];
		startJB=new JButton("Start");
		l=new Label("welcome to mine!");
		mineNumber=row*col/7;
	}
	public void init(){
		JPanel north=new JPanel();
		JPanel center=new JPanel();
		JPanel south=new JPanel();
		north.setLayout(new FlowLayout());
		center.setLayout(new FlowLayout());

		south.setLayout(new GridLayout(row,col,4,4));
		mainFrame.setLayout(new BorderLayout());
		mainFrame.add(north,BorderLayout.NORTH);
		mainFrame.add(center,BorderLayout.CENTER);
		mainFrame.add(south, BorderLayout.SOUTH);
		north.add(l);
		startJB.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				for(int i=0;i<row;i++){
					for(int j=0;j<col;j++){
						buttons[i][j].setText(" ");
						buttons[i][j].setBackground(Color.WHITE);
						data[i][j]=0;

						isOver=false;
					}
				}
				hashMine();
				mineCount=0;
				l.setText("let is go!");
			}
		});
		center.add(startJB);
		for(int i=0;i<row;i++){
			for(int j=0;j<col;j++){
				buttons[i][j]=new JButton(" ");
				buttons[i][j].setName((i+":"+j));
				//buttons[i][j].setSize(10,30);
				buttons[i][j].setBackground(Color.white);
				buttons[i][j].addMouseListener(this);
				south.add(buttons[i][j]);
			}
		}
		hashMine();
	}
	public void start(){
		mainFrame.setSize(800, 600);
		mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		mainFrame.setVisible(true);
	}
	public void hashMine(){
		for(int i=0;i<mineNumber;i++){
			data[(int)(Math.random()*row)][(int)(Math.random()*col)]=-1;

		}
		for(int i=0;i<row;i++){
			for(int j=0;j<col;j++){
				if(data[i][j]==-1)
					continue;
				int sum=0;
				for(int m=-1;m<=1;m++){
					for(int n=-1;n<=1;n++){
						if(i+m>=0&&j+n>=0&&i+m<row&&j+n<col){
							if(data[i+m][j+n]==-1)
								sum++;
						}
					}
				}
				data[i][j]=sum;
			}
		}
	}
	private void gameOver(boolean over){
		if(over==true){
			for(int i=0;i<row;i++){
				for(int j=0;j<col;j++){
					if(data[i][j]==-1){
						buttons[i][j].setText("M");
						buttons[i][j].setBackground(Color.red);
					}
				}
			}
			l.setText("-_-");
			isOver=true;
			return;
		}
		int sumPress=0;
		for(int i=0;i<row;i++){
			for(int j=0;j<col;j++){
				if(!buttons[i][j].getText().equals(" ")){
					sumPress++;
				}
			}
		}
		if(sumPress==row*col){
			int sum=0;
			for(int i=0;i<row;i++){
				for(int j=0;j<col;j++){
					if(data[i][j]==-1&&buttons[i][j].getText().
							equals(‘M‘)){
						sum++;
					}
				}
			}
		 	 if(sum>=mineNumber){
		 		 System.out.println(mineNumber);
		 		 l.setText("^_^");
		 	 }
		}
	}
	public void mousePressed(MouseEvent e){
		try{
			if(isOver)
				return;
			if(e.getButton()==MouseEvent.BUTTON3){
				JButton jb=(JButton)e.getSource();
				if(jb.getText().equals("M")){
					jb.setText(" ");
					mineCount--;
					jb.setBackground(Color.white);
				}else{
					if(mineCount<mineNumber){
						jb.setText("M");
						jb.setBackground(Color.BLUE);
						mineCount++;

					}else {
						l.setText("the mine flag is over!");

					}
				}
			}else{
				JButton jb=(JButton)e.getSource();
				mousePress(jb);
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
		gameOver(false);
	}
	private void mousePress(JButton jb){
		String str[]=jb.getName().split(":");
		int i=Integer.parseInt(str[0]);
		int j=Integer.parseInt(str[1]);
		if(data[i][j]==-1){
			gameOver(true);
			return;
		}else {
			jb.setText(data[i][j]+"");
			jb.setBackground(Color.yellow);
			if(data[i][j]==0){
				for(int m=-1;m<=1;m++){
					for(int n=-1;n<=1;n++){
						if(i+m>=0&&j+n>=0&&i+m<row&&j+n<col){
							if(buttons[i+m][j+n].getText().equals(" "));
							mousePress(buttons[i+m][j+n]);
						}
					}
				}
			}
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Mine mine=new Mine();
		mine.init();
		mine.start();
	}

}

时间: 2024-11-14 12:24:57

java 简单的扫雷游戏的相关文章

java swing开发扫雷游戏源代码

原文:java swing开发扫雷游戏源代码 源代码下载地址:http://www.zuidaima.com/share/1550463547886592.htm java 扫雷 游戏源码 源代码截图:

C++实现简单的扫雷游戏(控制台版)

C++新手的代码,请各位多包涵. 用C++写的一个简单的控制台版扫雷游戏.玩家通过输入方块的坐标来翻开方块. 只是一个雏形,能够让玩家执行翻开方块的操作并且判断输赢,还未添加标记方块.游戏菜单.记录游戏时间.重新开一局等等的功能. 玩家输入坐标的方式来翻开方块只适用于小型的“雷区”,若“雷区”大了,用坐标会变得很不方便. 代码片段扫雷V1.1 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

C语言编程 简单展开扫雷游戏

源代码如下 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<time.h> #define amu 10 #define Lshu 10 void menu()//菜单 { printf("*************************************\n"); printf("****** 欢 迎 来 到 扫 雷 游 戏 *****

java扫雷游戏源代码下载

原文:java扫雷游戏源代码下载 源代码下载地址:http://www.zuidaima.com/share/1550463791090688.htm 用java做的一个扫雷游戏,大家可以看看里面的算法.

Java Swing扫雷游戏demo分享

好多年前写过简略的扫雷游戏,模拟windows的. 后来由于多次搬迁环境,弄丢了,遗憾不已啊. 于是趁着这两年还在编程的道路上,趁热再次编写了一次,同时也扩展了功能,更接近windows的扫雷. 此次重写是用Javaswing实现的(eclipse开发),考虑到各位看客可能大部分是Android岗位,于是我着重注意了功能结构化的处理,使游戏核心算法与UI分离,使用回调交互,便于迁移到android环境. 本人对swing不是很熟练,一直以来用swing做项目的人很少,学习资料也少,所有的这些都是

Java练习(模拟扫雷游戏)

要为扫雷游戏布置地雷,扫雷游戏的扫雷面板可以用二维int数组表示.如某位置为地雷,则该位置用数字-1表示, 如该位置不是地雷,则暂时用数字0表示. 编写程序完成在该二维数组中随机布雷的操作,程序读入3个参数:布雷面板的行数(r),列数(c),布置的地雷个数(n), 且要满足0<n<r*c*0.75(即布置地雷的最大密度为75%),程序运行后将n个地雷随机地布置在r*c的二维数组,布置完成后进行扫雷游戏. import java.util.*; public class Minesweeper

【Android】自己动手做个扫雷游戏

1. 游戏规则 扫雷是玩法极其简单的小游戏,点击玩家认为不存在雷的区域,标记出全部地雷所在的区域,即可获得胜利.当点击不包含雷的块的时候,可能它底下存在一个数,也可能是一个空白块.当点击中有数字的块时,游戏会展现当前点击块所包含的数字.当点击空白块时,地图会展开,形成一个大小和形状不规则的图形,该图形的边界是数字块,也可以想成展开的是一个被数字包围着的不规则图形. 1.1 数字生成规则 扫雷游戏中是通过数字来判断雷的位置的,那么,数字的生成规则是什么呢?假设游戏中只有一个雷,那么,他的将被1这个

c++ 控制台版 扫雷游戏

白天看了一天书看累了,晚上瞅见扫雷游戏,就自己琢磨着做一个呗.想了一会,也没看别人怎么做的,大概1个多小时完成了这个简单版本的扫雷游戏,由于没怎么学过c#,界面的事情可能迟几天再做,明天要回家啦,哈哈! 先说思路,其实挺简单的. (1) 随机生成10个雷,标记到二维数组里,然后计算八个方向的雷的总数记录下来,这是预处理阶段. (2)输入要翻开的位置的坐标,如果是数字直接显示,是空白的话,这里采用bfs即宽度优先搜索解决,搜到最外层是数字(仅一层)时结束,具体详见代码. // 扫雷程序 #incl

简单的传球游戏(矩阵)

简单的传球游戏 Time Limit: 1000ms    Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main K(3<=K<=10^9)个人互相传球,某人接球后立即传给别人.假定初始状态球在甲手中,并将甲发球作为第一次传球过程.求经过N(N<=10^9)次传球后,球又回到甲手中的传球方案数,输出这个数模10^9+7后的结果. Input 第一行是一个整数T(T<=20000