类似XP系统里面的java扫雷游戏戏,用java编写,最好带有注释。。

您现在的位置:&&>>&&>>&&>>&&>>&正文
用Java编写扫雷游戏
  JButton showAll = new JButton("显示所有地雷");
  showAll.addActionListener(new ActionListener()
  public void actionPerformed(ActionEvent e)
  mp.showMines();
  buttonPanel.add(showAll);
  JButton replay = new JButton("重新开始");
  replay.addActionListener(new ActionListener()
  public void actionPerformed(ActionEvent e)
  mp.updateMines();
  buttonPanel.add(replay);
  buttonPanel.add(cb);
  remainMine = new JLabel("剩余雷数:" +mp.getMinenum());
  add(remainMine,BorderLayout.SOUTH);
  add(buttonPanel,BorderLayout.NORTH);
  class Pair
  public Pair(int r,int c)
  this.r =
  this.c =c;
  class MinePanel extends JPanel implements MouseListener
  private int cn,
  private Mine[][]
  private int hideMine =
  private int ableM
  private MineF
  private int w,h;
  public static ArrayList&Image& IMAGES = new ArrayList&Image&(12);
  public MinePanel(int rn,int cn,MineFrame f)
  IMAGES.add(new ImageIcon(getURL(".\\img\\0.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\1.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\2.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\3.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\4.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\5.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\6.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\7.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\8.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\mine.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\11.gif")).getImage());
  IMAGES.add(new ImageIcon(getURL(".\\img\\12.gif")).getImage());
  this.f =
  this.rn =
  this.ableMn = rn *
  addMouseListener(this);
  updateMines();
  public URL getURL(String file)
  URL url =
  url = this.getClass().getResource(file);
  catch(Exception e)
  e.printStackTrace();
  public void decAbleMn()
  ableMn --;
  public int getAbleMn()
  return ableMn;
  public void decHideMine()
  hideMine --;
  public void incHideMine()
  hideMine ++;
  public int getHideMine()
  return hideM
  public void setMinenum(int n)
  minenum =
  public int getMinenum()
&&&[2]&&&&
【责编:coco】
?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]?&[]
相关产品和培训
 友情推荐链接
 认证培训
 专题推荐
 ? ? ? ? ? ? ? ? ? ?
 今日更新
?&?&?&?&?&?&?&?&?&?&
 社区讨论
 博客论点
 频道精选
 Java 频道导航下次自动登录
现在的位置:
& 综合 & 正文
如何用java编写小游戏
应一起学习java的众兄弟姐妹们的要求,对塔防游戏小做一个简单的说明,本人学习java两年时间,现在刚刚入职,虽然上班基本不用java swing相关的知识,但由于大学期间运用awt、swing编写小游戏的那种成就感与喜悦使我仍然对编写小游戏有着很强烈的兴趣,编程么,没有什么比编写游戏更吸引人了(I think so),大学期间,当我第一次接触java图形化界面(awt)时,心里很是激动,那是我在校期间头一次感觉到自己写的程序与应用软件有点联系了,因为之前已经写了一年的控制台程序,整天scanf、printf什么的,那时候俄罗斯方块在我心目中一直是个神话,往事不堪回首啊。。。
当然,对于喜欢编游戏的朋友们,我还是推荐从简单到复杂,我是先后编写的贪吃蛇、俄罗斯方块(这两个比较经典了)、扫雷(这个可以编,只要你会一点awt,基本就是按钮+递归)、超级玛丽(背景不会移动)、坦克大战(这个绝对没看马士兵视频)、愤怒的小鸟(障碍物不会动)、塔防那款(这些游戏在我的资源里都有),超级玛丽后是我看过魔乐科技超级玛丽教学后编写完成的,这个视频对我编写贴图游戏有很大的帮助,内面有关于双缓冲图片、图片刷新的讲解,建议大家可以看一下。
接下来简单说一下我编游戏的基本步骤吧,希望对大家有帮助,我编写的基本都是贴图游戏,所谓贴图游戏也就是把图片一张一张画到窗体中(包括背景、敌人、障碍物),我在绘制的时候要用到双缓冲技术,简单说一下我对双缓冲的理解,我是按照视频上学来的方法,首先创建一张缓冲图片,然后将游戏所需要绘制的图片全部画到缓冲图片中,最后将缓冲图片画到窗体,这样做的目的是为了避免图片闪烁,因为这样每次都是将一张完整的图片绘制到窗体,如果不用这张缓冲图片,也就是将背景、敌人、障碍物等元素逐一绘制到窗体的话,由于不同元素绘制不是同时的(有先后顺序),所以会产生图片闪烁的现象,上一段:
import java.awt.C
import java.awt.G
import java.awt.image.BufferedI
import javax.swing.JF
public class BaseFrame extends JFrame {
* 构造函数
public BaseFrame() {
this.setBounds(100, 100, 500, 500); // 设置窗体的位置、大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体右上角那个叉关闭程序
this.setVisible(true); // 设置窗体可见
* 绘制方法
public void paint(Graphics gr) {
BufferedImage image = new BufferedImage(500, 500,
BufferedImage.TYPE_3BYTE_BGR); // 创建一张500*500的缓冲图片
Graphics g2 = image.getGraphics(); // 获取缓冲图片的画笔
* 这里面就可以画东西了,而且时候到image缓冲图片上,想画什么查阅java API里的Graphics 例如
* g2.drawRect(50, 50, 100, 100);
g2.setColor(Color.WHITE); // 设置画笔颜色
g2.drawRect(50, 50, 100, 100);
g2.fillRect(200, 200, 100, 100);
gr.drawImage(image, 0, 0, this); // 将缓冲图片画到窗体上
public static void main(String[] args) {
new BaseFrame();
这个差不多算是我编写游戏的基本架构,创建一个窗体,绘制一张缓冲图片到窗体,而且获取到了缓冲图片的画笔,这样你就可以用画笔画你需要的形状或是图片了。如果想让绘制的东西动起来,可以通过加入线程来实现,改变绘制物体的坐标,最重要一点不要忘记repaint;
import java.awt.C
import java.awt.G
import java.awt.image.BufferedI
import javax.swing.JF
public class BaseFrame extends JFrame implements Runnable {
* 绘制方块x坐标
private int x = 30;
* 绘制方块y坐标
private int y = 30;
* 构造函数
public BaseFrame() {
this.setBounds(100, 100, 500, 500); // 设置窗体的位置、大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体右上角那个叉关闭程序
this.setVisible(true); // 设置窗体可见
Thread thread = new Thread(this); //创建线程
thread.start(); //启动线程
* 绘制方法
public void paint(Graphics gr) {
BufferedImage image = new BufferedImage(500, 500,
BufferedImage.TYPE_3BYTE_BGR); // 创建一张500*500的缓冲图片
Graphics g2 = image.getGraphics(); // 获取缓冲图片的画笔
* 这里面就可以画东西了,而且时候到image缓冲图片上,想画什么查阅java API里的Graphics 例如
* g2.drawRect(50, 50, 100, 100);
g2.setColor(Color.WHITE); // 设置画笔颜色
g2.fillRect(x, y, 100, 100);
gr.drawImage(image, 0, 0, this); // 将缓冲图片画到窗体上
* 线程执行方法
public void run() {
while (true) {
if (x & 400 || y & 400) {
this.repaint();
Thread.sleep(50); //while(true)的循环里一点要记得sleep一会,要不然太可怕了。。。
} catch (InterruptedException e) {
e.printStackTrace();
public static void main(String[] args) {
new BaseFrame();
这个就实现了让图片动起来,但是这顶多算是一个动画,因为没有交互性,游戏是人来玩的嘛,这个可以通过加入事件来完成,下面加入一个键盘事件:
接下来,就是见证奇迹的时刻
import java.awt.C
import java.awt.G
import java.awt.event.KeyE
import java.awt.event.KeyL
import java.awt.image.BufferedI
import javax.swing.JF
public class BaseFrame extends JFrame implements Runnable, KeyListener {
* 绘制方块x坐标
private int x = 200;
* 绘制方块y坐标
private int y = 200;
* 构造函数
public BaseFrame() {
this.setBounds(100, 100, 500, 500); // 设置窗体的位置、大小
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体右上角那个叉关闭程序
this.setVisible(true); // 设置窗体可见
this.addKeyListener(this); // 添加键盘监听器
Thread thread = new Thread(this); // 创建线程
thread.start(); // 启动线程
* 绘制方法
public void paint(Graphics gr) {
BufferedImage image = new BufferedImage(500, 500,
BufferedImage.TYPE_3BYTE_BGR); // 创建一张500*500的缓冲图片
Graphics g2 = image.getGraphics(); // 获取缓冲图片的画笔
g2.setColor(Color.WHITE); // 设置画笔颜色
g2.fillRect(x, y, 100, 100);
gr.drawImage(image, 0, 0, this); // 将缓冲图片画到窗体上
* 线程执行方法
public void run() {
while (true) {
this.repaint();
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
* 按下时调用
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
// System.out.println(keyCode); // 打印按键的keyCode
if (keyCode == 38) { // 上按键
if (keyCode == 40) { // 下按键
if (keyCode == 37) { // 左按键
if (keyCode == 39) { // 右按键
* 释放按键时调用
public void keyReleased(KeyEvent e) {
public void keyTyped(KeyEvent e) {
public static void main(String[] args) {
new BaseFrame();
这个程序可以用上下左右按键控制方块移动了,运用这些知识基本可以搞定贪吃蛇、俄罗斯方块了,想再来复杂的可以学习一下鼠标监听器,祝你成功。
&&&&推荐文章:
【上篇】【下篇】 JAVA课程设计_扫雷游戏报告(定稿)_工学_高等教育_教育专区 暂无评价|0人阅读|0次下载|举报文档 JAVA课程设计_扫雷游戏报告(定稿)_工学_高等教育_教育专区。合肥...  java扫雷游戏课程设计报告 带有详细注释_理学_高等教育_教育专区。带有详细注释的java课程设计报告书 注释很详尽。。。《高级语言程序设计(2)》 课程设计任务书题 目...  JAVA课程设计-扫雷游戏_计算机软件及应用_IT/计算机_专业资料。 import java.awt.BorderL import java.awt.FlowL import java.awt.GridLa...  基于JAVA的扫雷游戏的设计与实现_计算机软件及应用_IT/计算机_专业资料。基于JAVA的扫雷游戏的设计与实现.JAVA 程序设计 A 课 程设计题 目 基于 JAVA 的扫雷游戏...  《算法设计与分析》课程设计 扫雷游戏设计 班姓 级名 计科 1003 班 指导教师开发时间
湖南涉外经济学院信息科学与工程学院 2012 年 12 月 摘要 ...  Java 课程设计报告 姓学院班专 名号系级业 1.设计内容及要求 . 1.1 扫雷游戏的基本要求 Windows 2000/XP 系统提供的扫雷游戏是一个很有趣的游戏。本章的...  基于Android扫雷游戏课程设计_工学_高等教育_教育专区。基于Android扫雷游戏实训报告 实训项目名称 基于 Android 扫雷游戏的开发与测试 二级学院专业班级姓学日 信息工程...  java_扫雷游戏课程设计报告_计算机软件及应用_IT/计算机_专业资料。JAVA扫雷游戏课程设计报告 Java 课程设计报告 姓学院班专 名号系级业 1.设计内容及要求 1.1 ...  23 Java 课程设计报告(2014) 扫雷游戏的设计 1 设计要求 Windows 2000/XP 系统提供的扫雷游戏是一个很有趣的游戏。本章的课程设计 使用 Java 语言编写一个与其...软件开发的家园,编程爱好者的天地.
&&|&&&&|&&
用Java编写扫雷游戏--代码思想
来源:互联网
时间: 21:29
importJava.awt.*;importjava.awt.event.*;importjavax.Swing.*;/*按扭类*/classBombextendsJButton {
publicintnum_x,num_y;
//第几号方块 publicintBombRoundC
//周围雷数 publicbooleanisB
//是否为雷 publicbooleanisC
//是否被点击 publicintBombF
//探雷标记 publicbooleanisR
//是否点击右键
publicBomb(intx,inty) {
BombFlag=0;
BombRoundCount=0;
isClicked=
isRight= }}/*窗口及算法实现类*/classMainBombextendsJFrameimplementsActionListener,MouseListener{
publicJTextF publicLabelnowBomb,setB publicintBlockNum,BombN
//当前方块数当前雷数 publicIconicon_bomb=newImageIcon("Bomb.gif");
//踩雷 publicIconicon_bomb_big=newImageIcon("bomb_big.gif");
//踩雷标记 publicIconicon_flag=newImageIcon("flag.gif");
//雷标记 publicIconicon_question=newImageIcon("question.gif");
//疑惑是否有雷 publicJButtonstart=newJButton("开始"); publicPanelMenuPamel=newPanel(); publicPanelmainPanel=newPanel(); publicBomb[][]bombB
/*界面设计*/
publicMainBomb() {
super("扫雷 Aaron2004制作2004.8");
BlockNum=64;
BombNum=10;
Containerc=getContentPane();
c.setBackground(Color.gray);
c.setLayout(newBorderLayout());
text=newJTextField("10",3);
nowBomb=newLabel("当前雷数" " " BombNum "");
setBomb=newLabel("设置地雷数");
start.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente)
BombNum=Integer.parseInt(text.getText().trim());
if(BombNum&=10&&BombNum&50)
JOptionPanemsg=newJOptionPane();
JOptionPane.showMessageDialog(null,"您设置的地雷数太多了,请重设!","错误",2);
MenuPamel.add(setBomb);
MenuPamel.add(text);
MenuPamel.add(start);
MenuPamel.add(nowBomb);
c.add(MenuPamel,"North");
mainPanel.setLayout(newGridLayout((int)Math.sqrt(BlockNum),(int)Math.sqrt(BlockNum)));
bombButton=newBomb[(int)Math.sqrt(BlockNum)][];
for(inti=0;i&(int)Math.sqrt(BlockNum);i
bombButton[i]=newBomb[(int)Math.sqrt(BlockNum)];
for(inti=0;i&(int)Math.sqrt(BlockNum);i
for(intj=0;j&(int)Math.sqrt(BlockNum);j
bombButton[i][j]=newBomb(i,j);
bombButton[i][j].setForeground(Color.gray);
bombButton[i][j].addActionListener(this);
bombButton[i][j].addMouseListener(this);
for(inti=0;i&(int)Math.sqrt(BlockNum);i
for(intj=0;j&(int)Math.sqrt(BlockNum);j
mainPanel.add(bombButton[i][j]);
c.add(mainPanel,"Center");
startBomb();
setSize(400,400);
setLocation(350,200);
setResizable(false);
对我有帮助
对我没帮助
以下留言只代表网友个人观点,不代表本站观点.

我要回帖

更多关于 java扫雷游戏 的文章

 

随机推荐