Java 课程设计 扫雷.docx

上传人:b****7 文档编号:9131756 上传时间:2023-02-03 格式:DOCX 页数:27 大小:38.74KB
下载 相关 举报
Java 课程设计 扫雷.docx_第1页
第1页 / 共27页
Java 课程设计 扫雷.docx_第2页
第2页 / 共27页
Java 课程设计 扫雷.docx_第3页
第3页 / 共27页
Java 课程设计 扫雷.docx_第4页
第4页 / 共27页
Java 课程设计 扫雷.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

Java 课程设计 扫雷.docx

《Java 课程设计 扫雷.docx》由会员分享,可在线阅读,更多相关《Java 课程设计 扫雷.docx(27页珍藏版)》请在冰豆网上搜索。

Java 课程设计 扫雷.docx

Java课程设计扫雷

自己写用Java写的扫雷游戏

-----------做课程设计的可以参考一下。

运行界面截图:

扫雷游戏主界面

以下是游戏代码(共分三个文件即三个类:

MySaoLei.java;Area.java和ZiDingYi.java):

 

//

(1)MySaoLei.java

packagecom.test;

importjava.awt.*;

importjavax.imageio.ImageIO;

importjavax.swing.*;

importjavax.swing.border.Border;

importjavax.swing.border.LineBorder;

importjava.awt.event.*;

importjava.io.File;

importjava.security.acl.Owner;

importjava.util.*;

publicclassMySaoLeiextendsJFrameimplementsActionListener,MouseListener{

//w表示横向可以放多少雷,h表示纵向可以放多少雷

staticintw=35,h=20;

//设置雷的个数

staticintleisum=180;

//用二维向量a[][]来存放雷

Areaa[][]=null;

//win用于判断是否完成扫雷

intwin=0;

JPaneljp=null;

JPaneljp0=null;

JMenuBarjmb;

JMenujm1,jm2;

JMenuItemjm1_1,jm1_2,jm1_3,jm1_4,jm1_5,jm2_1;

//主函数

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

MySaoLeimsl=newMySaoLei(w,h,leisum);

}

///////////////////////////////////////////////////构造函数

publicMySaoLei(intw,inth,intleisum)

{

a=newArea[h][w];

this.w=w;

this.h=h;

this.leisum=leisum;

jmb=newJMenuBar();

jm1=newJMenu("游戏(G)");

jm1_1=newJMenuItem("初级");

jm1_1.addActionListener(this);

jm1_2=newJMenuItem("中级");

jm1_2.addActionListener(this);

jm1_3=newJMenuItem("高级");

jm1_3.addActionListener(this);

jm1_4=newJMenuItem("自定义");

jm1_4.addActionListener(this);

jm1_5=newJMenuItem("退出");

jm1_5.addActionListener(this);

jm1.add(jm1_1);

jm1.add(jm1_2);

jm1.add(jm1_3);

jm1.add(jm1_4);

jm1.add(jm1_5);

jm2=newJMenu("帮助(H)");

jm2_1=newJMenuItem("游戏规则");

jm2_1.addActionListener(this);

jm2.add(jm2_1);

jmb.add(jm1);

jmb.add(jm2);

//创建一个网格布局g1

GridLayoutgl=newGridLayout(h,w);

gl.setHgap

(1);

gl.setVgap

(1);

jp=newJPanel();

jp.setLayout(gl);

//初始化雷区

for(inti=0;i

{

for(intj=0;j

{

a[i][j]=newArea();

a[i][j].addActionListener(this);

a[i][j].addMouseListener(this);

a[i][j].show(0);

jp.add(a[i][j]);

}

}

//添加每个按钮周围的按钮

addAround();

//设置雷

intii=0;

intjj=0;

for(inti=0;i

{

ii=(int)(Math.random()*h);

jj=(int)(Math.random()*w);

a[ii][jj].isLei=1;

a[ii][jj].Type=9;

}

//给每个按钮写上数据

for(inti=0;i

{

for(intj=0;j

{

if(a[i][j].isLei==0)

{

a[i][j].Type=getAroundsum(a[i][j]);

}

}

}

/////////////////////////////////////////////////////////////////////设置JFrame

this.setJMenuBar(jmb);

this.add(jp);

this.setSize(w*35+10,h*35);

this.setLocation(10,10);

this.setTitle("扫雷");

this.setIconImage(image);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setVisible(true);

}

//为每个按钮添加周围的按钮的函数

publicvoidaddAround()

{

for(inti=0;i

{

for(intj=0;j

{

a[i][j].around=newVector();

if(i>0&&j>0)

{

//左上角

a[i][j].around.add(a[i-1][j-1]);

//System.out.println(i+""+j+"左上角");

}

if(j>0)

{

//上方

a[i][j].around.add(a[i][j-1]);

//System.out.println(i+""+j+"上方");

}

if(i0)

{

//右上角

a[i][j].around.add(a[i+1][j-1]);

//System.out.println(i+""+j+"右上角");

}

if(i

{

//右边

a[i][j].around.add(a[i+1][j]);

//System.out.println(i+""+j+"右边");

}

if(i

{

//右下角

a[i][j].around.add(a[i+1][j+1]);

//System.out.println(i+""+j+"右下角");

}

if(j

{

//下方

a[i][j].around.add(a[i][j+1]);

//System.out.println(i+""+j+"下方");

}

if(i>0&&j

{

//左下角

a[i][j].around.add(a[i-1][j+1]);

//System.out.println(i+""+j+"左下角");

}

if(i>0)

{

//左边

a[i][j].around.add(a[i-1][j]);

//System.out.println(i+""+j+"左边");

}

}

}

}

//得到按钮周边雷的个数的函数

publicintgetAroundsum(Areaarea)

{

intsum=0;

Areaa=null;

for(inti=0;i

{

a=area.around.get(i);

if(a.isLei==1)

sum++;

}

returnsum;

}

 

//自动挖开空白区域

publicvoidwakai(Areaa)

{

Areaa2=null;

for(inti=0;i

{

a2=a.around.get(i);

if(a2.show==0&&a2.Type!

=0)

{

a2.show

(1);

}

if(a2.show==0&&a2.Type==0)

{

a2.show

(1);

wakai(a2);

}

}

 

}

//判断是否完成扫雷的函数

publicvoidwin()

{

//判断是否挖完

win=0;

for(inti=0;i

{

for(intj=0;j

{

if(a[i][j].isLei==1&&a[i][j].show!

=2)

{

win++;

}

}

}

if(win==0)

{

for(inti=0;i

{

for(intj=0;j

{

if(a[i][j].isLei==0&&a[i][j].show==0)

a[i][j].show

(1);

}

}

JOptionPane.showMessageDialog(this,"恭喜你!

扫雷完成!

");

}

}

//菜单响应函数

publicvoidactionPerformed(ActionEvente){

//TODOAuto-generatedmethodstub

if(e.getSource()==jm1_1)

{

newMySaoLei(20,15,60);

this.dispose();

}

if(e.getSource()==jm1_2)

{

newMySaoLei(30,18,90);

this.dispose();

}

if(e.getSource()==jm1_3)

{

newMySaoLei(35,20,140);

this.dispose();

}

if(e.getSource()==jm1_4)

{

ZiDingYizdy=newZiDingYi(this,"自定义游戏等级",true);

if(zdy.closeOwner)

this.dispose();

}

if(e.getSource()==jm1_5)

{

this.dispose();

}

if(e.getSource()==jm2_1)

{

//System.out.println("点击了游戏规则");

Stringmessage="游戏规则:

\n每个小方块上都可能是雷、1~8的数字或者空白(空白表示0)。

"+

"方块上的数字表示该方块周围8个方块中共有多少个雷。

\n您可以进行以下操作:

\n1、单击某个方块:

您将看到该方块的内容,如果该方块是雷,游戏结束,"+

"所有的雷都将爆炸,您将会被炸死。

\n2、右击某个方块:

如果您确定某个方块是雷,您可以右键标记以方便"+

"其他方块的判断。

\n3、双击某个方块:

如果某个方块周围的雷都已经全部标记,双击该方块可以查看它周围"+

"的所有方块。

\n当所有的雷的已全部标记时完成扫雷。

";

JOptionPane.showMessageDialog(this,message);

}

}

//鼠标响应函数

//鼠标响应函数

publicvoidmouseClicked(MouseEvente){

//TODOAuto-generatedmethodstub

for(inti=0;i

{

for(intj=0;j

{

if(e.getSource()==a[i][j])

{

//、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、单击鼠标

if(a[i][j].show!

=1)

if(e.getButton()==MouseEvent.BUTTON1&&e.getClickCount()==1)

{

//没挖到雷

if(a[i][j].isLei==0&&a[i][j].show==0)

{

a[i][j].show

(1);

if(a[i][j].Type==0)

{

wakai(a[i][j]);

}

}

//挖到雷

else

{

for(intii=0;ii

{

for(intjj=0;jj

{

a[ii][jj].show

(1);

}

}

}

}

////////////////////////////////////////////////////、、、、、、、、右击鼠标

if(a[i][j].show!

=1)

if(e.getButton()==MouseEvent.BUTTON3)

{

//System.out.println("右击"+i+""+j);

if(a[i][j].show==0)

{

a[i][j].show

(2);

break;

}

if(a[i][j].show==2)

{

a[i][j].show(3);

break;

}

if(a[i][j].show==3)

{

a[i][j].show(0);

break;

}

}

////////////////////////////////////////////////////、、、双击鼠标

if(e.getButton()==MouseEvent.BUTTON1&&e.getClickCount()==2)

{

intbiaoLeiSum=0;//周围标明是雷的数量

intbiaoCuoSum=0;//标错的数量

if(a[i][j].show==1)

{

for(intp=0;p

{

Areaa2=a[i][j].around.get(p);

if(a2.isLei==1&&a2.show==2)//a2是雷,并且已经标明

{

biaoLeiSum++;

}

if(a2.isLei==0&&a2.show==2)//a2不是雷,但是已经标明是雷

{

a2.biaocuo=1;

biaoCuoSum++;

}

}

if(biaoLeiSum==a[i][j].Type&&biaoCuoSum==0)

{

for(intp=0;p

{

Areaa3=a[i][j].around.get(p);

if(a3.isLei!

=1)

{

a3.show

(1);

if(a3.Type==0)

{

wakai(a3);

}

}

}

}

if(biaoCuoSum!

=0)

{

for(intii=0;ii

{

for(intjj=0;jj

{

if(a[ii][jj].biaocuo==0)

a[ii][jj].show

(1);

else

a[ii][jj].show(4);

}

}

}

}

}

}

}

}

win();

}

@Override

publicvoidmouseEntered(MouseEvente){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidmouseExited(MouseEvente){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidmousePressed(MouseEvente){

//TODOAuto-generatedmethodstub

}

@Override

publicvoidmouseReleased(MouseEvente){

//TODOAuto-generatedmethodstub

}

}

 

//

(2)Area.java

/*

*Area类,表示某个方块,是一个JButton

*/

packagecom.test3;

importjava.awt.Color;

importjava.util.Vector;

importjavax.swing.JButton;

importjavax.swing.border.Border;

importjavax.swing.border.LineBorder;

classAreaextendsJButton

{

//是否是雷(0表示不是雷,1表示是雷)

intisLei=0;

//类型(0表示空,1~8表示数字,9表示雷)

intType=0;

//显示1表示点击左键显示,0表示未做任何处理,2表示右键标记雷,3表示再次右键标记问号

//0表示没标错,1表示标错

intbiaocuo=0;

intshow=0;

Borderborder=newLineBorder(Color.blue,1);

Borderborder0=newLineBorder(Color.white,1);

Borderborder1=newLineBorder(Color.red,3);

Borderborder2=newLineBorder(Color.green,3);

Vectoraround=null;

publicArea()

{

this.setBorder(border);

}

//显示函数

publicvoidshow(inti)

{

this.show=i;

Strings=this.Type+"";

if(this.Type==0)

s="";

//初始

if(i==0)

{

this.setText("");

this.setBorder(border);

}

//挖开

if(i==1)

{

if(this.isLei==0)

{

this.setText(s);

this.se

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1