⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javamines.java

📁 java多媒体技术 7.1 播放声音文件 7.2 收音机 7.3 电子琴 7.4 吃豆游戏 7.5 简易壁球 7.6 弹球游戏 7.7 拯救生命 7.8 扫雷 7.9 双向飞碟 7
💻 JAVA
字号:
import java.awt.*;
import java.awt.image.*;
import java.applet.Applet;
import java.util.Vector;

import mines;
import cell;
import custombutton;
import digitaldisplay;

public class JavaMines extends Applet implements Runnable{
   mines cm=null;
   int RowsXCols;
   Vector ArrayOfControl, ArrayOfImages;
   boolean YouLose=false,started=false;
   int founded=0,flaged=0;
   MediaTracker tracker;
   Image img, flag, mina, ask, smile, smile1, smile2;
   // 为节省图片的上载时间将表示数字的图片整合到一张图片中
   // 在该图片中数字的具体顺序安排是:  1 2 3 4 5 6 7 8 * ? F
   Image strip;           
   Panel p; 
   custombutton cButt;
   digitaldisplay dd1,dd2;
   Thread clock=null;
   int clockvalue=99;
   //初始化	
   public void init(){
      tracker = new MediaTracker(this);
      img = getImage(getCodeBase(),"back.gif");
      tracker.addImage(img, 0); 
      smile = getImage(getCodeBase(),"smile.gif");
      tracker.addImage(smile, 0);
      smile1 = getImage(getCodeBase(),"smile1.gif");
      tracker.addImage(smile1, 0);
      smile2 = getImage(getCodeBase(),"smile2.gif");
      tracker.addImage(smile2, 0);
      strip = getImage(getCodeBase(),"strip.gif");
      tracker.addImage(strip, 0);
      // 该向量实现一个控件数组
      ArrayOfControl=new Vector(); 
      ArrayOfImages=new Vector();
      // 这是拥有游戏区的panel
      p=new Panel();
      try {
            //开始下载图片,直到全部完成
            tracker.waitForAll();
        } catch (InterruptedException e) {}
      // 这些图片来自strip      
      mina=createImage(new FilteredImageSource(strip.getSource(),new CropImageFilter(88,0,11,11)));
      ask=createImage(new FilteredImageSource(strip.getSource(),new CropImageFilter(99,0,11,11)));
      flag=createImage(new FilteredImageSource(strip.getSource(),new CropImageFilter(110,0,11,11)));
      // 将图片安排在一个数组中,以便可以使用一个整数来恢复它们
      ArrayOfImages.setSize(17);     
      for (int i=1;i<=8;i++) {
         Image tmpimg=createImage(new FilteredImageSource(strip.getSource(),new CropImageFilter((i-1)*11,0,11,11)));
         ArrayOfImages.setElementAt(tmpimg, i);
      }
      ArrayOfImages.setElementAt(mina, 16);
      setLayout(new FlowLayout(FlowLayout.CENTER,5,10));
      cButt= new custombutton(smile,this,30,30);
      dd1=new digitaldisplay(false, 2, Color.black, Color.red); 
      dd2=new digitaldisplay(false, 2, Color.black, Color.red);  
      add(dd2);
      add(cButt);
      add(dd1);       
   } 
   //启动线程
   public void start() {
      if (!started) { 
       
      started=true;
      startGame();

      } //!started

   }  
   //开始游戏	
   void startGame() { 
      cButt.setImage(smile);
      clockvalue=99;
      // Mines类支持不同大小和数量的雷,但是当前的GUI不支持,
      //如果改变了该变量的值,(即改变雷的大小和数量)可能会遇到布局管理问题
      cm= new mines(8,8,10); 
      RowsXCols=cm.Rows()*cm.Cols();
      p.setLayout(new GridLayout(cm.Rows(),cm.Cols()));
      for (int i=0; i< RowsXCols; i++){
         cell c= new cell(null,this,16,16);
         p.add(c);
         ArrayOfControl.addElement(c);
      }
      dd2.SetValue(Integer.toString(cm.Mines()));
      add(p);
      p.validate();  
      if (clock==null){
	 clock=new Thread(this);
         clock.start();
      }
   } 

   public void stop() {       
       clock=null;
   }

   public void run() {
       while(clock!=null){
           try {Thread.sleep(1000);} catch (InterruptedException e) {}
           clockvalue--;
           if (clockvalue==0) { /* 设置时钟 */
              YouLose=true; 
              cButt.setImage(smile2);
              clock=null;
              ShowAll(); 
           } else {
              dd1.SetValue(Integer.toString(clockvalue));
           }
       }
       
   }

   public void paint(Graphics g) {        
        //如果所有的图片还没有上载完成
        if (!tracker.checkAll()) {
          
        } else {
 
            g.drawImage(img,0,0,this);
        }
   }

   public Insets insets() { return new Insets(28,0,0,0); }
   
   public boolean mouseUp(Event  evt, int  x, int  y) {

      if (evt.target instanceof custombutton) {  //开始新游戏
         started=true;
         YouLose=false;
         founded=0;flaged=0;clockvalue=99;
         p.removeAll();
         ArrayOfControl.setSize(0); 
         startGame();
      }  
      return true; 
   }

   public boolean mouseDown(Event  evt, int  x, int  y) {
      //判断谁接收到了用户的输入
      cell c=(cell)evt.target;   
      int btnIndex=ArrayOfControl.indexOf(evt.target); 
      int cv=cm.get_play_field(btnIndex);
      cell tmpbtn;
      int tmpcv; int i; int tmpint;

      if (!YouLose) {//如果扫雷失败
      if ((cv & mines.SCOPERTA)==0) {   
        if(evt.modifiers==Event.META_MASK){
          if (c.image==flag) { 
              c.setImage(ask);
              flaged-=1;
              dd2.SetValue(Integer.toString(cm.Mines()-flaged));
              return true;
          }
          if (c.image==ask) { c.setImage(null); return true;}
          c.setImage(flag);
          flaged+=1;
          dd2.SetValue(Integer.toString(cm.Mines()-flaged));
          return true;
        }
        if (cv==mines.MINE) { 
            YouLose=true; 
            cButt.setImage(smile2);
            clock=null;
            ShowAll(); 
        } 
        cm.toShow.setSize(0);
        cm.Show(btnIndex/cm.Rows(),btnIndex%cm.Rows());
        
        for (i=0;i<cm.toShow.size();i++){
           tmpint=((Integer)cm.toShow.elementAt(i)).intValue();
           tmpbtn=(cell)ArrayOfControl.elementAt(tmpint);
           tmpcv=cm.get_play_field(tmpint);
           tmpbtn.setImage(IntToImage(tmpcv & mines.MASK)); 
           tmpbtn.disableCell();
           tmpcv=tmpcv | mines.SCOPERTA;
           founded++;
           if (founded==(RowsXCols-cm.Mines())) { 
              YouLose=true;
              cButt.setImage(smile1);
              clock=null;
           }
           cm.set_play_field(tmpint,tmpcv);
        }
        return true;     
       }
       return true;
      } //返回扫雷失败
      return true;
   }

   void ShowAll(){
      int i, cv;
      cell c;
      for (i=0;i<ArrayOfControl.size();i++){
         c=(cell)ArrayOfControl.elementAt(i); 
         cv=cm.get_play_field(i);
         if (cv==mines.MINE) {
            c.setImage(IntToImage(cv));
         }
      }
   }

   Image IntToImage(int i){
      Image img=null;
      img=(Image)ArrayOfImages.elementAt(i);
      return img;
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -