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

1、项目介绍

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

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

2、技术框架

编程语言:Java

运行环境:JDK8+idea

3、演示视频

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

B站演示视频https://www.bilibili.com/video/BV1mo4y157nQ/

4、项目截图

4.1、首页

4.2、中级

4.3、高级

4.4、自定义

4.5、扫雷榜

4.6、介绍

4.7、玩法

4.8、扫雷过程

5、文档截图

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>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp扫雷最原始的版本可以追溯到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>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp扫游戏目标是在最短的时间内"
					+ "根据点击格子出现的数字找出所有非雷格子,同时避免踩雷。<br>&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp"
					+ "&nbsp&nbsp当玩家点开一个格子时,会在该格子上显示周围8个格子的雷数"
					+ "(如果没有雷则自动点开周围的格子),玩家需要通过这些数字来判断雷的位置,"
					+ "将是雷的格子标记为小红旗。当所有地雷被标记且非雷格子都被点开时游戏胜利。</body></html>");
			play.add(label4);
			play.setVisible(true);
		}
		validate();
	}

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

  • 4
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
以下是扫雷游戏Java+FX课程设计的基本要求: 1. 游戏规则:实现一个扫雷游戏游戏界面括雷区*** 2. 界面设计:使用JavaFX实现游戏界面,括菜单栏、游戏区域、计时器和状态栏等。 3. 功能实现:实现游戏的***代码,括注释、命名规范、代码风格等。 5. 团队协作:使用Git进行代码管理,每个人负责一个相对完整的模块,组长负责项目的代码管理、代码质量、编码规范、进度推进、项目展示等。 6. 文档撰写:撰写课程设计报告,括需求分析、设计方案、实现过程、测试结果等。 以下是一个简单的扫雷游戏Java+FX的代码示例: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.GridPane; import javafx.stage.Stage; public class Minesweeper extends Application { private static final int ROWS = 10; private static final int COLS = 10; private static final int MINES = 10; private Button[][] buttons = new Button[ROWS][COLS]; private int[][] board = new int[ROWS][COLS]; @Override public void start(Stage primaryStage) { GridPane root = new GridPane(); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { Button button = new Button(); button.setPrefSize(30, 30); button.setOnAction(event -> handleButtonClick(i, j)); root.add(button, j, i); buttons[i][j] = button; } } Scene scene = new Scene(root, 300, 300); primaryStage.setScene(scene); primaryStage.show(); initBoard(); } private void initBoard() { // 初始化雷区 int count = 0; while (count < MINES) { int row = (int) (Math.random() * ROWS); int col = (int) (Math.random() * COLS); if (board[row][col] != -1) { board[row][col] = -1; count++; } } // 计算每个格子周围的地雷数量 for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (board[i][j] != -1) { int countMines = 0; for (int k = i - 1; k <= i + 1; k++) { for (int l = j - 1; l <= j + 1; l++) { if (k >= 0 && k < ROWS && l >= 0 && l < COLS && board[k][l] == -1) { countMines++; } } } board[i][j] = countMines; } } } } private void handleButtonClick(int row, int col) { if (board[row][col] == -1) { // 踩到地雷,游戏结束 buttons[row][col].setText("X"); for (int i = 0; i < ROWS; i++) { for (int j = 0; j < COLS; j++) { if (board[i][j] == -1) { buttons[i][j].setText("X"); } } } } else { // 显示周围的地雷数量 buttons[row][col].setText(String.valueOf(board[row][col])); } } public static void main(String[] args) { launch(args); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java源码集合

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值