这儿抄抄那儿抄抄搞来的,有很多问题,上学期期末交上去糊弄老师的,得分不高,懒得修改了随便看看吧
实验内容
采用java技术开发出一个简单的扫雷游戏,游戏分为初级、中级和高级三个级别,游戏启动后单击游戏菜单可以选择游戏难度,在游戏过程中单机滚轮可以随时切换难度。选择级别后将出现相应级别的扫雷区域,同时启动计时器。单击方块,若方块下有雷,用户便输了这一局,若所揭方块下没有雷,则显示一个数字,该数字代表此方块周围的8个方块中共有多少颗雷。如果用户认为某个方块下埋着雷,单击右键可以在方块上标识一个用户认为是雷的图标,即给出一个扫雷标记。用户每标记出一个扫雷标记(无论用户的标记是否正确),窗口左上角的雷数计数器将会减少一个。
可行性分析
目前。随着计算机网络的发展,游戏已经成为现在人生活的一部分,人们以不同的方式通过网络来娱乐,休闲。以计算机技术和网络技术为核心的现代网络技术已经在现实生活中得到广泛的使用,休闲类网络游戏集趣味性,娱乐性,互动性和益智性于一体,已经成为了多数人群的休闲方式,也为多数人所喜好。扫雷作为最常见的小游戏之一,其具有简单操作,休闲益智的特点。本程序使用能跨平台使用的Java语言进行编写,其具有跨平台性强,编写简单等特点,保证的游戏的可行性。
代码详细设计
游戏窗口绘制
进行游戏窗口的绘制以及鼠标监听
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.lang.ProcessBuilder.Redirect;
import javax.swing.JFrame;
public class GameMain extends JFrame{
//监听鼠标键盘事件
int wigth = 2 * Tool.OFFSET + Tool.MAP_W * Tool.SQUARE_LENGTH;
int height = 4 * Tool.OFFSET + Tool.MAP_H * Tool.SQUARE_LENGTH;
Image offScreenImage = null;
MapBottom mapBottom = new MapBottom();
MapTop mapTop = new MapTop();
Gamelevel gamelevel = new Gamelevel();
boolean begin=false;
void windows(){
//创建窗口
Tool.START_TIME = System.currentTimeMillis();
this.setVisible(true);
if(Tool.state==3){
this.setSize(500,500);
}else {
this.setSize(wigth,height);
}
this.setLocationRelativeTo(null);
this.setTitle("扫雷游戏");
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
//鼠标事件
this.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
switch (Tool.state){
case 0 :
if(e.getButton()==1) {
Tool.Mouse_X = e.getX();
Tool.Mouse_Y = e.getY();
Tool.Left = true;
}
if(e.getButton()==3) {
Tool.Mouse_X = e.getX();
Tool.Mouse_Y = e.getY();
Tool.Right = true;
}
case 1:
case 2:
if(e.getButton()==1){
if(e.getX()>Tool.OFFSET + Tool.SQUARE_LENGTH*(Tool.MAP_W/2)
&& e.getX()<Tool.OFFSET + Tool.SQUARE_LENGTH*(Tool.MAP_W/2) + Tool.SQUARE_LENGTH
&& e.getY()>Tool.OFFSET
&& e.getY()<Tool.OFFSET+Tool.SQUARE_LENGTH){
mapBottom.reGame();
mapTop.reGame();
Tool.FLAG_NUM=0;
Tool.START_TIME=System.currentTimeMillis();
Tool.state=0;
}
}
if(e.getButton()==2){
Tool.state=3;
begin=true;
}
break;
case 3:
if(e.getButton()==1){
Tool.Mouse_X = e.getX();
Tool.Mouse_Y = e.getY();
begin = gamelevel.hard();
}
default:
} } });
while (true) {
repaint();
begin();
try {
Thread.sleep(40);
} catch (InterruptedException e) {
e.printStackTrace();
} } }
void begin(){
if(begin){
begin=false;
gamelevel.hard(Tool.level);
dispose();
GameMain gameMain = new GameMain();
Tool.START_TIME = System.currentTimeMillis();
Tool.FLAG_NUM=0;
mapBottom.reGame();
mapTop.reGame();
gameMain.windows();
} }
public void paint(Graphics g) {
//循环方式建立网格
if(Tool.state==3){
g.setColor(Color.white);
g.fillRect(0,0,500,500);
gamelevel.paintSelf(g);
}else {
offScreenImage = this.createImage(wigth, height);
Graphics gImage = offScreenImage.getGraphics();
mapBottom.paintself(gImage);
mapTop.paintself(gImage);
g.drawImage(offScreenImage, 0, 0, null);
} }
public static void main(String[] args) {
GameMain gameMain = new GameMain();
gameMain.windows();
}}
游戏组件设计
绘制游戏相关组件,底层网格设计,获取网格坐标。显示剩余雷数及所用时间。双击中心笑脸可实现游戏重置。点击鼠标滚轮可重新选择游戏难度。游戏失败后,左右方格自动翻开,笑脸变为哭脸。点击后开始新游戏。
import java.awt.