Java 课程设计 扫雷.docx
- 文档编号:9131756
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:27
- 大小:38.74KB
Java 课程设计 扫雷.docx
《Java 课程设计 扫雷.docx》由会员分享,可在线阅读,更多相关《Java 课程设计 扫雷.docx(27页珍藏版)》请在冰豆网上搜索。
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(i { //右上角 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) {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 课程设计 扫雷