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

📄 mdraw.java

📁 研学作品
💻 JAVA
字号:
import javax.swing.*; 
import java.awt.*; 

public class MDraw{
	int GRIDX;
	int GRIDY;
	int MINES;
	Container c;
	
	Image offI;
	Graphics offG;
	
	//图片数组
	Image[] imgSmile;
	Image[] imgCount;
	Image[] imgMap;
	
	//图片宽与长
	int MAP_WIDTH;
	int MAP_HEIGHT;
	int COUNT_WIDTH;
	int COUNT_HEIGHT;
	int SMILE_WIDTH;
	int SMILE_HEIGHT;
	
	//各区域坐标
	int STATE_X;//游戏状态区 
	int STATE_Y;
	int COUNT_X;//时间计数
	int COUNT_Y;
	int MCOUNT_X;//地雷计数
	int MCOUNT_Y;
	int MAP_X;//地雷区
	int MAP_Y;
	int SMILE_X;
	int SMILE_Y;
	
	public MDraw(int gridx,int gridy,int mines,Container c){
		this.GRIDX=gridx;
		this.GRIDY=gridy;
		this.MINES=mines;
		this.c=c;
		
		offI=c.createImage(c.getWidth(),c.getHeight());
		offG=offI.getGraphics();
		
		//读入所有图片
		imgMap=new Image[18];//地图上(数字,地雷)
		for(int i=0;i<=17;i++)imgMap[i]=(new ImageIcon("mapPic"+i+".gif")).getImage();
		
		imgCount=new Image[10];//计数(LED)
		for(int i=0;i<=9;i++)imgCount[i]=(new ImageIcon("ledPic"+i+".gif")).getImage();
		
		imgSmile=new Image[5];//游戏状态图(笑脸)
		for(int i=0;i<=4;i++)imgSmile[i]=(new ImageIcon("smiPic"+i+".gif")).getImage();
		
		//记录图片长宽
		SMILE_WIDTH=imgSmile[0].getWidth(null);//游戏状态图
		SMILE_HEIGHT=imgSmile[0].getHeight(null);
		COUNT_WIDTH=imgCount[0].getWidth(null);//计数
		COUNT_HEIGHT=imgCount[0].getHeight(null);
		MAP_WIDTH=imgMap[0].getWidth(null);//地图
		MAP_HEIGHT=imgMap[0].getHeight(null);
		
		//所有区域坐标
		MAP_X=MAP_WIDTH;//地雷区
		MAP_Y=MAP_HEIGHT*5;
		DrawMapFrame(MAP_X-3,MAP_Y-3,GRIDX*MAP_WIDTH+6,GRIDY*MAP_HEIGHT+6,3,false);
		
		STATE_X=MAP_WIDTH;//游戏状态区
		STATE_Y=MAP_HEIGHT;
		DrawMapFrame(STATE_X-3,STATE_Y-3,GRIDX*MAP_WIDTH+6,MAP_HEIGHT*3+6,3,false);
		
		MCOUNT_X=STATE_X+(MAP_HEIGHT*3-COUNT_HEIGHT)/2;//地雷数
		MCOUNT_Y=STATE_Y+(MAP_HEIGHT*3-COUNT_HEIGHT)/2;
		DrawMapFrame(MCOUNT_X-2,MCOUNT_Y-2,COUNT_WIDTH*3+4,COUNT_HEIGHT+4,2,false);
		
		COUNT_X=(STATE_X-3)+(GRIDX*MAP_WIDTH+6)-MAP_WIDTH-COUNT_WIDTH*3;//秒数
		COUNT_Y=MCOUNT_Y;
		DrawMapFrame(COUNT_X-2,COUNT_Y-2,COUNT_WIDTH*3+4,COUNT_HEIGHT+4,2,false);
		
		SMILE_X=(STATE_X-3)+(GRIDX*MAP_WIDTH+6-SMILE_WIDTH)/2;//笑脸
		SMILE_Y=STATE_Y+(MAP_HEIGHT*3-SMILE_HEIGHT)/2;
		
		//画出立体框
		DrawMapFrame(0,0,(GRIDX+2)*MAP_WIDTH,(GRIDY+6)*MAP_HEIGHT,4,true);
		
//		mapInit();
		showCount(MCOUNT_X,MCOUNT_Y,MINES);//显示地雷数
		showCount(COUNT_X,COUNT_Y,0);//显示秒数
		showSmile(0);//显示笑脸
	}
	
	//显示地图图标
	public void showMap(int x,int y,int mode){
		if(x>=0 && x<GRIDX && y>=0 && y<GRIDY){
			offG.drawImage(imgMap[mode],MAP_X+x*MAP_WIDTH,MAP_Y+y*MAP_HEIGHT,null);
		}
	}
	
	//显示笑脸
	public void showSmile(int i){
		if(i>=0 && i<=4)offG.drawImage(imgSmile[i],SMILE_X,SMILE_Y,null);
		update();
	}
	
	//显示计数数字
	public void showCount(int x,int y,int count){
		if(count>=0){
			offG.drawImage(imgCount[(count%1000)/100],x,y,null);
			offG.drawImage(imgCount[(count%100)/10],x+COUNT_WIDTH,y,null);
			offG.drawImage(imgCount[(count%10)],x+COUNT_WIDTH*2,y,null);
			update();//更新画面
		}
	}
	
	//画出砖块组动作区地图外框
	public void DrawMapFrame(int x,int y,int wid,int hig,int side,boolean raised){
		//定义多边形坐标
		int xx[][]={{x,x+wid,x+wid-side,x+side},//上
					{x+wid-side,x+wid,x+wid,x+wid-side},//右
					{x+side,x+wid-side,x+wid,x},//下
					{x,x+side,x+side,x}};//左
		
		int yy[][]={{y,y,y+side,y+side},//上
					{y+side,y,y+hig,y+hig-side},//右
					{y+hig-side,y+hig-side,y+hig,y+hig},//下
					{y,y+side,y+hig-side,y+hig}};//左
					
					
		//画出多边形
		for(int i=0;i<=3;i++){
			if(raised){//设定框为凸起
				switch(i){//不同边设定不同颜色
					case 0:offG.setColor(new Color(250,250,250));break;
					case 1:offG.setColor(new Color(120,120,120));break;
					case 2:offG.setColor(new Color(100,100,100));break;
					case 3:offG.setColor(new Color(240,240,240));break;
				}
			}
			else{
				switch(i){
					case 0:offG.setColor(new Color(100,100,100));break;
					case 1:offG.setColor(new Color(240,240,240));break;
					case 2:offG.setColor(new Color(250,250,250));break;
					case 3:offG.setColor(new Color(120,120,120));break;
				}
			}
			offG.fillPolygon(xx[i],yy[i],4);
		}
		update();//更新画面
	}
	
	public void update(){
		try{
			c.getGraphics().drawImage(offI,0,0,null);
		}
		catch(Exception e){}
	}
}

⌨️ 快捷键说明

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