1、项目介绍

游戏界面可以分为三个模块:菜单栏,游戏数据显示区域以及雷区。菜单栏包括游戏难度的选择和排行榜的查询以及游戏帮助。游戏数据显示区域包括地雷计数区、计时区和重新开始按钮。雷区就是玩家的游戏区域,当玩家在游戏过程中用鼠标点击某一模块,系统会自动作出相应的响应,这就是游戏中的鼠标事件。

整个扫雷游戏中,玩家所能进行的操作有:选择难度、开始游戏、重新开始游戏和记录查询等。

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_java

2、技术框架

编程语言:Java

运行环境:JDK8+idea

3、演示视频


java的扫雷小游戏、扫雷游戏设计、扫雷小程序,附源码+文档+PPT,适合课程设计

4、项目截图

4.1、首页

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_html_02

4.2、中级

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_游戏_03

4.3、高级

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_html_04

4.4、自定义

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_自定义_05

4.5、扫雷榜

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_游戏_06

4.6、介绍

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_html_07

4.7、玩法

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_html_08

4.8、扫雷过程

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_游戏_09

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_自定义_10

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_html_11

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_游戏_12

5、文档截图

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_自定义_13

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_html_14

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_自定义_15

用java设计扫雷小游戏都使用了什么技术 java扫雷游戏报告总结_自定义_16

6、代码示例

package com.java.mine;

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.io.*;

public class MineGame extends JFrame implements ActionListener {
	JMenuBar bar;
	JMenu fileMenu1, fileMenu2;
	JMenuItem 初级, 中级, 高级, 自定义, 扫雷榜;
	JMenuItem 介绍, 玩法;
	MineArea mineArea = null;
	File 英雄榜 = new File("英雄榜.txt");
	Hashtable hashtable = null;
	ShowRecord showHeroRecord = null;
	JDialog set = null;
	JPanel panel, panel1, panel2, panel3, panel4;
	JLabel label, label1, label2, label3;
	JTextField row = null, column = null, mine = null;
	JButton 确认,取消;
	JDialog introduce = null, play = null;
	JLabel label4, label5;
	
	MineGame() {
		mineArea = new MineArea(16, 16, 40, 2);
		add(mineArea, BorderLayout.CENTER); // 边框布局
		bar = new JMenuBar();
		fileMenu1 = new JMenu("游戏");
		初级 = new JMenuItem("初级");
		中级 = new JMenuItem("中级");
		高级 = new JMenuItem("高级");
		自定义 = new JMenuItem("自定义");
		扫雷榜 = new JMenuItem("扫雷榜");
		fileMenu1.add(初级);
		fileMenu1.add(中级);
		fileMenu1.add(高级);
		fileMenu1.add(自定义);
		fileMenu1.add(扫雷榜);
		fileMenu2 = new JMenu("帮助");
		介绍 = new JMenuItem("介绍");
		玩法 = new JMenuItem("玩法");
		fileMenu2.add(介绍);
		fileMenu2.add(玩法);
		bar.add(fileMenu1);
		bar.add(fileMenu2);
		setJMenuBar(bar); // 设置窗体的菜单栏
		初级.addActionListener(this);
		中级.addActionListener(this);
		高级.addActionListener(this);
		自定义.addActionListener(this);
		扫雷榜.addActionListener(this);
		介绍.addActionListener(this);
		玩法.addActionListener(this);
		hashtable = new Hashtable();
		hashtable.put("初级", "初级#" + 999 + "#匿名");
		hashtable.put("中级", "中级#" + 999 + "#匿名");
		hashtable.put("高级", "高级#" + 999 + "#匿名");
		if (!英雄榜.exists()) {
			try {
				FileOutputStream out = new FileOutputStream(英雄榜);
				ObjectOutputStream objectOut = new ObjectOutputStream(out);
				objectOut.writeObject(hashtable);
				objectOut.close();
				out.close();
			} catch (IOException e) {
			}
		}
		showHeroRecord = new ShowRecord(this, hashtable);
		setBounds(300, 100, 480, 560); // 移动组件并调整大小
		setVisible(true); // 使Window可见
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭Window的同时关闭资源
		validate(); // 再次布置子组件
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == 初级) {
			mineArea.initMineArea(9, 9, 10, 1);
			setBounds(300, 100, 270, 350);
		}
		if (e.getSource() == 中级) {
			mineArea.initMineArea(16, 16, 40, 2);
			setBounds(300, 100, 480, 560);
		}
		if (e.getSource() == 高级) {
			mineArea.initMineArea(16, 30, 99, 3);
			setBounds(100, 100, 900, 560);
		}
		if (e.getSource() == 自定义) {
			set = new JDialog();
			set.setTitle("自定义难度");
			set.setBounds(300,100,300,130);
			set.setResizable(false);//设置大小不可变
			set.setModal(true);//设置为对话框模式
			panel = new JPanel();
			//panel.setLayout(new BorderLayout());
			panel1 = new JPanel();
			panel2 = new JPanel();
			panel3 = new JPanel();
			panel4 = new JPanel();
			label = new JLabel("请输入行列数与地雷数:", JLabel.CENTER); 
			label1 = new JLabel("行:", JLabel.CENTER); 
			label2 = new JLabel("列:", JLabel.CENTER); 
			label3 = new JLabel("地雷数:", JLabel.CENTER); 
			row = new JTextField();
			row.setText("16");
			row.setSize(1, 6);
			column = new JTextField();
			column.setText("16");
			mine = new JTextField();
			mine.setText("40");
			确认 = new JButton("确认");
			确认.addActionListener(this);
			取消 = new JButton("取消");
			取消.addActionListener(this);
			panel1.add(label1);
			panel1.add(row);
			panel2.add(label2);
			panel2.add(column);
			panel3.add(label3);
			panel3.add(mine);
			panel4.add(确认);
			panel4.add(取消);
			panel.add(panel1);
			panel.add(panel2);
			panel.add(panel3);
			set.add(label, BorderLayout.NORTH);
			set.add(panel, BorderLayout.CENTER);
			set.add(panel4, BorderLayout.SOUTH);
			set.setVisible(true);
		}
		if (e.getSource() == 扫雷榜) {
			if (showHeroRecord != null)
				showHeroRecord.setVisible(true);
		}
		if (e.getSource() == 确认) {
			int rowNum = Integer.parseInt(row.getText());
			int columnNum = Integer.parseInt(column.getText());
			int mineNum = Integer.parseInt(mine.getText());
			if(rowNum < 9)
				rowNum = 9;
			if(rowNum > 16)
				rowNum = 16;
			if(columnNum < 9)
				columnNum = 9;
			if(columnNum > 30)
				columnNum = 30;
			if(mineNum < 10)
				mineNum = 10;
			if(mineNum > 99)
				mineNum = 99;
			mineArea.initMineArea(rowNum, 
					columnNum, mineNum, 4);
			setBounds(100, 100, columnNum * 30, rowNum * 30 + 80);
			set.setVisible(false);
		}
		if (e.getSource() == 取消) {
			set.setVisible(false);
		}
		if (e.getSource() == 介绍) {
			introduce = new JDialog();
			introduce.setTitle("扫雷介绍");
			introduce.setBounds(300,100,300,300);
			introduce.setResizable(false);
			introduce.setModal(true);
			label4 = new JLabel();
			label4.setSize(280, 250);
			label4.setText("<html><body>        扫雷最原始的版本可以追溯到1973年"
					+ "一款名为“方块”的游戏。不久,“方块”被改写成了游戏“Rlogic”。在“Rlogic”里,玩家的任务是作为美国"
					+ "海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。"
					+ "两年后,汤姆·安德森在“Rlogic”的基础上又编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。"
					+ "1981年,微软公司的罗伯特·杜尔和卡特·约翰逊两位工程师在Windows3.1系统上加载了该游戏,"
					+ "扫雷游戏才正式在全世界推广开来。</body></html>");
			introduce.add(label4);
			introduce.setVisible(true);
		}
		if (e.getSource() == 玩法) {
			play = new JDialog();
			play.setTitle("游戏玩法");
			play.setBounds(300,100,300,300);
			play.setResizable(false);
			play.setModal(true);
			label4 = new JLabel();
			label4.setSize(280, 250);
			label4.setText("<html><body>        扫游戏目标是在最短的时间内"
					+ "根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。<br>      "
					+ "  当玩家点开一个格子时,会在该格子上显示周围8个格子的雷数"
					+ "(如果没有雷则自动点开周围的格子),玩家需要通过这些数字来判断雷的位置,"
					+ "将是雷的格子标记为小红旗。当所有地雷被标记且非雷格子都被点开时游戏胜利。</body></html>");
			play.add(label4);
			play.setVisible(true);
		}
		validate();
	}

	public static void main(String args[]) {
		new MineGame();
	}
}