扫雷(java代码)
来源:互联网 发布:大数据的前景分析 编辑:程序博客网 时间:2024/05/12 02:38
终于考完试了~回家的感觉真好~o(∩_∩)o ~
刚学了java,做课程设计时用java做了个最最简单的扫雷游戏,今天分享一下~
代码中用到的图片文件请去如下链接免费下载:
http://download.csdn.net/detail/u011433274/6852107
import java.util.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;/** * 主方法 */public class Main{public static void main(String args[]){MyFrame app = new MyFrame();app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);app.setVisible(true);}}/** * 主框架类 */class MyFrame extends JFrame{private final static int PRIMARY_ROW = 10;//初级行数private final static int PRIMARY_COL = 10;//初级列数private final static int PRIMARY_BOMB = 10;//初级雷数private final static int MEDIUM_ROW = 15;//中级行数private final static int MEDIUM_COL = 20;//中级列数private final static int MEDIUM_BOMB = 40;//中级雷数private final static int SENIOR_ROW = 20;//高级行数private final static int SENIOR_COL = 35;//高级列数private final static int SENIOR_BOMB = 120;//高级雷数private final static int SUPER_ROW = 30;//超难行数private final static int SUPER_COL = 50;//超难列数private final static int SUPER_BOMB = 350;//超难雷数private static int row = PRIMARY_ROW;//行数private static int col = PRIMARY_COL;//列数private static int bombnum = PRIMARY_BOMB;//雷数private static int blocknum = row * col;//雷区方格数private static int leftblocknum = blocknum - bombnum;//剩余方格数private static int weight = row * 20 + 70;//高度private static int width = col * 20;//宽度JMenuBar mBar;//菜单栏JMenu gameMenu,gradeMenu;JMenuItem startItem,exitItem;JMenuItem primary,medium,senior,ssuper;//四个级别JPanel MenuPanel;//状态面板JLabel noflagbombnum;//未标记雷数标签private static int leftbombnum = bombnum;//未标记雷数JPanel BombPanel;//雷区面板Bomb [][]bomb;//雷区方格数组ImageIcon iconbomb = new ImageIcon("Image/bomb.jpg");ImageIcon iconbomb0 = new ImageIcon("Image/bomb0.jpg");ImageIcon iconflag = new ImageIcon("Image/flag.jpg");ImageIcon iconflag2 = new ImageIcon("Image/flag2.jpg");ImageIcon icon1 = new ImageIcon("Image/1.jpg");ImageIcon icon2 = new ImageIcon("Image/2.jpg");ImageIcon icon3 = new ImageIcon("Image/3.jpg");ImageIcon icon4 = new ImageIcon("Image/4.jpg");ImageIcon icon5 = new ImageIcon("Image/5.jpg");ImageIcon icon6 = new ImageIcon("Image/6.jpg");ImageIcon icon7 = new ImageIcon("Image/7.jpg");ImageIcon icon8 = new ImageIcon("Image/8.jpg");ImageIcon icon0 = new ImageIcon("Image/0.jpg");ImageIcon icons = new ImageIcon("Image/s.jpg");public MyFrame()//构造方法{super("扫雷");//添加菜单mBar = new JMenuBar(); gameMenu = new JMenu("游戏"); startItem = new JMenuItem("新游戏"); gradeMenu = new JMenu("级别"); exitItem = new JMenuItem("退出"); primary = new JMenuItem("初级"); medium = new JMenuItem("中级"); senior = new JMenuItem("高级"); ssuper = new JMenuItem("超难"); mBar.add(gameMenu); gameMenu.add(startItem); gameMenu.add(gradeMenu); gameMenu.add(exitItem); gradeMenu.add(primary); gradeMenu.add(medium); gradeMenu.add(senior); gradeMenu.add(ssuper); setJMenuBar(mBar); //添加菜单栏监听器 startItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { setBomb(); } }); primary.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { row = PRIMARY_ROW; col = PRIMARY_COL; bombnum = PRIMARY_BOMB; setBomb(); } }); medium.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { row = MEDIUM_ROW; col = MEDIUM_COL; bombnum = MEDIUM_BOMB; setBomb(); } }); senior.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { row = SENIOR_ROW; col = SENIOR_COL; bombnum = SENIOR_BOMB; setBomb(); } }); ssuper.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { row = SUPER_ROW; col = SUPER_COL; bombnum = SUPER_BOMB; setBomb(); } }); exitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); Container c = getContentPane();//添加状态面板MenuPanel = new JPanel();noflagbombnum = new JLabel();MenuPanel.add(noflagbombnum);c.add(MenuPanel,BorderLayout.NORTH);//添加雷区面板BombPanel = new JPanel();c.add(BombPanel,BorderLayout.CENTER);setBomb();}public void setBomb()//随机布雷方法{//初始化雷区BombPanel.removeAll();//移除雷区所有组件bomb = new Bomb[row][col];BombPanel.setLayout(new GridLayout(row,col));for(int i=0;i<row;i++)for(int j=0;j<col;j++){bomb[i][j] = new Bomb(i,j);bomb[i][j].addMouseListener(new MouseAdapter(){public void mouseClicked(MouseEvent e){Bomb ebomb = (Bomb)e.getSource();if(e.getButton() == MouseEvent.BUTTON1){if(!ebomb.isClicked&&!ebomb.isRight){if(!ebomb.isBomb){open(ebomb);//打开方块isWin();//判断是否结束}else{for(int i=0;i<row;i++)for(int j=0;j<col;j++)if(bomb[i][j].isBomb)bomb[i][j].setIcon(iconbomb);ebomb.setIcon(icons);ebomb.setIcon(iconbomb0);isLose();setBomb();}}}else if(e.getButton() == MouseEvent.BUTTON3){if (!ebomb.isClicked) { ebomb.Bombflag = (ebomb.Bombflag + 1) % 3; if (ebomb.Bombflag == 1) { if (leftbombnum > 0) { ebomb.setIcon(iconflag); ebomb.isRight = true; leftbombnum--; } else ebomb.Bombflag = 0; } else if (ebomb.Bombflag == 2) { leftbombnum++; ebomb.setIcon(iconflag2); ebomb.isRight = false; } else ebomb.setIcon(icons); noflagbombnum.setText("未标记雷数 :"+leftbombnum); isWin(); }}}});BombPanel.add(bomb[i][j]);}blocknum = row * col;//方格数leftbombnum = bombnum;//未标记地雷数leftblocknum = blocknum - bombnum;//未打开方格数noflagbombnum.setText("未标记雷数 :"+leftbombnum);weight = row * 20 + 70;//窗口高度width = col * 20;//窗口宽度setSize(width,weight);//设定窗口大小setResizable(false);//设定不可改变窗口大小//初始化方格for(int i=0;i<row;i++)for(int j=0;j<col;j++){bomb[i][j].BombRoundCount = 9;bomb[i][j].Bombflag = 0;bomb[i][j].isBomb = false;bomb[i][j].isClicked = false;bomb[i][j].isRight = false;bomb[i][j].setIcon(icons);}//开始随机布雷Random rand = new Random();for(int i=0;i<bombnum;){int x = rand.nextInt(row);int y = rand.nextInt(col);if(!bomb[x][y].isBomb){bomb[x][y].isBomb = true;i++;}}calculateRoundBomb();}public void calculateRoundBomb()//计算周围雷数方法{for(int i=0;i<row;i++)for(int j=0;j<col;j++){int count = 0;if(!bomb[i][j].isBomb)for(int x=i-1;x<=i+1;x++)for(int y=j-1;y<=j+1;y++)if(x>=0&&y>=0&&x<row&&y<col&&bomb[x][y].isBomb)count++;bomb[i][j].BombRoundCount = count;}}public void isWin()//判断是否挖完了所有雷{if(leftblocknum == 0){JOptionPane.showMessageDialog(this,"恭喜你取得胜利!","胜利!",JOptionPane.INFORMATION_MESSAGE);setBomb();}}public void isLose(){noflagbombnum.setText("未标记雷数 :"+0);JOptionPane.showMessageDialog(this,"你踩到地雷了,点确定重新开始!","失败!",2);}public void isNull(Bomb clickbomb)//点击方格为空,翻开周围方格{int x = clickbomb.bx;int y = clickbomb.by;for(int i=x-1;i<=x+1;i++)for(int j=y-1;j<=y+1;j++)if(i>=0&&j>=0&&i<row&&j<col)if(!bomb[i][j].isBomb&&!bomb[i][j].isClicked&&!bomb[i][j].isRight)open(bomb[i][j]);}public void open(Bomb clickbomb)//点击打开方格{clickbomb.isClicked = true;leftblocknum--;if(clickbomb.BombRoundCount > 0){if(clickbomb.BombRoundCount == 1)clickbomb.setIcon(icon1);else if(clickbomb.BombRoundCount == 2)clickbomb.setIcon(icon2);else if(clickbomb.BombRoundCount == 3)clickbomb.setIcon(icon3);else if(clickbomb.BombRoundCount == 4)clickbomb.setIcon(icon4);else if(clickbomb.BombRoundCount == 5)clickbomb.setIcon(icon5);else if(clickbomb.BombRoundCount == 6)clickbomb.setIcon(icon6);else if(clickbomb.BombRoundCount == 7)clickbomb.setIcon(icon7);else if(clickbomb.BombRoundCount == 8)clickbomb.setIcon(icon8);}else{clickbomb.setIcon(icon0);isNull(clickbomb);}}}/** * 雷区方格类 */final class Bomb extends JButton{int bx,by;//方块所在位置int BombRoundCount;//周围雷数int Bombflag;//探雷标记boolean isBomb;//是否是雷boolean isClicked;//是否点击左键boolean isRight;//是否点击右键public static int blockopennum = 0;//打开方格数public Bomb(int x,int y)//构造方法{bx = x;by = y;BombRoundCount = 9;Bombflag = 0;isBomb = false;isClicked = false;isRight = false;}}
0 0
- 扫雷(java代码)
- java扫雷游戏代码
- 扫雷java实现代码
- 扫雷(java版)
- 扫雷代码
- java 扫雷
- java---扫雷
- 扫雷程序“布雷”代码(vb)
- c语言扫雷代码(详细)
- 扫雷代码之界面(1)
- 用Java编写扫雷游戏--代码思想
- JAVA自动扫雷(非作弊)
- java的扫雷小游戏(超简单)
- 扫雷(java图形界面好例题)
- 模拟扫雷--Java控制台操作(一)
- 模拟扫雷--Java控制台操作(二)
- C++扫雷代码
- 扫雷游戏代码
- android开发以及HelloWorld
- WIN2003下配置IIS和FTP
- 概率模型与计算机视觉
- 本人用jquery写的简明版本购物车
- 使用javaMail来发送和接收带附件的邮件
- 扫雷(java代码)
- Source Insight
- Linux Fork和exec系列函数
- Fedora-live-x86_64系统
- 为什么要对齐
- 开始在csdn写博客
- 单纯gdb调试android的so断点
- 轻松解决oracle11g 空表不能exp导出的问题。
- Oracle中的Clob与String类型转换