java扫雷 论文,使用JAVA制作扫雷游戏

使用JAVA制作扫雷游戏

Custom Tab

package sailei;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.Font;

import java.awt.GridLayout;

import java.awt.Insets;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

public class MineSweepGame {

//声明需要的组件

private JFrame frame;

private Container contentPane;

private JPanel menuPanel,timePanel,gamePanel;

private JLabel timeLabel,resultLabel,mineCountLabel;

private JMenuItem menuItem1,menuItem2,menuItem3;

private JButton [][] buttons;

private int [] [] buttonsValue;

private int timeLength = 0;

private int row,col;

private int mineCount = 10;

//在构造方法中,创建组件,进行赋值

public MineSweepGame() {

row = 9;

col = 9;

frame = new JFrame ("中软卓越扫雷游戏。");

contentPane = frame.getContentPane();

menuPanel = new JPanel();

timePanel = new JPanel();

gamePanel = new JPanel();

timeLabel = new JLabel("游戏时间:"+ new Integer(timeLength).toString()+"秒");

resultLabel = new JLabel("状态:游戏进行中");

mineCountLabel = new JLabel("剩余地雷数:"+mineCount);

this.initButtonsAllValues();

}

//对按钮相关之进行赋值

public void initButtonsAllValues(){

buttons = new JButton[row + 2][col + 2];

buttonsValue  = new int[row + 2][col+ 2];

for (int i = 0;i < row + 2 ;i++){

for (int j = 0;j < col + 2 ;j++){

buttons[i][j] = new JButton();

buttons[i][j].setMargin(new Insets ( 0, 0, 0, 0));

buttons[i][j].setFont(new Font(null,Font.BOLD,25));

buttons[i][j].setText("");

buttonsValue[i][j] = 0;

}

}

}

//对组件进行布局

public void initGame() {

JMenuBar menuBar = new JMenuBar();

JMenu menu = new JMenu("游戏设置");

menuItem1 = new JMenuItem("初级");

menuItem2 = new JMenuItem("中级");

menuItem3 = new JMenuItem("再来一次");

menuBar.add(menu);

menu.add(menuItem1);

menu.add(menuItem2);

menu.add(menuItem3);

menuPanel.add(menuBar);

timePanel.add(menuItem1);

timePanel.add(mineCountLabel);

timePanel.add(resultLabel);

gamePanel.setLayout(new GridLayout(row, col , 0 ,0));

for(int i = 1; i<= row; i++) {

for(int j = 1; j<= col; j++) {

gamePanel.add(buttons[i][j]);

}

}

JPanel panel = new JPanel();

panel.setLayout(new BorderLayout());

panel.add(menuPanel, BorderLayout.NORTH);

panel.add(timePanel, BorderLayout.SOUTH);

contentPane.add(panel, BorderLayout.NORTH);

contentPane.add(gamePanel, BorderLayout.CENTER);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setSize(297, 377);

frame.setBounds(400, 100 ,400 ,500);

frame.setVisible(true);

//设置地雷

setMines(mineCount);

}

//设置地雷

public void setMines(int mineCount) {

this.mineCount = mineCount;

int[] randomValue = new int [mineCount];

//minneCount是地雷的个数。先获得10个不重复的随机数。然后通过随机数计算出雷的位置,保证随机数

for(int i = 0; i< mineCount; i++){

int temp = (int)(Math.random() * row * col);

for(int j = 0; j< randomValue.length; j++ ){

if (randomValue[j] == temp){

temp = (int) (Math.random() * row * col);

j++;

}

}

randomValue[i] = temp;

//把随机数转换成坐标

int x =randomValue[i] / col +1;

int y = randomValue[i] / col +1;

//对应坐标的位置设置地雷

buttonsValue[x][y]=10;

//临时显示地雷位置,作为测试使用。每次运行,随机产生。

buttons[x][y].setText("Q");

}

}

}

         游戏界面可以分为三个模块:菜单栏,游戏数据显示区域以及雷区。     (1)菜单栏:      菜单栏包括游戏难度的选择和排行榜的查询以及游戏帮助。     (2)游戏数据显示区域:      游戏数据显示区域包括地雷计数区、计时区和重新开始按钮。     (3)雷区:      雷区就是玩家的游戏区域,当玩家在游戏过程中用鼠标点击某一模块,系统会自动作出相应的响应,这就是游戏中的鼠标事件。            简单玩法介绍:         当玩家点开第一个格子时雷区开始布雷同时计时开始。然后会在该格子上显示周围8个格子的雷数(如果没有雷则自动点开周围的格子),     玩家就需要通过这些数字来判断雷的位置,将是雷的格子标记为小红旗。若玩家认为已标记的格子时错误的,可以再次右击该格子来取消标记。     当某一格子被标记时,对于该格子的单击操作是无效的(防止玩家误点击导致游戏失败)。如果玩家将某一格周围8个格子中的雷标记了出来,     双击该格子会自动将周围的格子点击一遍,这样可以简化玩家的操作。当玩家将全部的地雷标记出来并且其他的格子点开时,游戏结束。     但是如果玩家不小心点到了地雷就会游戏失败,系统自动显示出所有的地雷。如果玩家标识的地雷数量超过了该难度下规定的雷数,     计数区会以负数显示超出的雷数并且游戏不会结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值